Подключение Arduino к отечественному проекту Народного мониторинга
Хочу рассказать ещё об одном сервисе для удалённого мониторинга температуры, преимущественно за окном. На этот раз проект отечественный, что не может не радовать.

Последнее обновление: 16 июля 2014 (v1.3)
Исправлена ошибка с дробными показаниями температуры
6 октября 2013 (v1.2)
При наличии нескольких термодатчиков данные передаются на сервер одновременно со всех, а не по очереди, как было раньше.
25 февраля 2013 (v1.1)
Исправлена ошибка с округлением отрицательной температуры до десятых долей градуса.
Немного о проекте
Сервис располагается по адресу http://narodmon.ru
Проект начался с обсуждения темы «Народный мониторинг температуры (vs прогноз) в различных городах. Нужен ли?» на Хабрахабре. На тот момент целью проекта являлось лишь информирование пользователей в Интернет о реальной погоде в данный момент времени в определенном месте, где есть участники данного проекта. C дальнейшим ростом аудитории разработчиков электронных устройств для работы с данным проектом, а также пополнением базы пользователей, возникла необходимость расширить рамки проекта с целью передачи сбора показаний с датчиков различного типа с более универсальным протоколом с крайне низкими требованиями к каналу передачи данных вплоть до GPRS/EDGE/3G/UMTS.
Собираем устройство
Нам понадобятся следующие компоненты:
- Микроконтроллер Arduino или Freeduino (с ATmega328);
- Ethernet-shield;
- Цифровой термодатчик DS18B20;
- Резистор 4.7 кОм;



Все компоненты соединяются между собой также как и в предыдущей статье: Arduino: цифровой термометр с web-мониторингом. Немного повторюсь:
Термодатчик подключается по шине 1-wire по схеме с паразитным питанием. При этом, можно использовать несколько таких датчиков (все они соединяются параллельно двумя проводами) и считывать с каждого отдельную температуру. Подключать можно к любому цифровому входу микроконтроллера, кроме 10, 11, 12 и 13, которые используются для нужд Ethernet Shield.
Прошивка
Теперь заливаем в Arduino следующий скетч:
// Скетч для Arduino для отправки данных о температуре на Народный мониторинг. // Версия 1.3 (16.07.2014) // // Автор: Гладышев Дмитрий (2012-2014) // http://student-proger.ru/2012/06/podklyuchenie-arduino-k-otechestvennomu-proektu-narodnogo-monitoringa/ #include <SPI.h> #include <Ethernet.h> #include <OneWire.h> bool Debug = false; //режим отладки //**************************************************************************************** byte mac[] = { 0xDE, 0xAD, 0xBE, 0x00, 0x00, 0x00 }; //MAC-адрес Arduino OneWire ds(2); //пин подключения термодатчика const unsigned long postingInterval = 600000; // интервал между отправками данных в миллисекундах (10 минут) //**************************************************************************************** char server[] = "narodmon.ru"; EthernetClient client; unsigned long lastConnectionTime = 0; // время последней передачи данных boolean lastConnected = false; // состояние подключения int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract; char replyBuffer[160]; int CountSensors; void setup() { if (Debug) { Serial.begin(9600); } delay(1000); // Ethernet connection: if (Ethernet.begin(mac) == 0) { if (Debug) { Serial.println("Failed to configure Ethernet using DHCP"); } // ничего не делаем for(;;); } // секунда для инициализации Ethernet delay(1000); //Узнаём количество термодатчиков CountSensors = DsCount(); if (Debug) { Serial.print("Found "); Serial.print(CountSensors); Serial.println(" sensors."); } lastConnectionTime = millis()-postingInterval+15000; //первое соединение через 15 секунд после запуска } void loop() { //Если вдруг нам случайно приходят откуда-то какие-то данные, //то просто читаем их и игнорируем, чтобы очистить буфер if (client.available()) { client.read(); } if (!client.connected() && lastConnected) { if (Debug) { Serial.println(); Serial.println("disconnecting."); } client.stop(); } //если не подключены и прошло определённое время, то делаем замер, //переподключаемся и отправляем данные if (!client.connected() && (millis() - lastConnectionTime > postingInterval)) { //формирование HTTP-запроса memset(replyBuffer, 0, sizeof(replyBuffer)); strcpy(replyBuffer,"ID="); //Конвертируем MAC-адрес for (int k=0; k<6; k++) { int b1=mac[k]/16; int b2=mac[k]%16; char c1[2],c2[2]; if (b1>9) c1[0]=(char)(b1-10)+'A'; else c1[0] = (char)(b1) + '0'; if (b2>9) c2[0]=(char)(b2-10)+'A'; else c2[0] = (char)(b2) + '0'; c1[1]='\0'; c2[1]='\0'; strcat(replyBuffer,c1); strcat(replyBuffer,c2); } //Сбрасываем поиск датчиков (кол-во нам уже известно) ds.reset_search(); //Теперь в цикле опрашиваем все датчики сразу for (int j=0; j<CountSensors; j++) { byte i; byte present = 0; byte data[12]; byte addr[8]; if ( !ds.search(addr)) { ds.reset_search(); return; } ds.reset(); ds.select(addr); ds.write(0x44,1); delay(1000); present = ds.reset(); ds.select(addr); ds.write(0xBE); for ( i = 0; i < 9; i++) // we need 9 bytes { data[i] = ds.read(); } LowByte = data[0]; HighByte = data[1]; TReading = (HighByte << 8) + LowByte; SignBit = TReading & 0x8000; // test most sig bit if (SignBit) // negative { TReading = (TReading ^ 0xffff) + 1; // 2's comp } Tc_100 = (6 * TReading) + TReading / 4; // multiply by (100 * 0.0625) or 6.25 Whole = Tc_100 / 100; // separate off the whole and fractional portions Fract = Tc_100 % 100; char temp[3]; itos(Whole,temp); strcat(replyBuffer,"&"); //конвертируем адрес термодатчика for (int k=7; k>=0; k--) { int b1=addr[k]/16; int b2=addr[k]%16; char c1[2],c2[2]; if (b1>9) c1[0]=(char)(b1-10)+'A'; else c1[0] = (char)(b1) + '0'; if (b2>9) c2[0]=(char)(b2-10)+'A'; else c2[0] = (char)(b2) + '0'; c1[1]='\0'; c2[1]='\0'; strcat(replyBuffer,c1); strcat(replyBuffer,c2); } strcat(replyBuffer,"="); if (SignBit) //если температура отрицательная, добавляем знак минуса { strcat(replyBuffer,"-"); } strcat(replyBuffer,temp); strcat(replyBuffer,"."); if (Fract<10) { strcat(replyBuffer,"0"); } itos(Fract,temp); strcat(replyBuffer,temp); } strcat(replyBuffer,'\0'); if (Debug) { Serial.println(replyBuffer); Serial.print("Content-Length: "); Serial.println(len(replyBuffer)); } //отправляем запрос httpRequest(); } //храним последнее состояние подключения lastConnected = client.connected(); } void httpRequest() { if (client.connect(server, 80)) { if (Debug) { Serial.println("connecting..."); } // send the HTTP POST request: client.println("POST http://narodmon.ru/post.php HTTP/1.0"); client.println("Host: narodmon.ru"); //client.println("User-Agent: arduino-ethernet"); //client.println("Connection: close"); client.println("Content-Type: application/x-www-form-urlencoded"); client.print("Content-Length: "); client.println(len(replyBuffer)); client.println(); client.println(replyBuffer); client.println(); lastConnectionTime = millis(); } else { if (Debug) { Serial.println("connection failed"); Serial.println("disconnecting."); } client.stop(); } } //Количество термодатчиков на шине int DsCount() { int count=0; bool thatsall = false; byte addr[8]; do { if ( !ds.search(addr)) { ds.reset_search(); thatsall = true; } count++; } while(!thatsall); return (count-1); } int len(char *buf) { int i=0; do { i++; } while (buf[i]!='\0'); return i; } void itos(int n, char bufp[3]) //int to string { char buf[3]={'0','0','\0'}; int i = 1; while (n > 0) { buf[i] = (n % 10)+48; i--; n /= 10; } for (i=0; i<3; i++) bufp[i]=buf[i]; }
Обратите внимание на следующие строки:
//**************************************************************************************** byte mac[] = { 0xDE, 0xAD, 0xBE, 0x00, 0x00, 0x00 }; //MAC-адрес Arduino OneWire ds(2); //пин подключения термодатчика const unsigned long postingInterval = 600000; // интервал между отправками данных в миллисекундах (10 минут) //****************************************************************************************
Здесь необходимо будет придумать MAC-адрес для Arduino (рекомендую взять для этого MAC-адрес вашего компьютера), указать номер входа, к которому подключен термодатчик, а также частоту обновления информации. По MAC-адресу устройство будет идентифицироваться в проекте, поэтому он должен быть уникальным.
Теперь регистрация на сайте
Заходим на сайт, жмём кнопочку «Вход», затем «Я тут впервые». Вводим свой E-Mail и ждём пока на почту свалится письмо с паролем.

Входим в систему.

Теперь нажимаем кнопку «Мои датчики», затем «Добавить». Вводим MAC-адрес, который указан в прошивке. Теперь система должна отобразить подключенные термодатчики и температуру на них. Можно указать местоположение термометра на карте и дать подписи датчикам.


Щёлкнув по пузырьку с температурой на карте, можно просмотреть дополнительную информацию:

Также можно просмотреть график изменения параметра:

и отчёт о переданных числовых данных:

Скетч v1.2 (7.11 KB)
Скетч v1.1 (6.05 KB)
Библиотеки:
Ethernet (55.82 KB)
OneWire (13.84 KB)
SPI (7.45 KB)
Работа проверялась с Arduino IDE v1.0.1

-
-
Добрый день!
Вроде все не сложно, но опыта работы в данной области нет.
Вопрос: а можно ли Вас попросить изготовить похожее устройство с требуемыми мне характеристиками, что бы им пожно было пользоваться «из коробки»?-
-
Здравствуйте! К сожалению у меня сейчас не очень много свободного времени чтобы заниматься этим… Там в принципе ничего сложного. Пайки минимум — только датчик и резистор припаять к проводам. Остальные модули — как конструктор (если покупать компоненты в собранном виде). Попробуйте) Если будут вопросы — помогу чем смогу.
-
-
-
-
-
не подскажите в чем проблема при тесте работы ардуино с датчиком:
Данные получены Thu, 12 Sep 2013 20:44:52 +0400 с IP XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXМосковская область, Россия)
GET /favicon.ico HTTP/1.1\r\n
Host: map.net13.info:8283\r\n
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0\r\n
Accept: image/png,image/*;q=0.8,*/*;q=0.5\r\n
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\r\n
Accept-Encoding: gzip, deflate\r\n
Connection: keep-alive\r\n
Cookie: PHPSESSID=XXXXXXXXXXXXXXXXX; lang=RU; hash=XXXXXXXXXXXXXXXXXXXXXX; id=856Последняя запись в СУБД Thu, 12 Sep 2013 20:44:52 +0400
Ошибки в формате данных(если они есть):
Первая строка должна содержать MAC устр-ва из 12-24 знаков hex(допускаются разделители ‘-‘ и ‘:’)
Каждая строка должна начинаться с символа ‘#’
Пакет данных должен оканчиваться строкой ‘##’Суть проблемы заключается в том, что не добавляется датчик температуры к систему. Будтобы ардуино с данным маком ничего не присылало
-
-
Исправьте в коде строку «bool Debug = false;» на «bool Debug = true;» и посмотрите, что выводит ардуина в последовательный порт.
-
-
-
-
-
Исправил! Монитор порта ничего не показывает((((
-
-
Скорость порта 9600? Первая отправка данных должна быть через 15 секунд после запуска. Если вообще ничего не выводит, то проверяйте, выдаётся ли IP-адрес ардуине. Это можно посмотреть в настройках вашего роутера. Хотя в этом случае должна была вылезти ошибка «Failed to configure Ethernet using DHCP»
-
-
-
-
-
ip адрес выдается
-
-
-
ошибки нет
-
-
Загрузите любой скетч, который выводит что-нибудь в последовательный порт и проверьте работу. Например Basics -> ReadAnalogVoltage
-
-
-
-
-
Этот скетч выдает значения
-
-
-
if (client.available()) {
char c = client.read();
}данной условие не срабюатывает
-
-
Оно и не должно срабатывать в обычных условиях. Это на тот случай, если на саму ардуину будут поступать данные по сети, чтобы очистить буфер приёма.
-
-
-
-
-
Скеч выше проверялся с Arduino IDE v1.5.1 ???? какие изменения в коде необходимо сделать, чтобы скеч работал в версии 1.5.1????
-
-
Ничего не надо делать. Всё работает, только что проверил. У вас наверняка проблема в железе.
-
-
-
-
-
Заливал скетч который работает с Ethernet шилдом, плата нормально работает, маки и сеть определяются в сети….
-
-
Попробуйте в разные участки кода поставить строки
Serial.println(«text»);
(с разным текстом конечно). Debug установить в true. И отследить, где происходит сбой.
-
-
-
-
-
lastConnectionTime изначаьлно получается очень огромным, может потому что lastConnectionTime = millis()-postingInterval+15000 millis() в этом выражении при выполнении скетча после прошивки ардуино очень маленькое и время lastConnectionTime получается отрицательное.за время наладки пару раз ip.php показало что данные получены на сервере.
-
-
Всё правильно. Время получается отрицательным, происходит переполнение — в результате огромное число. У меня работает это нормально. Попробуйте изменить строчку
unsigned long lastConnectionTime = 0;
на
signed long lastConnectionTime = 0;
То есть явно укажем, что число может быть отрицательным. Сейчас у себя проверил — конструкция работает.
-
-
-
-
-
Если вытащить Serial.begin(9600) из кода скетча из выражения:
if (Debug)
{
Serial.begin(9600);
}
то serial.println(«.. ……..») везде в скетче показывает текущие данные в мониторе порта. В мониторе порта как раз заметил значение lastConnectionTime огромным порядка 10 знаков-
-
По поводу «Serial.begin(9600);» : Эта строчка должна выполниться, если Debug установлен в true.
-
-
-
-
-
Все прекрасно работает, спасибо, а можно ли как то добавить в скетч еще поддержку датчика влажности DHT-11 или DHT-22 ? было бы вообще шикарно, я бы с удовольствием его добавил, у самого не получается написать работоспособный скетч ??
-
-
Надо подумать об этом… Для начала закажу на днях такой датчик)
-
-
Спасибо,буду следить за проектом ??
-
-
DHT22 добавлен. Новая версия статьи доступна на сайте.
-
-
-
-
-
-
-
-
-
Есть ли наработки по передачи данных через GPRS шилд?
-
-
Нет, по причине отсутствия у меня GPRS-шилда.
-
-
Печально.
-
-
-
-
-
-
-
Доброе время суток!!!
приобрел барометр BMP0085 и датчик влажности DHT-11
проверил на Arduino все работает
но вот встроить в скетч для narodmon не получается , не хватает знаний-
-
BMP085 добавлен. Новая версия статьи доступна на сайте.
-
-
-
-
-
c UNO работет скетч , а на arduino mega в момент загрузки скетча зависает, и незагружается тем самым до конца! Подскажите, в чем может быть проблема??? Что надо изменить в скетче?
-
-
Код никак не может влиять на загрузку скомпилированного кода в ардуину. Проверяйте настройки ПО и саму плату.
-
-
-
Дело скорее всего в том, что мере не хватает питания от USB. Запитайте её отдельно и все получится с большой долей вероятности.
-
-
-
Проверил на меге, работает. Не с этого сайта правда, брал с ардуино . Ошибка библиотеки при компилияции происходила. В итоге заливка прошла через старую 15 версию. Там все переварилось .
-
-
Мой код работает на новых версиях Arduino IDE.
-
-
Спасибо, Стафф, проверю!
-
-
-
Не оспариваю, но у меня именно так) моих знаний хватает только на чужие примеры))))
-
-
-
-
-
-
-
-
-
парни
помогите добавить в скетч
представлен выше
два датчика
DHT-11, DHT-22
BMP0085в датчиках не использовать температурные датчики (каломбурчик)
-
-
-
Вот это пример полностью работает
http://habrahabr.ru/post/171525/
-
-
-
Добрый вечер, Дмитрий!
Строка 74:
if (!client.connected() && lastConnected)
…
client.stop();
Объясните, пожалуйста, смысл этого явления…-
-
Добрый вечер, Игорь!
Переменная lastConnected хранит состояние подключения на предыдущей итерации. Здесь выполняется проверка условия «ЕСЛИ в данный момент клиент не подключен, но был подключен на предыдущем цикле работы», ТО выполняем код. По сути — код выполняется сразу же после закрытия соединения.-
-
Да, я понимаю. Но в условии выполняется команда «client.stop();» — а клиент и так не подключен? Тогда в чем смысл?
-
-
Делал по примеру =) http://arduino.cc/en/Reference/ClientConnected
Скорее всего client.stop() выполняет ещё какие-то действия, которые нужно выполнить после отключения. Надо будет потом исходники библиотеки поизучать….-
-
Я почему так код смотрю… Сделал на Вашем примере код для отправке данных по часам RTC с записью на SD карту. Все работает. НО ровно три раза. После этого в http запросе пишет что нет свободных сокетов. Причем дальше температуру замеряет, на SD пишет и часы по NTP через интернет проверяет…
Может взглянете: http://goo.gl/FRd631
-
-
-
Так сразу сходу и не скажу в чём проблема. На днях поизучаю код, может что нащупаю…
-
-
-
-
-
-
-
-
-
-
-
Уважаемый , подскажи плз :заказал w5100 и DS18B20 с али , на даннный момент есть в наличии uno , двухстрочный lcd1602 и lm35 . Хотелось бы что бы результат с уличного , не только отсылался на народмон , но и выводился на lcd (допустим первая строка на lcd это наружная температура и во второй строке температура комнатная с lm35). Посему вопрос , как реализовать , что в существующем скетче переделать и в каком месте вставить обращение к lcd . Просьба не пиннать сильно — нуб в программировании .Заранее благодарен .
-
-
Вставить вывод на LCD можно после 195 строки. Единственное что нужно сделать, завести отдельную переменную для хранения числового значения температуры, которую затем и отсылать через lcd.print()
На днях постараюсь написать такой код.-
-
Буду премного благодарен за готовый код и спасибо за оперативный ответ !
-
-
-
-
-
-
-
Здравствуйте. Подскажите рабочий скетч для atmega 168 pa-pu. У меня этот не помещается ??
Binary sketch size: 14790 bytes (of a 14336 byte maximum)-
-
Хм… Попробую в свободное время поэкспериментировать с уменьшением объёма кода. Правда не уверен, что получится.
-
-
-
-
-
возможно ли как то дополнить датчиком DTH-22 ?
не получается у меня что то.-
-
В данный момент я так и не обзавёлся этим датчиком, поэтому пока не имею такой возможности.
-
-
-
-
-
Добрый день!
Помогите пожалуйста разобраться.
1.Большие подозрения по правильности физического подключения Ethernet модуля (http://dx.com/p/pcb-arduino-enc28j60-ethernet-module-blue-140971#.Uu496fl_uSo) какие пины куда подключаются.
2.Монитор порта молчит (((
-
-
-
Добрый день, объясните пожалуйста — адрес сервера 94.19.113.221 — он что делает. Там картинка заглушка с котом стоит.
-
-
Здравствуйте. Это IP-адрес сайта narodmon.ru
-
-
Спасибо за быстрый ответ. Заказал сейчас блоки с ebay, потом буду пробовать собрать все. Также присоединяюсь к просьбам, которые были ранее — Вы добавите поддержку датчиков влажности и давления? Было бы здорово!
-
-
-
-
-
-
-
Все собрал, запустил, работает, ура! А добавка датчиков давления и влажности будет? Или все остановилось уже?
-
-
Ну не совсем остановилось, скажем так ПРИостановилось) Сейчас времени не хватает, в связи с написанием дипломной. Но думаю, что скоро я вновь возьмусь за электронику и этот сайт.
-
-
-
Вадим, оба датчика добавлены. Новая версия статьи доступна на сайте.
-
-
Приветствую! Респект и уважуха Вам! Как и обещано было — в июле. Сейчас на отдыхе, в понедельник буду пробывать подключать — благо датчики в наличии. Как экзамены сдали?
-
-
Здравствуйте! Спасибо. Защитился на отлично) Красный диплом.
-
-
Молодца! Удачи Вам!
-
-
-
И Вам тоже ??
-
-
-
-
-
-
-
-
-
-
-
Спасибо за ответ, придется подождать тогда. Успехов в учебе!
-
-
Спасибо!
-
-
-
-
-
Привет! Заработало с первого раза! Прям PnP какой-то. Спасибо!
-
-
Я рад ??
-
-
-
-
-
Добрый день.
Подскажите как сделать чтобы айпи адрес получал не по dchp а ручками в скече.-
-
Здравствуйте. Добавьте в начале кода (до 33 строки) строчку:
byte ip[] = { 192, 168, 1, 177 };
Адрес конечно поставьте свой.
Далее замените строку 42:42
if (Ethernet.begin(mac) == 0)
на
42
if (Ethernet.begin(mac,ip) == 0)
Это всё)
-
-
-
Кстати, вполне возможно, что понадобится также указать DNS и шлюз. Тогда строчка будет выглядеть так:
if (Ethernet.begin(mac, ip, dns, gateway) == 0)
-
-
Спасибо.
Днс я думаю не нужно.
Он стучится до сервера по айпи а не по домену.-
-
Да, но может понадобиться шлюз. А он указывается только после DNS.
-
-
-
-
-
-
-
-
-
Дмитрий , а можешь в свой скетч добавить bmp085?
-
-
В ближайшее время — нет. Не хватает времени. Возможно займусь всеми проектами после середины лета.
-
-
-
-
-
Спасибо Дмитрий, еще раз
Добавил к твоему проекту для себя (может кому полезно будет)
вывод на двухстрочный LCD
мои изменения с комментами //***
http://pastebin.com/wXSG5DZX-
-
MAC адрес только поменяйте, а то работать не будет ??
-
-
-
Спасибо Вам)
-
-
-
-
-
А есть где- нибудь проект без ардуины. Схемы, все-такое. Проект интересный. Я бы реализовал в «одной коробке».
-
-
У меня сейчас всё это собрано просто на МК ATmega328. В интернете можно найти обвязку ардуины, просто повторяем минимальную схему и всё. С Ethernet-shield сложнее.
-
-
-
-
-
Добавьте ещё вариант с ENC28J60
-
-
Для ENC29j60 данный скетч не идет потому что используется библиотека Ethernet.h, с которой он судя по всему не совместим. А нужен , смотрите проект метеостанция 2.0
там как раз используется нужна библиотекаДля ENC29j60 я использовал https://github.com/vkorobov/narodmon-Arduino-ENC28J60/blob/master/narodmon.ino
-
-
-
-
-
Запускается только после нажатия Reset.. Те. после отключения питания отваливается Ethernet до нажатия на reset
-
-
Я думаю это что-то с Ethernet-модулем. Не наблюдал такого.
-
-
-
-
-
Возможно ли добавить в ваш код. код с ИК пульта. что бы при нажатии кнопке на пульте. включать реле?
#include
int RECV_PIN = 7;
IRrecv irrecv(RECV_PIN); //Создаем объект получения сигнала с определнного порта
decode_results results; //Переменная, хранящая результат
int r = 0; // переменная переключения режима, при нажатии кнопки она принимает значение +1
void setup()
{irrecv.enableIRIn(); // Начинаем прием
irrecv.enableIRIn(); // включить приемник
pinMode(12, OUTPUT);}
void loop() {
if (irrecv.decode(&results)) //При получении сигнала…
{irrecv.resume(); // Получаем следующее значение
}
delay(50); //пауза между повторами //
if (irrecv.decode(&results)) {
delay(300); // задержка перед выполнением определения кнопок, чтобы избежать быстрое двойное нажатие
if (results.value == 0x9C455CBF) {r = r + 1;}// начинаем включать светодиоды на пинах
if (r == 1) {digitalWrite(12, HIGH);}
else {digitalWrite(12, LOW);r = 0;}// {
// delay(50); //пауза между повторами //
// } //
irrecv.resume(); //
//delay(20);}
}-
-
А в чём проблема? Добавляйте необходимый код в начало либо конец функции loop()
-
-
-
-
-
Добрый день, Дмитрий!
Подскажите, а как Вы разместили DS18B20 за окном? Он изолирован как-нибудь?-
-
Здравствуйте. Сам по себе от внешней среды он практически не изолирован. Всё находится в небольшой плоской пластиковой коробочке, которая имеет отверстия для вентиляции. Все контакты для защиты от воды я покрыл лаком.
-
-
-
-
-
Отличная статья, скетч хорошо подходит для экспериментов. К имеющемуся в коде датчику температуры DS1820 от себя добавил датчик давления BMP180, датчик влажности DHT22 и релейный ( в смысле да/нет) датчик движения Colt-XS. ??
Все это работает на Arduino Uno. Если кому интересно, вот ссылка https://yadi.sk/d/L8_1__jQpRzSP
Как это работает, видно здесь: http://narodmon.ru/8407-
-
Датчики влажности и давления в коде уже давно есть) Смотрите последнюю версию статьи. Скоро туда же добавится счётчик Гейгера и ещё кучка разных датчиков (освещённости, задымления и т.д.)
-
-
Дмитрий, надеюсь экран останется? Который к 2.1 версии прикрутил Naevus.
-
-
Да, я думаю всё останется. Надо мне ещё самому будет разобраться во всех доработках и перечитать все комментарии)
-
-
-
-
-
-
-
-
-
«Народный мониторинг» недавно сменил хостинг. С этим событием сменился IP сервера, а он фигурирует в скетче. Данные больше не доходят с подобных устройств. Как бы грамотно и лаконично поменять скетч для перезаливки, чтобы опять заработало?
-
-
Здравствуйте! Необходимо заменить в скетче строку
19
IPAddress server(94,19,113,221); // IP сервера
на
19
char server[] = "narodmon.ru";
Сейчас изменю скетчи на сайте…
-
-
-
-
-
Подсобите, а где схема подключения ENC28J60 к ардуно?
-
-
Где-нибудь в Интернете можно найти. Я с этим модулем не работал.
-
-
-
if (b1==0) {c1[0]=’0′;}
….
замени на
if(с1>9)с1 += 0x37;
else с1 += 0x30;
или
c1 += c1>9?0x37:0x30;
если компилятор переварит.
Спасибо, попробую как будет время. Делал на скорую руку, поэтому для меня важен был результат, а не удобочитаемость кода)