GSM датчики температури. GSM термометри та сигналізації з термо датчиками

Метеостанція своїми руками.

Справа була ввечері, робити нічого після нового року. Як завжди, під час зимових новорічних канікул хочеться зайняти голову та й руки теж чимось корисним, творчим. У ці новорічні канікули вирішив зробити метеостанцію своїми руками. Готуватись почав заздалегідь, всі компоненти закуповував та збирав перед новим роком, а основне програмування робив на канікулах.

(Під катом багато фотографій!)

Спочатку пробігу по компонентах, посилання давати не буду, тому що на eBay (у особистому кабінеті) товари пішли до архіву. Багато компонентів купував повільно на аукціоні eBay. Вперше випробував аукціон, який раніше завжди купував «buy it now». Що можу сказати, якщо не поспішати з покупками, деякі компоненти можна купити дешевше (різниця іноді буває в два рази).

Датчик тиску ВМР085
Це головний датчик. Коли я побачив його на eBay, зрозумів, що хочу зібрати саме домашню метеостанцію.
Прилетів датчик у звичайному конверті, всередині обклеєному пухирцем.

Усередині конверта була візитка продавця і датчик, запакований в антистатичний пакет і загорнутий ще один шар пухирці

Антистатичний пакет був запаяний, щоб вода під час перельоту не загрожувала датчику

Дістаємо датчик. З одного боку припаяна лінійка контактів, які були вставлені в пінопласт, щоби не погнулися. З іншого боку розташовується сам датчик та маркування контактів.




Все б добре, але маркування контактів нанесене у дзеркальному вигляді.
Підключається датчик по шині I2C і живиться від 3,3 В. Тобто для нормального функціонування потрібно 4 дроти (+, -, SDA, SCL)
Опитувати датчик можна двома способами: або через бібліотеку, або використовуючи функції прямо скетче.
Приклад програми:

#include

#define BMP085_ADDRESS 0x77 // I2C address of BMP085

Const unsigned char OSS = 0; // Oversampling Setting

// Calibration values
int ac1;
int ac2;
int ac3;
unsigned int ac4;
unsigned int ac5;
unsigned int ac6;
int b1;
int b2;
int mb;
int mc;
int md;

Short temperature;
long pressure;

Void setup()
{
Serial.begin(9600);
Wire.begin();
bmp085Calibration();
}

Void loop()
{
temperature = bmp085GetTemperature(bmp085ReadUT());
pressure = bmp085GetPressure(bmp085ReadUP());
Serial.print(«Temperature: „);
Serial.print(temperature/10.0, DEC);
Serial.println(“C”);
Serial.print(«Pressure: „);
Serial.print(pressure/133.322, DEC);
Serial.println("mm Hg");
Serial.println();
delay(1000);
}

Void bmp085Calibration()
{
ac1 = bmp085ReadInt(0xAA);
ac2 = bmp085ReadInt(0xAC);
ac3 = bmp085ReadInt(0xAE);
ac4 = bmp085ReadInt(0xB0);
ac5 = bmp085ReadInt(0xB2);
ac6 = bmp085ReadInt(0xB4);
b1 = bmp085ReadInt(0xB6);
b2 = bmp085ReadInt(0xB8);
mb = bmp085ReadInt(0xBA);
mc = bmp085ReadInt(0xBC);
md = bmp085ReadInt(0xBE);
}

Short bmp085GetTemperature(unsigned int ut)
{
long x1, x2;
x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15;
x2 = ((long)mc<< 11)/(x1 + md);
b5 = x1 + x2;

Return ((b5 + 8)>>4);
}

Long bmp085GetPressure(unsigned long up)
{
long x1, x2, x3, b3, b6, p;
unsigned long b4, b7;
b6 = b5 – 4000;
// Calculate B3
x1 = (b2 * (b6 * b6)>>12)>>11;
x2 = (ac2 * b6)>>11;
x3 = x1 + x2;
b3 = (((((long)ac1)*4 + x3)<>2;
// Calculate B4
x1 = (ac3 * b6)>>13;
x2 = (b1 * ((b6 * b6)>>12))>>16;
x3 = ((x1 + x2) + 2)>>2;
b4 = (ac4 * (unsigned long) (x3 + 32768))>>15;
b7 = ((unsigned long)(up - b3) * (50000>>OSS));
if (b7< 0x80000000)
p = (b7<<1)/b4;
else
p = (b7/b4)<<1;
x1 = (p>>8) * (p>>8);
x1 = (x1 * 3038)>>16;
x2 = (-7357 * p)>>16;
p + = (x1 + x2 + 3791)>>4;
return p;
}

// Read 1 byte from the BMP085 at "address"
char bmp085Read(unsigned char address)
{
unsigned char data;

Wire.write(address);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 1);
while(!Wire.available())
;
return Wire.read();
}

Int bmp085ReadInt(unsigned char address)
{
unsigned char msb, lsb;
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(address);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 2);
while(Wire.available()<2)
;
msb = Wire.read();
lsb = Wire.read();
return (int) msb<<8 | lsb;
}

// Read the uncompensated temperature value
unsigned int bmp085ReadUT()
{
unsigned int ut;
// Write 0x2E в Register 0xF4
// Це запитання, а також temperature reading
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF4);
Wire.write(0x2E);
Wire.endTransmission();
// Wait at least 4.5ms
delay(5);
// Read two bytes from registers 0xF6 and 0xF7
ut = bmp085ReadInt(0xF6);
return ut;
}

// Read the uncompensated pressure value
unsigned long bmp085ReadUP()
{
unsigned char msb, lsb, xlsb;
unsigned long up = 0;
// Write 0x34 + (OSS<<6) into register 0xF4
// Request a pressure reading w/ oversampling setting
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF4);
Wire.write(0x34 + (OSS)<<6));
Wire.endTransmission();
// Wait for conversion, delay time dependent on OSS
delay(2 + (3<// Read register 0xF6 (MSB), 0xF7 (LSB), і 0xF8 (XLSB)
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF6);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 3);
// Wait for data to become available
while(Wire.available()< 3)
;
msb = Wire.read();
lsb = Wire.read();
xlsb = Wire.read();
up = (((unsigned long) msb<< 16) | ((unsigned long) lsb << 8) | (unsigned long) xlsb) >> (8-OSS);
return up;
}


Крім цього в датчику є власний термо-сенсор для компенсації тиску та альтиметр

Arduino Nano v3.0
Це серце усієї метеостанції. Просто кажучи, контролер у мініатюрному розмірі.
Купував
Розповідати докладно про контролера не буду, бо до мене це вже зробили:


Посилка з lightake була збірна, контролер прийшов у пакеті, де був USB-кабель та Arduino у запаяному антистатичному пакеті.

Щоб оцінити розміри, поруч із Arduino поклав монетку номіналом 1 руб.

Плата контролера поблизу



USB-кабель хороший, з феритовим кільцем. Харчується Arduino USB кабелем. Середовище розробки можна завантажити (сторінка для скачування). Мова «С»-подібна, з освоєнням проблем не було, тому що на ній дуже багато програмую на роботі.

LCD екран
На роботі у засіках знайшов сумісний LCD 1602 екран. З підключенням довелося повозитись, бо даташита на нього не знайшов. В результаті LCD запрацював.

Але після недовгої експлуатації помітив, що мені цього екрану мало і вивести більше даних не вийде, тому що він має лише 2 рядки по 16 символів у кожному. Спочатку здається, що цих параметрів вистачить, але коли починаєш програмувати, то розумієш, що максимум можна впхнути 3-4 параметри. А якщо робити меню (адже я подумував зробити меню на цьому екрані), то вільного місця залишається на 1-2 параметри.
У результаті почав шукати собі інший екран. Спочатку придивлявся до графічного екрану від Nokia 3310 і навіть в аукціоні eBay брав участь, щоб його купити, але не склалося (чому дуже радий), тому мені довелося відмовитися від цього екрану. Зараз я розумію, що він був би занадто малий для моїх цілей, оскільки є з чим порівнювати.
Випадково переглядаючи шилди на Arduino, я натрапив на графічний екран 12864 на контролері ST7920. У цього екрану і розмір підходящий, і гарна роздільна здатність для моїх потреб (128х64). Тобто можна спокійно розмістити 6-7 рядків по 20 символів шрифту, що нормально читається. Оскільки екран графічний, то окрім тексту різними шрифтами можна розмістити і графіку. Коротше, це саме те, що мені потрібно було, все було в цьому екрані, тому я не витримав і замовив.
Посилка прийшла швидко і була упакована стандартно: конверт-пухирка, всередині ще шар пухирці та екран в антистатичному пакеті:






Щоб оцінити розміри, поруч із LCD поклав монетку номіналом 1 руб.




Щоб швидко підключити екран Arduino, до контактів LCD припаяв лінійку контактів. Підключати LCD можна по послідовній шині та паралельній. Я вибрав перший варіант, тому що вільні контакти Arduino і так мало.
Підключення (взято з мережі):

- Контакт 1 (GND) підключається до загальної шини
- Контакт 2 (VCC) підключається до шини живлення +5V, причому струм, що споживається, порівняно невеликий і дисплей можна живити від вбудованого стабілізатора Arduino.
- Контакти 4, 5 та 6 підключаються до цифрових виходів Arduino, утворюючи послідовний інтерфейс SPI:
контакт 4 – (RS) – відповідає лінії CS (наприклад 7)
контакт 5 – (RW) – відповідає лінії MOSI (наприклад 8)
контакт 6 – (E) – відповідає лінії SCK (наприклад 3)
номери контактів Arduino можуть бути будь-якими, головне не забути потім правильно вказати їх у тексті програми під час ініціалізації дисплея.
- Контакт 15 (PSB) з'єднується із загальною шиною.
- Контакти 19 (A) та 20 (K) – це живлення підсвічування (+5V та GND відповідно). Для регулювання яскравості підсвічування можна використовувати змінний резистор 10кОм, увімкнений між шинами живлення та GND. Напруга з його двигуна подається на контакт 19 дисплея.
За цією інструкцією я підключив все, окрім підсвічування. Як живлення підсвічування я використовував ШІМ Arduino.
Для того щоб програмно підключити LCD до Arduino, використовується бібліотека u8glib. Завантажити можна. Якщо є проблеми скачування, можу бібліотеку залити на narod.ru.
Сама бібліотека не складна і дозволяє виводити текст різним шрифтом, малювати лінію, малювати найпростіші геометричні фігури (прямокутник, коло), виводити свої зображення, підготовлені спеціальним чином. У принципі, цього інструменту достатньо більшості завдань.
Ось результат простенької програми:

Сама програма:

#include «U8glib.h»

U8GLIB_ST7920_128X64 u8g(3, 9, 8, U8G_PIN_NONE); // SPI E = 3, RW = 9, RS = 8

// Підпрограма визначення вільної пам'яті
int freeRam () (
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0? (int) &__heap_start: (int) __brkval);
}

Void setup(void) (
u8g.setFont(u8g_font_6x10); // шрифт
u8g.setRot180(); //Перевернув екран
analogWrite(6, 115); // Встановлюємо яскравість екрана (анод підсвічування на 6 pin)
}

Void loop(void) (
u8g.firstPage();
do (

u8g.setPrintPos(1, 12); // позиція
u8g.print(«Hello!»); // Висновок тексту
u8g.drawBox(0,22,128,9); // Зафарбовуємо прямокутник білим
u8g.setColorIndex(0); // біле чорнило, чорний фон
u8g.setPrintPos(1, 30); // позиція
u8g.print(«Word...»); // Висновок тексту

U8g.setColorIndex(1); // біле чорнило, чорний фон
u8g.setPrintPos(1, 50); // позиція
u8g.print("After start ="); // Висновок тексту
u8g.setPrintPos(85, 50); // позиція
u8g.print(millis() / 1000); // виведення число секунд після старту
u8g.setPrintPos(1, 64); // позиція
u8g.print(freeRam()); // Висновок скільки пам'яті зайнято
) while(u8g.nextPage());

Delay (200);
}

Годинник реального часу DS1307
Ще один компонент для моєї метеостанції. На даному шилді реалізований годинник реального часу. Замовляв їх на аукціоні eBay. Продавець надіслав хустку годинника в нереально великій коробці


Усередині коробки було два листки А4 з рекламою та хустка годинника, обмотана целофаном


Хочу зауважити, що плата вбирається у розміром 2 крб. монету, а коробка була розміром 13х15х5 см.
Плата була упакована в антистатичний пакет

Хустка поблизу



З цим модулем мені довелося повозитися. По-перше, були проблеми підключення. А по-друге, кварц на цій платі ніякий. Якби знав, що на модуль витрачу стільки часу, то, швидше за все, зібрав би його сам, добре, що в мережі повно схем. Найпростіша схема містить 4-5 компонентів.
Щодо підключення. Я знайшов бібліотеку, де було сказано, що інтерфейс I2C можна підключати не на звичні аналогові входи Arduino (А4 і А5), а на будь-які дискретні. Як написано, так і вчинив. Спочатку нічого не працювало, після довгого танцю з бубном годинник завевся. Ну, подумав, все проблеми закінчилися, але після того, як я спробував цей же модуль підключити до іншої Arduino, танці з бубном продовжилися. Багато часу витратив на пошуки вирішення цієї проблеми і практично скрізь вказувалося або на неправильне підключення, або відсутність підтягуючих резисторів на контактах SCL і SDA. Я вже хотів з паяльником у плату лізти, але на одному форумі випадково натрапив на код, де було сказано, щоб SCL та SDA підключати до стандартних портів I2C на Arduino. Після стандартного підключення все відразу запрацювало.
Тепер із приводу кварцу. Не знаю, що там за кварц ставлять китайці, але годинник із таким кварцем тікав на добу на 10-11 сек. У місяць ця похибка становить 5 хвилин, а рік 1 годину. Нафіг такий годинник не потрібний. Довелося знову лізти в мережу та шукати, як виправити цей баг. Перше рішення, що потрапило, говорить про те, що потрібно заземлити кварц. Зробив – результат нульовий. Ще десь знайшов, що треба знайти стару материнку і випаяти звідти вартовий кварц. Зробив – результат є. Тепер годинник тікає не на 10-11 секунд, а на 1,5 секунди на добу. Скажімо, стало краще, але до ідеалу далеко. Так як більше з паяльником возиться небажання, то було вирішено підводити годинник програмно, тобто раз на добу підводити годинник на потрібну величину. Після 10 діб, годинник пішов не більше, ніж на секунду. Метод хороший, але тільки тоді, коли пристрій синхронізації Arduino підключений до живлення, інакше годинник працює від батарейки і все одно тікає.
Невелика тестова програма:

#include «Wire.h»
#define DS1307_I2C_ADDRESS 0x68 // SDA A4, SCL A5

Byte decToBcd(byte val)
{
return ((val/10*16) + (val%10));
}

Byte bcdToDec(byte val)
{
return ((val/16*10) + (val%16));
}

Void setDateDs1307(byte second, // 0-59
byte minute, // 0-59
byte hour) // 0-99
{

Wire.write(0);
Wire.write(decToBcd(second));
Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour));
Wire.endTransmission();
}

Void getDateDs1307(byte *second,
byte *minute,
byte *hour)
{

Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.endTransmission();

Wire.requestFrom(DS1307_I2C_ADDRESS, 3);

*second = bcdToDec(Wire.read());
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read());
}

Void setup()
{
byte second, minute, hour;
Wire.begin();
Serial.begin(9600);

Second = 45;
minute = 5;
hour = 16;

SetDateDs1307(second, minute, hour);
}

Void loop()
{
byte second, minute, hour;

GetDateDs1307(&second, &minute, &hour);
Serial.print(hour, DEC);
Serial.print(":");
Serial.print(minute, DEC);
Serial.print(":");
Serial.println(second, DEC);

Delay (1000);
}


Тут не використана бібліотека, та й функції усічені, для читання та запису часу.

Датчик температури та вологості DHT11
Про цей датчик говорити нічого. Я б його навіть не став використовувати, якби не потрібна була вологість. На жаль, я його не сфотографував, коли отримав, тож фотографій не буде. Фотографії датчика можна буде переглянути нижче, де я його підключив до Arduino. Підключення датчика просте (+, цифровий вихід, -). Зазвичай датчики роблять чотири контактні. При такому форм-факторі третій контакт нічого не підключають.
Для підключення до Arduino можна використовувати бібліотеку. Завантажити можна.
Невелика тестова програма з виведенням інформації на LCD дисплей 1602:

// include the library code:
#include
#include

// Declare objects
dht11 DHT11;
LiquidCrystal lcd(12, 11, 6, 5, 4, 3);

#define DHT11PIN 7
int i;

Void setup()
{
lcd.begin(16, 2);
lcd.print(«Status: „);
i=0;
}

Void loop()
{
int chk = DHT11.read(DHT11PIN);
lcd.setCursor(8, 0);
switch (chk)
{
case 0: lcd.print(“OK“); break;// lcd.setCursor(11, 0); lcd.print(millis()/2000); break;
case -1: lcd.print("Checksum error"); mErr(); break;
case -2: lcd.print(«Time out error»); mErr(); break;
default: lcd.print("Unknown error"); mErr(); break;
}
delay(500);
lcd.setCursor(15, 0);
switch (i)
{
case 0: lcd.print("^"); lcd.setCursor(15, 1); lcd.print(" ");break;
case 1: lcd.print(«v»); lcd.setCursor(15, 1); lcd.print(" ");break;
default: lcd.setCursor(15, 1); lcd.print(«E»); break;
}
i=i+1;
if (i>1) i=0;
lcd.setCursor(0, 1);
lcd.print(«H=»);
lcd.setCursor(2, 1);
lcd.print((float)DHT11.humidity, 0);
lcd.setCursor(4, 1);
lcd.print("%");
lcd.setCursor(8, 1);
lcd.print(«T=»);
lcd.setCursor(10, 1);
lcd.print((float)DHT11.temperature, 0);
lcd.setCursor(12, 1);
lcd.print(«C»);

Void mErr()
{
lcd.setCursor(2, 1);
lcd.print("**");
lcd.setCursor(10, 1);
lcd.print("**");
i=5;
}


Мінуси у датчика є - дані з датчика йдуть тільки в цілих числах, та й діапазон слабкий.

Начебто, про всі компоненти написав. Залишилось зібрати все в єдине ціле.
Упс, мало не забув! Для того щоб все зібрати пристрій, потрібен корпус. Корпус також замовляв на Ebay. Продавець виявився з Англії. Посилка дійшла швидко, але фотографувати її не став. Усі фотографії корпусу нижчі.

Спершу зібрав усе на столі за допомогою спеціальних проводків. Написав тестову програму та залив її в контролер.



Насправді синій колір підсвічування набагато яскравіший. Навіть за мінімальної яскравості (Bright=5) відбувається засвітлення кадру.

Щоб усе зібрати без проводів, було вирішено зробити міні материнську плату, а хустки Arduino та шилди вдягалися на роз'єми. У разі чого їх з легкістю можна швидко витягти. LCD екран і кнопки для керування я вирішив також чіпляти на роз'ємах, тільки датчик температури впаяти на дротах.
Ось така вийшла хустка



На останній фотографії я ще до кінця флюсу не змив. Під шилди поруч із роз'ємами приклеїв пористу гуму, щоб була хоч якась опора. Хоча насправді шилди у роз'ємах на контактах і так чудово тримаються.

Материнська плата із встановленими шилдами та платою Arduino.

Ось так виглядає повне підключення до материнської плати


Замість кнопок використовував саморобний шилд, спаяний на макетній платі. Як кнопки використовував кнопки зі старих мишок.
Як видно, кількість дротів зменшилася.

Основна проблема розміщення в корпусі - це рівно випиляти паз під LCD екран. Як я не намагався, все одно ідеально не вийшло. Щілини в деяких місцях були трохи більше 1 мм. Щоб усе виглядало акуратно, я взяв чорний герметик для акваріума і залив усі щілини, заразом екран кріпив саме на цей герметик. Після висихання герметика зовні обрізав надлишки. При яскравому освітленні герметик видно, а при звичайному – все зливається з корпусом.
Ось так виглядає корпус зсередини із встановленим LCD екраном та материнською платою.

Ось так виглядає зовні при яскравому освітленні (перепрошую за відбитки пальців, побачив їх, коли розбирав фотографії).

Довго думав, як приладнати кнопки в корпус і, найголовніше, які використовувати кнопки.
У радіоелектронних магазинах сподобалися кнопка з довгим шпиньком і наконечники, які одягаються на цей шпиньок. Ці кнопки використовуються для паяння на плату. Все було б добре, але у них є мінус – хід натискання дуже маленький і гучний.
Розміщувати кнопки довелося у два етапи: перший – розмістити кнопки на платі, другий – цю плату кріпити ще на одній платі. І все це потім засовувати у корпус на напрямні.

Ось так виглядає хустка з кнопками:



Ось так виглядає плата-утримувач:


Тут видно напрямні, до яких вставляється плата з кнопками. Деякі елементи паяв для того, щоб надати жорсткості плати.

Тепер все засовуємо в корпус
Без підключення кнопок:


З підключенням кнопок:

Закриваємо корпус і вмикаємо. Все чудово працює, кнопки відпрацьовують, як треба.

Наприкінці розміщую невелике відео роботи пристрою у різних режимах:
http://www.youtube.com/watch?v=KsiVaUWkXNA&feature=youtu.be
У кого відео тут не відображається, ось посилання на

Настав час закінчувати огляд.
Небагато напишу про програму, а потім короткі висновки. Коли писав програму, не думав, що дуже швидко упрусь в обмеження 30720 байт.


Довелося оптимізувати код. Багато шматків коду виносив у підпрограми. Ніколи не подумав би, що оператор switch… case у компільованому вигляді займає більше місця, ніж кілька if… else. Ще заощаджує місце правильне оголошення змінних. Якщо оголошувати масив long, хоча можна обійтися byte, то перевитрата пам'яті досягає 500 байт залежно від розмірності масиву. Коли пишеш програму, про це не думаєш, а вже потім, коли аналізуєш програму, то розумієш, що деякі речі зробив неправильно, і починаєш оптимізувати код. Після того, як проблеми з розміром програми було вирішено, я вперся в обмеження оперативної пам'яті. Це виражалося в тому, що програма починала виснути після завантаження. Довелося вводити підпрограму підрахунку вільної оперативної пам'яті. У результаті був змушений відмовитися від одного алгоритму прогнозування погоди, оскільки він повинен виводити піктограми на екран. Сам алгоритм працює, а ось виведення піктограм довелося зареміювати. У мене є ще задуми, як оптимізувати код, але в найближчому майбутньому залишаю працювати пристрій, щоб оцінити працездатність і виявити всі баги.

Тепер невеликі висновки
Мінуси
1) Ціна. Виправдання цього мінусу – хобі ніколи не буває дешевим.

Плюси
1) Великий функціонал устрою
2) Нарощування функцій обмежується лише використовуваним контролером та власним бажанням
3) Естетичне задоволення від споглядання та моральне задоволення від того, що я таки зібрав і доробив цей пристрій

Планую купити +85 Додати до обраного Огляд сподобався +137 +304

Температурні датчики застосовуються у складі охоронних сигналізацій або систем типу "Розумний дім". Основна їх функція – контроль температури у приміщенні. Купити GSM датчик температури слід тоді, коли з'являється необхідність збирання інформації та відправлення її на центральний прилад сигналізації. У системах "Розумний дім" прилад дозволяє дізнаватися інформацію про клімат усередині приміщення, що впливає на автоматичне включення або вимкнення електроприладів. GSM-контроль приміщення, невід'ємною частиною якого є сигналізація з термодатчиками, дозволяє максимально ефективно заощаджувати час та гроші власника. Достатньо придбати та встановити SIM-карту, та підключити датчик до електричної розетки.

Навіщо потрібні GSM термометри?

  • Для віддаленого керування всіма типами нагрівальних приладів (електричні, газові або твердопаливні котли);
  • Для контролю обігрівачів (кондиціонер, інфрачервоні обігрівачі, теплі підлоги та інші);
  • Для збору інформації про температуру та вологість повітря.

Якщо вірити відгукам фахівців про термометри GSM і сигналізаціях з термодатчиками, то можна зробити висновок, що системи контролю та регулювання температури - найбільш сучасні способи управління кліматом приміщення. Це не тільки опалення або кондиціювання, а й можливість проводити фільтрацію повітря та зволожувати його.

Чому варто купити GSM термометр та сигналізацію з термодатчиками?

  • Можливість будь-коли отримати всю інформацію про температурний режим. Більшість моделей можуть контролюватись через додатки на Android/iOS, що дає можливість у режимі реального часу зібрати дані та використовувати їх;
  • Прилад може виконувати десятки завдань в автоматичному або напівавтоматичному режимах, позбавляючи користувача необхідності вручну контролювати температурні та кліматичні змінні;
  • Ціна на GSM датчик температури здається дуже низькою, якщо враховувати всі можливі шляхи економії електроенергії, води, газу, які досягаються використанням пристрою;
  • У разі досягнення температури критичної позначки (яку Ви самі налаштовуєте) датчик повідомить це шляхом відправки СМС повідомлення. Крім того, налаштування та контроль приладу може здійснюватися за допомогою СМС-команд.

Сьогодні, щоб зібрати робочий прототип базової домашньої метеостанції не потрібно мати сильні навички програмування (у нашому випадку і поготів) або схемотехніки. Досить уміння «гуглити» і частки бажання зробити щось своїми руками. У цьому матеріалі я розповім і покажу, як за вечір зібрати домашню метеостанцію із підключенням до мережі. Базовий бюджет – лише 10 доларів.


Текст може містити і, напевно, містить граматичні, орфографічні, пунктуаційні та інші види помилок, включаючи смислові. Я всіляко прошу читачів вказувати на ці помилки і виправляти мене за допомогою особистих повідомлень.

Базовий набір комплектуючих

Основою нашого майбутнього пристрою є налагоджувальна плата NodeMCU на базі модуля ESP8266. Я взяв її на , але за бажання ви можете пошукати цю і на інших майданчиках.






Для з'єднання модулів можна використовувати ($0.9) або безпайкову з набором з'єднувальних проводів ($3.74).

Підключення та налаштування

Незважаючи на доступні 4 висновки, підключається наш датчик всього по 3 проводах: живлення +5В (1 висновок), земля (4) та лінія передачі даних (2). Харчування для датчика беремо або з VUSB-піна, або з 3V, якщо першого на вашій платі не виявилося. Лінію даних підключаємо до порту GPIO14 (пін D5).


Нагадаю, що навичок програмування у нашому випадку не потрібно абсолютно жодних. Прошивку для модуля генеруватимемо за допомогою сайту, автором якого є Максим Малкін, також відомий за проектом домашньої автоматизації. Для початку просто реєструємось на WIFi-IoT та підтверджуємо пошту.


Перед збиранням прошивки необхідно підготувати придбаний модуль до роботи та очистити його від можливого попередньо встановленого китайського ПЗ. Для цього нам знадобиться робочий USB-microUSB кабель та комп'ютер або віртуальна машина з Windows. Після реєстрації на сайті ви потрапите на англомовну сторінку " " з поясненнями щодо підготовки модуля до роботи. Завантажуйте файли з програм з перших двох пунктів інструкції.



Теоретично, після підключення модуля до комп'ютера, Windows повинна сама знайти драйвера і встановити їх. На випадок, якщо цього не станеться, спробуйте ідентифікувати на платі мікросхему (відрізняється великою кількістю ніжок) біля microUSB порту. Найімовірніше це будуть або (драйвери до них доступні за посиланнями).


Після встановлення драйверів повторно підключаємо нашу плату до комп'ютера та запускаємо програму NodeMCU Flasher, яку завантажили раніше. У списку вибираємо присвоєний нашому пристрою COM-порт. Швидше за все, він буде один, інакше його номер можна уточнити в диспетчері пристроїв Windows. У вкладці Config вказуємо розташування завантаженого раніше blank-файлу з розширенням bin.



Після даних маніпуляцій модуль готовий до завантаження прошивки, яку нам ще належить скомпонувати. Ідемо в і відзначаємо необхідні нам пункти:

  • «DHT22» - це наш датчик температури та вологості;
  • "Час та NTP" - для відображення часу у веб-інтерфейсі;
  • «Налаштування за замовчуванням». Натискаємо шестерню біля цього пункту та вводимо логін та пароль від точки доступу, до якої буде підключено модуль. Решта пунктів поки не чіпаємо.

Натискаємо клавішу "Скомпілювати" внизу сторінки і на виході отримуємо готове до встановлення програмного забезпечення. Завантажуємо одним файлом.



Далі повторюється процес із прошивкою blank-файлу, тільки замість нього вибираємо вже завантажену на комп'ютер прошивку. Після завершення процесу повністю перезавантажуємо модуль (відключаємо та підключаємо заново USB-кабель) і вирушаємо в адмін-панель роутера у пошуках модуля. Оскільки ми не використовували попереднього присвоєння статичного IP, роутер повинен сам видати йому адресу. Нагадаю, адмін-панель зазвичай знаходиться за адресою 192.168.0.1 або 192.168.1.1. Моєму модулю роутер видав адресу 192.168.1.142. Після переходу по цьому IP потрапляємо до веб-інтерфейсу нашої метеостанції. Попередньо необхідно буде ввести стандартний логін esp8266 і пароль 0000 у спливаючому вікні.


Тепер потрібно вказати модулю якого порту підключений датчик, щоб перший зміг зчитувати його показання. Робиться це на сторінці Hardware. Відповідною відміткою активуємо перший датчик, а в рядку GPIO вказуємо 14 порт. Відбудеться ініціалізація і на головній сторінці інтерфейсу з'явиться відображення температури та вологості. Ура!




Насамкінець не забудьте на сторінці Main змінити пароль для входу в систему і часовий пояс для відображення часу. Також необхідно перевести модуль на статичну IP-адресу (кнопка внизу сторінки), щоб після перезавантаження роутера ваша метеостанція не «загубилася». Якщо розумієте налаштування свого роутера, то краще зробити безстрокову оренду IP-адреси для модуля, замість встановлення статичного IP.


Прототип готовий, тепер перейшовши за встановленою IP-адресою можна переглянути температуру та вологість у місці, де ви встановили датчик.

Підключення метеостанції до сервісу метрик Thingspeak.com

Але просто дивитись температуру не цікаво. Необхідна візуалізація даних, щоб можна було простежити якісь тенденції у зміні показань. Для цього реєструємось у сервісі метрик і у своєму профілі створюємо новий канал.



На сторінці, що відкрилася, заповнюємо назву каналу, відзначаємо перші два поля field і записуємо туди значення «temp» (перше поле) і «humidity / temp» (друге).


Тепер знову займемося модулем. У конструкторі прошивок на додаток до всіх попередніх позначок додаємо «Thingspeak.com», компілюємо прошивку та прошиваємо за аналогією. На жаль, усі налаштування на модулі доведеться зробити заново, тому що ця функція буде оновлена. OTA-оновлення зі збереженням їх доступні лише у платній версії ПЗ (ціна питання лише 100 рублів на модуль).


Повертаємось на сторінку створеного нами каналу у сервісі та відкриваємо вкладку «Api Keys». Нам знадобиться код із поля "Write Api Key". Його потрібно скопіювати та вставити у відповідне поле на сторінці «Servers» у веб-інтерфейсі нашої метеостанції, попередньо не забувши встановити позначку на «Enable send.».


Покази надсилатимуться кожні 5 хвилин. А виглядатиме це в результаті буде таким чином:


Зовнішній вигляд графіків піддається редагуванню, тому ви вільні творити! :)

Підсумки

Напевно хтось запитає: «Чому підсумковий результат відрізняється від представленого на наведеній вище та заголовній картинках?». Як мінімум тому, що інформації в цьому матеріалі новачкам у темі точно вистачить на вечір-другий, а підключення дисплея та барометра вимагатиме наявності базових навичок паяння та відповідного обладнання. Якщо ви зацікавлені у подальшому вдосконаленні метеостанції та моїх нотатках з цієї теми, то обов'язково напишіть про це у коментарях. Раджу також періодично заглядати в , де, можливо, матеріали на цю тематику будуть з'являтися раніше.

Принцип роботи

Зібрані дані з датчика швидкості та напрямки вітру та інших сенсорів передаються контролером без проводів через мережу GPRS на наш або Ваш сервер у мережі Інтернет, де їх можна переглядати в режимі реального часу та завантажувати у вигляді повного архіву.

Основні функції

Збір, накопичення та передача метеоданих на сервер у мережі Інтернет щохвилини.
Збір та передача на сервер рівня напруги вхідного живлення.
Вхід для підключення нормальнозамкнутого датчика вбудованої сигналізації / оповіщувача про подію.

Вартість експлуатації

Вартість GPRS трафіку на місяць близько 100 рублів.
Контролер не потребує обслуговування. Має два рівні протидії збоям у роботі.
Контролер має промисловий стандарт якості проектування та виготовлення з урахуванням волого-пило-термо-стійкості.

Вимірювані величини

GPRS Анемометр:


- температура (без радіаційного захисту від сонця)

GPRS Метеостанція:

Швидкість та напрям вітру
- температура
- атмосферний тиск
- вологість

Точність

Напрям вітру - 16 секторів
Швидкість вітру – від 0 до 66 м/с – 5%
Атмосферний тиск – 2%
Вологість – 2%
Температура – ​​2%

Умови експлуатації

Робоча температура від – 40 до +60 градусів цельсія.
Пристрої призначені для вуличного або кімнатного встановлення.

Електроживлення

Два входи живлення з пріоритетом:

Вхід – 5 вольт від зовнішнього мережевого блока живлення або USB.

Технічна підтримка

Всім покупцям надається повна технічна та гарантійна підтримка.

Гарантія 1 рік

Комплектація

1. Датчик швидкості та напрямки вітру Davis із кріпленням для щогли.
2. Блок збору та передачі даних із сенсорами.
3. Блок живлення 220/USB
4. Усі необхідні дроти.
5. Місце на сервері для перегляду та накопичення даних.
6. Допомога в налагодженні та введення в експлуатацію.
7. Допомога у створенні Вашого сайту для збору та накопичення даних.

Додаткові функції (не входять до стандартного постачання)

2-й вхід 5 - 30 вольт від сонячної батареї або зовнішнього акумулятора/блоку живлення. (ОПЦІЯ)

Дублювання зібраної інформації на вбудованій картці пам'яті стандарту microSD.

Передача даних на комп'ютер за кабелем на значні відстані.
Стандарт підключення до комп'ютера – інтерфейси RS232 або USB.

Підключення до контролера другого анеморумбометра.
Підключення до контролера датчика обертів та вбудований тахометр.

Зміна входів контролерів як частотомірів і вольтмерів для підключення іншого устаткування, наприклад талановитих анемометрів з аналоговими виходами.

Вбудований підігрів розширення нижнього діапазону робочої температури.

З повагою,
колектив компанії.

Привіт шановні друзі сайту РадіосхемиЩе давно хотів зібрати домашню метеостанцію, спочатку планувалося зробити автономну конструкцію з ЖК індикатором і т.д., але коли руки вже майже потяглися до текстоліту, у мене сталася ситуація, точніше в одній з компаній в якій я працюю, а саме, в серверній кімнаті зламався кондиціонер. , про все по порядку. Представлена ​​конструкція - це USB примочка до ПК, яка передає дані з датчиків за допомогою UART - USB з інтервалом 2 секунди, відповідно, на ПК встановлена ​​програма, яка крім обробки та відображення отриманих даних передає їх, за бажання, на WEB сервер, зайшовши на який можна відстежувати всі показання в режимі реального часу і як ви розумієте, перебуваючи в будь-якій точці світу.

  • +data
  • humidity:хх
  • tempepature:хх
  • pressure:ххх
  • -data

Перемички JP1, JP2, JP3 призначені для «занулення» певних значень, тобто при встановленій перемичці JP1 значення вологості завжди буде 0, при встановленій JP2 значення температури завжди буде 0 і при JP3 значення тиску завжди 0.

Схема саморобної метеостанції

Схема дуже проста і насправді складається з 4 основних компонентів. Це МК, датчик атмосферного тиску + температури, датчик вологості та USB - UART перетворювач.

Відразу скажу, що всі компоненти купував на усьому відомому електронному аукціоні, причому купував одразу у вигляді готових модулів. Поясню чому готовими модулями, по-перше - ціна датчика (або мікросхеми) окремо і ціна модуля нічим практично не відрізняється, по-друге - готовий модуль вже має всю необхідну обв'язку, таку як підтягуючі резистори, стабілізатори та інше, по-третє - це набагато спрощує конструкцію , відповідно і її реалізацію. Тепер трохи про кожен модуль окремо.

Датчик тиску та температури

Приголомшливий датчик атмосферного тиску і температури BMP180.


Незважаючи на свої крихітні розміри, цей датчик дозволяє видавати напрочуд точні показання, як температури, так і атмосферного тиску. Сам датчик має розміри ~ 3х3 мм, готовий модуль ~ 10х13 мм, живлення датчика 3.3 вольта, тому на хустці є стабілізатор. Інтерфейс I2C.

DHT11 є датчиком вологості + температури, досить гарний у своїй ціновій категорії. Але є невеликий мінус, це – точність. Якщо похибка по вологості цілком у межах норми, то зі показаннями температури все не так добре, але нам і не потрібні дані по температурі т.к. температуру братимемо з BMP180. Штирі на модулі перепаяні на прямі, спочатку модуль йде з кутовими штирями і до того ж вони припаяні з іншого боку.

USB - UART перетворювач

Взагалі мікросхем і готових USB-UART перетворювачів величезна кількість, я зупинився на цьому. Даний модуль працює на мікросхемі FT232RL, а ось виробник цієї мікросхеми далеко не FTDI, як заявлено на корпусі цієї мікросхеми, простіше кажучи, використовувана мікросхема - це китайська підробка. Але в цьому немає нічого страшного, за винятком того, що компанія FTDI вирішила боротися з підробками дуже хитрим способом, вони випустили драйвера, які затирають ID мікросхеми на оригінальних чіпах, після чого підробка перестає працювати. Для того щоб цього не трапилося - достатньо використовувати драйвера НЕ ВИЩЕ версії 2.08.14 і тоді ніяких проблем не буде, різниці в роботі не оригіналу ви не помітите. Якщо все ж таки це сталося і пристрій перестав правильно визначатися в диспетчері пристроїв, то нічого не втрачено, в будь-якому пошуковику ви знайдете вирішення цієї проблеми за 5 хвилин, на цьому я не зупинятимуся.

Для своїх цілей мені довелося трохи допиляти модуль, перепаявши на ньому штирі, з кутових на прямі, і з прямих на кутові.

Зробити це не пошкодивши ПП досить просто, спочатку необхідно тонкими кусачками розділити пластикові втулочки між штирями, після чого випаяти окремо кожен штир разом із втулкою, потім прибравши зайвий припій - впаяти потрібні штирі з потрібного боку. Прошивати МК потрібно ось із такими фюзами:

Після того, як всі модулі будуть допиляти і готові, можна приступати до збирання. Друкована плата в моєму варіанті має підсумковий розмір 45 х 58 мм, робив фоторезистивним способом, хоча через простоту - лут тут теж актуальний. Усі файли для плати та прошивки скачайте у загальному архіві.

Весь набір необхідних компонентів пристрою.

Складання метеостанції

Складання приладу зайняло пів години, після чого був вже цілком працездатний варіант пристрою.

Тепер поділюся своїми секретами. Після того, як монтаж ПП закінчено, я роблю наступне: змиваю всі залишки флюсу та сміття звичайним розчинником, після чого купленою для цих цілей зубною щіткою очищаю поверхню від волокон, що застрягли між точками паяння в результаті відмивання, потім переходжу до наступного процесу-покриття лаком "мідної" сторони ПП. Для цього спочатку в аркуші паперу прорізаю вікно за розміром ПП, після чого ізолентою приклеюю ПП до цього аркуша, як показано на малюнку.

Наступний етап - це нанесення лаку, для цього використовую звичайний, автомобільний аерозольний лак, який використовують для тонування фар та іншого, коштує такий балон близько 150 рублів, продається в будь-якому автомагазині. Після висихання отримую такий результат.

Все, всі етапи складання метеостанції закінчено, можна відклеювати папір.

А ось і готовий, повністю робочий варіант пристрою.

Підсумую щодо апаратної частини. Ціна готового пристрою, крім текстоліту і витратних матеріалів, що використовуються виготовлення і монтажу ПП, становила близько 500 рублів.

Програма

Тепер від апаратної частини до програмної. Програма складається з одного виконуваного exeфайлу. При першому запуску програма буде покроково «просити» провести необхідні налаштування, спочатку відбувається ініціалізація COM порту, програма видасть таке вікно:

Окрім номера порту, в налаштуваннях нічого міняти не треба! Після вибору порту необхідно натиснути кнопку « повторити спробу» у стартовому вікні програми. Наступним етапом програма "попросить" зробити "робочі" налаштування.

Тут вказуються оптимальні межі показань з датчиків, ці значення впливають на графічне відображення значень в основному вікні програми, червона стрілка вгору означає завищене значення, вниз занижене і зелена галочка - в нормі відповідно. Що стосується оптимальної межі тиску, то як такої її немає, це значення залежить від географічних координат вашого міста, а вірніше висоти, на якій розташоване ваше місто щодо рівня моря, найпростіше кордону атмосферного тиску можна взяти з таблиці висот або методом спостереження.

За бажанням можете вказати варіант запуску програми (згорнутий/не згорнутий режим). Є ще один розділ - це логін, пароль, частота відправки та галочка дозволити надсилання даних на WEB сервер. Тут трохи докладніше. Ця настройка, за бажання, дозволяє відправлення значень температури, вологості та тиску на глобальний WEB сервер meteolk.ru - це ресурс створений спеціально під цей проект, по суті це просто особистий кабінет, де міститься вся інформація, отримана метеостанцією і нічого крім цього. Для того, щоб можна було користуватися цим ресурсом, необхідно спочатку зареєструватися для можливості подальшої ідентифікації користувача, для цього просто заходьте на сайт і натискаєте « Реєстрація». Користуйтеся на здоров'я, мені не шкода. На сторінці реєстрації вказуєте ім'я, логін та пароль.

Усе, у цьому реєстрація закінчено, і облікові дані можна вказувати у програмі. Це можна зробити і пізніше, перейшовши в налаштування через Меню, не обов'язково при першому запуску. Після того, як будуть зроблені всі налаштування, натискаєте зберегти і у вікні запуску програми натискаєте кнопку « повторити спробу». Якщо все нормально, то програма запуститься і з'явиться основне вікно, після цього створяться налаштування файлів і при наступних запусках, ніяких налаштувань виконувати вже буде не потрібно.

У меню « додатковоє опція « вважати дані з контролера», Тут поясню. Кожні пів години в оперативну пам'ять мікроконтролера записуються значення температури, вологості і тиску, всього таких записів може бути 100, якщо вийшло так, що програма не була запущена і вам потрібно подивитися статистику, то за допомогою цієї опції можна подивитися дані, це 2-а доба якщо такі є звичайно. За допомогою «стерти дані МК» вся зібрана раніше статистика і зберігається в оперативній пам'яті - затирається. Крім поточних значень, є ще значення «макс.» та «хв.», це максимальні та мінімальні значення, які були зареєстровані за час роботи програми.
З програмою все, на інших менюшках не зупинятимуся, думаю, що і так все інтуїтивно зрозуміло. Повернуся трохи до особистого кабінету. Після реєстрації, можна зайти під своїм записом, до речі, можна також зайти під логіном. test» та паролем « test», це задля ознайомлення. Якщо у вас є дані, то ви побачите таке вікно:

За бажанням, дані можна переглянути у графічному варіанті, у вигляді графіків.

Ось і все. Сподіваюся, що мій проект вам сподобається і стане в нагоді. Поки що! До нових зустрічей на сайті Автор Віталій Анісімов.м. Калуга.

Обговорити статтю ДОМАШНЯ USB МЕТЕОСТАНЦІЯ