#1 2021-06-28 20:58:39

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

sensor control — контроль датчиков

Не судите строго (особенно за грамматические ошибки в программе) слепил это все сегодня за день. просто пришла в голову мыслЯ и я её реализовал...
Смысл идеи в том, что иногда возникает необходимость дистанционно контролировать несколько каналов информации, несколько датчиков. По моему наиболее часто встречаются различные погодные, огородные, инкубаторные и тому подобные конструкции. Поэтому я выбрал для реализации три вида датчиков температура, давление, влажность. Естественно в программе каждый может прописать свои функции для своих датчиков это не сложно. Эти виды датчиков я выбрал просто для удобства описания функционала. Собственно сама программа для МК выглядит так.

//	****************************************************
#include <SoftwareSerial.h>
 SoftwareSerial btSerial(10, 11); 		// RX, TX
byte DatCn[6]={0, 0, 0, 0, 0, 0};    		// массив типа датчиков для каждого канала, обнулён при старте
byte datTyp;										// переменная выбранного датчика для отображения информации
String stringSENS = "";
String stringCHNL = "";
String string0 = "";	byte chen = 0;
String string1 = "";	byte sens_1 = 0;
String string2 = "";	byte sens_2 = 0;
String string3 = "";	byte sens_3 = 0;
String string4 = "";	byte sens_4 = 0;
String string5 = "";	byte sens_5 = 0;
String string6 = "";	byte sens_6 = 0;
//	****************************************************
//	****************************************************
void setup() {
			Serial.begin(57600);	
			btSerial.begin(9600);
	
	}
//	****************************************************
//	****************************************************
void loop()	{
if ((sens_1 + sens_2 + sens_3 + sens_4 + sens_5 + sens_6) == 0) {	clabel: 
	byte l_str = 0; stringSENS = "";
			stringSENS = btSerial.readString(); 
//			stringSENS = Serial.readString(); 
			l_str = stringSENS.length();
	if (l_str == 0) { goto clabel; }	
																			Serial.println( stringSENS );
string1 = stringSENS.substring(2, 4);		sens_1 = string1.toInt();	DatCn[0] = sens_1;
string2 = stringSENS.substring(5, 7);		sens_2 = string2.toInt();	DatCn[1] = sens_2;
string3 = stringSENS.substring(8, 10);		sens_3 = string3.toInt();	DatCn[2] = sens_3;
string4 = stringSENS.substring(11, 13);	sens_4 = string4.toInt();	DatCn[3] = sens_4;
string5 = stringSENS.substring(14, 16);	sens_5 = string5.toInt();	DatCn[4] = sens_5;
string6 = stringSENS.substring(17, 19);	sens_6 = string6.toInt();	DatCn[5] = sens_6;
    	 		}
		
if ((sens_1 + sens_2 + sens_3 + sens_4 + sens_5 + sens_6) != 0) {	slabel: 
	byte l_str = 0; stringCHNL = "";
			stringCHNL = btSerial.readString();
//			stringCHNL = Serial.readString();			
			l_str = stringCHNL.length();
	if (l_str == 0) { goto slabel; }	
			string0 = stringCHNL.substring(2, 3);
			chen = string0.toInt();	
	datTyp = DatCn[chen-1];	
if(chen < 7 && datTyp == 1) tempr();
if(chen < 7 && datTyp == 2) press();
if(chen < 7 && datTyp == 3) humid();
if(chen < 7 && datTyp == 0) nodat();	
if(chen < 7 && datTyp > 3) nochn(); }
		
	}
//	****************************************************
//	****************************************************
void nochn()	{							// сообщение в случае не корректного номера канала
btSerial.print("channel ");	btSerial.print(chen);	btSerial.println(" this channel is not available");
delay(1000);
//Serial.print("channel ");	Serial.print(chen);	Serial.println(" this channel is not available");
}
//	****************************************************
void nodat()	{							// сообщение в случае отсутствия датчика в канале
btSerial.print("sensor in channel ");	btSerial.print(chen);	btSerial.println(" is not installed ");
delay(1000);
//Serial.print("sensor in channel ");	Serial.print(chen);	Serial.println(" is not installed ");
}
//	****************************************************
void tempr()	{							// сообщение для датчика температуры
double Dtemp = ((analogRead(chen-1)/204.9)*36.09)/9.79;		// формула расчёта для датчика температуры (сейчас вольтметр)
btSerial.print("temperature sensor in channel "); btSerial.print(chen); btSerial.print(" information "); btSerial.print(Dtemp, 2); btSerial.println(" grC");
delay(1000);
//Serial.print("temperature sensor in channel "); Serial.print(chen); Serial.print(" information "); Serial.print(Dtemp, 2); Serial.println(" grC");
}
//	****************************************************
void press()	{							// сообщение для датчика давления
double Dpres = analogRead(chen-1)/4.25;		// формула расчёта для датчика давления
btSerial.print("pressure sensor in channel "); btSerial.print(chen); btSerial.print(" information "); btSerial.print(Dpres, 2); btSerial.println(" mm Hg");
delay(1000);
//Serial.print("pressure sensor in channel "); Serial.print(chen); Serial.print(" information "); Serial.print(Dpres, 2); Serial.println(" mm Hg");
}
//	****************************************************
void humid()	{							// сообщение для датчика влажности
double Dhumd = analogRead(chen-1)/211.85;	// формула расчёта для датчика влажности
btSerial.print("humidity sensor in channel "); btSerial.print(chen); btSerial.print(" information "); btSerial.print(Dhumd, 2); btSerial.println(" RH");
delay(1000);
//Serial.print("humidity sensor in channel "); Serial.print(chen); Serial.print(" information "); Serial.print(Dhumd, 2); Serial.println(" RH");
}
//	****************************************************
//	****************************************************

Останавливаться на ней я не буду так как там все без заморочек и разбито по блокам.
В конце поста будет ссылка на программы и там вариант будет с комментариями.

Контроль работы датчиков выполняет андроид программа на смартфоне. В этой программе можно сконфигурировать шесть каналов присвоив каждому свой тип датчика. Выглядит это так

SySceSisliekuPQL5Y0C1I8RTMw-960.jpg

Это стартовое окно при запуске программы. Здесь уже произошло соединение с блютуз модулем автоматически. а в самый первый раз при запуске нужно будет "тапнуть" верхнее окошко и выбрать модуль с которым будете работать.

rPZ4ZP_4hk12PYWUF23DJ_kLSS0-960.jpg

Теперь присваиваем каждому каналу свой тип датчика. Для этого "тапаем" на строку и появляется клавиатура, с её помощью создаем необходимую конфигурацию и "тапаем" на строку ниже для отправки данных в МК.

THNWdfNkNTRhCjkmo1LVcNDDw98-960.jpg

Вот теперь система сконфигурирована. Я намерено оставил некоторые каналы не определенными и один канал назначил ошибочным кодом.

Теперь "тапая" на экранные обозначения номера канала мы получаем соответствующие данные.

Q7Xk0uLpuAYdn-vxAIuFdRw-UOE-960.jpg

yk_uDqNnkOVV-NaK3Y_EBr8CqEY-960.jpg

C-LA-nzH-O-BEuhRGjD97uaCxsA-960.jpg

I5glF7WJBhKoENpZG7UI6v8SUho-960.jpg

K5Mf219gE70sQ2St-281jduAeuo-960.jpg

dCj2eozOQxr5XGptDXStL_xhZhQ-960.jpg

В данном варианте датчиков я не подключал, просто получал наводки на аналоговых входах, поэтому на значения не обращайте внимания.

Вот собственно и все, осталась ссылка на программы для МК и для смартфона.

https://drive.google.com/drive/folders/ … sp=sharing

Остання редакція renoshnik (2021-06-28 21:13:02)

Неактивний

#2 2021-06-29 17:27:40

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 412

Re: sensor control — контроль датчиков

Можно еще добавить отправку управляющих кодов из андроид в МК для исполнительных устройств. Будет как стартовая платформа для разработчиков умного дома.

Неактивний

#3 2021-06-30 08:10:02

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: sensor control — контроль датчиков

В принципе для этого можно и несколько кнопок добавить...  Или вообще сделать второй экран для "передатчика".

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму