1
1
/*
2
- Weather IOT station based on NIXIE lamps
3
- Ver 0.1
2
+ Погодная станция на NIXIE индикаторах
3
+ Ver 6.6
4
4
5
- Hardware required:
6
- - Temperature sensor DS18B20
7
- - Humidity sensor DHT11 (DHT12,DHT21,DHT22)
8
- - 433 MHz radio receiver (MX-RM-5V)
9
- - ESP8266 on TX-RX
5
+ Требуемые железки:
6
+ - Температурный датчик DS18B20
7
+ - Датчик влажности DHT11 (DHT12,DHT21,DHT22)
8
+ - 433 MHz радио-приемник (MX-RM-5V)
10
9
11
10
Autor: V. Nezlo
12
11
E-mail: vlladimirka@gmail.com
13
12
Github: https://github.com/V-Nezlo
14
13
15
14
*/
16
15
17
- // radio
18
- #include < iarduino_RF433_Receiver.h>
19
- iarduino_RF433_Receiver radioRX (3 );
20
- int data[4 ];
21
- int ds_data[2 ];
22
- uint8_t k;
23
- #define ADDRESS 111
24
- // radio
25
-
26
- #include < EasyTS.h>
16
+ #include < iarduino_RF433_Receiver.h>
27
17
#include < OneWire.h>
28
18
#include " DHT.h"
29
19
#include < GyverTimer.h>
30
20
31
- OneWire ds (5 ); // ds18b20 pin
32
- DHT dht (2 , DHT11); // DHT11 (or another) pin
33
-
34
- int tempin; // temp*10
35
- int tempout; // out temp *10
36
- int voltage; // sensor battery voltage
37
- char tempin_z; // + or - on indicators
38
- char tempout_z; // + or - on indicators
39
- int humi; // humidity
40
- int digits[4 ]; // nums
41
- char display_mode; // mode
42
- char display_mode_temp; // for cathode healing
43
- char P=0 ; // for carhode healing
44
- int sendmode;
45
-
46
- bool connection=0 ; // connection flag
47
- bool farenheit; // celsium or farenheit
21
+ OneWire ds (5 ); // ds18b20 пин
22
+ DHT dht (2 , DHT11); // DHT пин
23
+ iarduino_RF433_Receiver radioRX (3 ); // пин для радио (обязательно с хардварным прерыванием!)
24
+ #define ADDRESS 112
25
+ int data[4 ];
26
+ int ds_data[2 ];
27
+ uint8_t k;
28
+
29
+ int tempin; // температура*10
30
+ int tempout; // температура снаружи *10
31
+ int voltage; // Напряжение аккума внешнего датчика
32
+ char tempin_z; // + или - на первом индикаторе для внутренней температуры
33
+ char tempout_z; // + или - на первом индикаторе для внешней температуры
34
+ int humi; // влажности
35
+ int digits[4 ]; // массив для цифр
36
+ char display_mode; // режим
37
+ char display_mode_temp; // тут храним режим при лечении катодов
38
+ char P=0 ; // переменная для лечения
39
+
40
+ bool connection=0 ; // флаг наличия соединения
41
+ bool farenheit; // цельсии или фаренгейты
48
42
bool farenheit_overload_in; // flag for "carry" in
49
43
bool farenheit_overload_out; // flag for "carry" out
50
44
51
- const int out1 = A3; // Decoder pin 1
52
- const int out2 = A1; // Decoder pin 2
53
- const int out3 = 13 ; // Decoder pin 3
54
- const int out4 = A2; // Decoder pin 4
55
-
56
- const int key1 = 9 ; // Anode pin 1
57
- const int key2 = 12 ; // Anode pin 2
58
- const int key3 = 10 ; // Anode pin 3
59
- const int key4 = 11 ; // Anode pin 4
60
-
61
- const int dot = 4 ; // Dot inside the lamp
62
- const int dot1= 6 ; // Dot of internal temp
63
- const int dot2= 7 ; // Dot of internal humi
64
- const int dot3= 8 ; // Dot of external temp
65
-
66
- bool dotf =1 ; // flags
45
+ const int out1 = A3; // Пины декодера
46
+ const int out2 = A1;
47
+ const int out3 = 13 ;
48
+ const int out4 = A2;
49
+
50
+ const int key1 = 9 ; // Пины для анодов
51
+ const int key2 = 12 ;
52
+ const int key3 = 10 ;
53
+ const int key4 = 11 ;
54
+
55
+ const int dot = 4 ; // Точка внутри лампы
56
+ const int dot1= 6 ; // Точка внутренней температуры
57
+ const int dot2= 7 ; // Точка внутренней влажности
58
+ const int dot3= 8 ; // Точка внешней температуры
59
+
60
+ bool dotf =1 ; // флаги точек
67
61
bool dot1f =0 ;
68
62
bool dot2f =0 ;
69
63
bool dot3f =0 ;
70
64
71
- GTimer Tconv_start (MS,1000 );// Start conversion in ds18
72
- GTimer Tconv_read (MS,2000 ); // Read from ds18 time
73
- GTimer Tmode_switch (MS,6000 ); // switch mode time
74
- GTimer Tcathode_heal (MS,180000 );// cathode healing time
75
- GTimer Tcathode_switch (MS, 500 );// cathode healing switch time
76
- GTimer Tled_lowbat (MS, 300 );// led switching (low battery)
77
- GTimer Tled_noconn (MS, 800 );// led switching (noconnection)
78
- GTimer Tvalidate_radio (MS, 600000 ); // time to validate data
79
- GTimer Tsend_data (MS,15000 ); // ThingSpeak send data timer
65
+ GTimer Tconv_start (MS,1000 );// Таймер начала конверсии в ds18
66
+ GTimer Tconv_read (MS,2000 ); // Таймер чтения температуры с ds18
67
+ GTimer Tmode_switch (MS,6000 ); // Таймер переключения режимов
68
+ GTimer Tcathode_heal (MS,180000 );// Таймер для лечения катодов
69
+ GTimer Tcathode_switch (MS, 500 );// Таймер для смены катодов во время лечения
70
+ GTimer Tled_lowbat (MS, 300 );// Частота мигания индикатора при низком напряжении датчика
71
+ GTimer Tled_noconn (MS, 800 );// Частота мигания индикатора при отсутствии соединения
72
+ GTimer Tvalidate_radio (MS, 600000 ); // Таймер для проверки валидации
80
73
81
- const int bright = 1 ; // Value of "bright" of indicators
74
+ const int bright = 1 ; // "Яркость" индикаторов
82
75
83
76
void radio_init (void ){
84
77
radioRX.begin (1000 );
@@ -87,9 +80,9 @@ void radio_init(void){
87
80
}
88
81
89
82
void check_radio (void ){
90
- if (radioRX.available (&k)){ // If buffer has something
91
- radioRX.read (&data, sizeof (data)); // Read in data[]
92
- if (data[1 ]==ADDRESS) // Address checking
83
+ if (radioRX.available (&k)){ // Если в буфере что-то есть
84
+ radioRX.read (&data, sizeof (data)); // Записать в массив
85
+ if (data[1 ]==ADDRESS) // Проверить адрес
93
86
{
94
87
95
88
if (farenheit) tempout=(data[2 ]*1.8 )+320 ; // F=C*1,8+32
@@ -104,23 +97,24 @@ void check_radio(void){
104
97
if (tempout>0 ) tempout_z = 7 ;
105
98
else tempout_z = 8 ;
106
99
107
- // dot1f = 1;
108
-
100
+ if (tempout<0 ) tempout = tempout * (-1 );
109
101
connection=true ;
110
102
Tvalidate_radio.reset ();
103
+ // Serial.println("Соединение установлено");
111
104
}
112
105
113
- }
106
+ }
114
107
}
115
108
116
109
void check_validate_radio (void ){
117
110
if (Tvalidate_radio.isReady ())
118
111
{
119
112
connection=false ;
113
+ // Serial.print("Соединение потеряно");
120
114
}
121
115
}
122
116
123
- void setNumber (int num) { // Transfer number to the decoder
117
+ void setNumber (int num) { // Передача цифр в декодер
124
118
switch (num)
125
119
{
126
120
case 0 :
@@ -186,7 +180,7 @@ void setNumber(int num) { // Transfer number to the decoder
186
180
}
187
181
}
188
182
189
- void show (int a[]){ // Set numbers on indicators
183
+ void show (int a[]){ // Установка разрядов
190
184
int keys[] = { key1, key2, key3, key4 };
191
185
for (int i=0 ; i<4 ; ++i){
192
186
setNumber (a[i]);
@@ -230,6 +224,7 @@ if (connection==false) {
230
224
if (Tled_noconn.isReady ())
231
225
{
232
226
dot1f = !dot1f;
227
+ // Serial.println("мырг!");
233
228
}
234
229
}
235
230
else if (voltage<370 ){
@@ -253,12 +248,14 @@ void check_sensors_first(void){
253
248
void check_humidity (void ){
254
249
float h = dht.readHumidity ();
255
250
humi=h*10 ;
251
+ // Serial.print("Влажность: ");
252
+ // Serial.println(humi);
256
253
}
257
254
258
255
void conversion_start (void ){
259
- ds.reset (); // ALL RESET
260
- ds.write (0xCC ); // Skip device search
261
- ds.write (0x44 ); // Start conversion
256
+ ds.reset (); // Ресет
257
+ ds.write (0xCC ); // Пропуск скана шины
258
+ ds.write (0x44 ); // Начать конверсию
262
259
}
263
260
264
261
void conversion_read (void ){
@@ -279,6 +276,8 @@ void conversion_read(void){
279
276
if (tempin>0 ) tempin_z = 7 ;
280
277
else tempin_z = 8 ;
281
278
279
+ // Serial.print("Температура внутри ");
280
+ // Serial.println(tempin);
282
281
}
283
282
284
283
void displayMode (void ){
@@ -375,8 +374,9 @@ void displayMode(void){
375
374
if (Tcathode_switch.isReady ()) P++;
376
375
if (P>9 )
377
376
{
378
- display_mode = display_mode_temp; // restore mode after healing
377
+ display_mode = display_mode_temp; // Вернуть режим после лечения катодов
379
378
Tmode_switch.resume ();
379
+ // Serial.println("Режим отображения восстановлен");
380
380
P=0 ;
381
381
}
382
382
}
@@ -387,6 +387,7 @@ void displayMode(void){
387
387
void switchMode (void ){
388
388
if (Tmode_switch.isReady ())
389
389
{
390
+ // Serial.println("Режим отображения изменен");
390
391
switch (display_mode)
391
392
{
392
393
case 0 :
@@ -413,48 +414,29 @@ void cathodeHeal(void){
413
414
if (Tcathode_heal.isReady ())
414
415
{
415
416
Tmode_switch.reset ();
416
- display_mode_temp = display_mode;// save display_mode value
417
+ display_mode_temp = display_mode;// Сохраняем текущий режим отображения
417
418
display_mode=3 ;
418
419
Tmode_switch.stop ();
420
+ // Serial.println("Cathode healing enable");
419
421
}
420
422
421
423
}
422
424
423
- void iot_senddata (){
424
- char String_senddata[30 ];
425
- if (Tsend_data.isReady ()){
426
- switch (sendmode){
427
- case 0 :
428
- sprintf (String_senddata, " %u.%u" , tempin/10 , tempin%10 );
429
- easyts.send (" VF5VWODQICAG5BG3" , 1 , String_senddata);
430
- sendmode=1 ;
431
- break ;
432
- case 1 :
433
- sprintf (String_senddata, " %d" , humi);
434
- easyts.send (" VF5VWODQICAG5BG3" , 2 , String_senddata);
435
- sendmode=2 ;
436
- break ;
437
- case 2 :
438
- sprintf (String_senddata, " %u.%u" , tempout/10 , tempout%10 );
439
- easyts.send (" VF5VWODQICAG5BG3" , 3 , String_senddata);
440
- sendmode=0 ;
441
- break ;
442
- }
443
- }
444
- }
445
-
446
425
void setup (){
447
426
448
- Serial.begin (115200 );
449
- easyts.std_connect (" Nokia 7.1" ," 12345678" );
427
+ Serial.begin (9600 );
450
428
radio_init ();
451
429
pin_set ();
452
430
dht.begin ();
453
431
delay (300 );
454
- check_sensors_first ();// first run with delay
432
+ check_sensors_first ();// Первый запуск с делеем
455
433
check_humidity ();
456
434
farenheit = digitalRead (A0);
435
+
457
436
437
+ // Serial.print("Флаг фаренгейтов равен ");
438
+ // Serial.println(farenheit);
439
+
458
440
display_mode=0 ;
459
441
}
460
442
@@ -465,10 +447,4 @@ void loop(){
465
447
check_validate_radio ();
466
448
led_blinking ();
467
449
cathodeHeal ();
468
- iot_senddata ();
469
450
}
470
-
471
-
472
-
473
-
474
-
0 commit comments