Устройство создавалось на заказ. Из серии умный дом. Каждое устройство представляет собой web-сервер (контроллер Arduino + Ethernet shield) , к контроллеру Arduino подсоединены следующие датчики
1. датчик температуры DS18B20
2. модуль датчика влажности DHT11
3. модуль датчика освещенности BH1750
4. модуль датчика движения HC-SR501
5. модуль звука





Схема устройства следующая

Каждое устройство имеет уникальный ip адрес. При обращении к устройству, оно отдает данные датчиков в формате Json
температура, влажность, освещенность, количество срабатываний датчика движения и датчика звука после последнего обращения.
Данные такого вида
{«meteo»: {«temp1″:»25.31″,»humidity1″:»35.00″,»lux1″:»10″,»sound1″:»0″,»motion1″:»0»} }
У всех устройств свой уникальный порт обращения, есть задумка получать данные с каждого устройства из внешней сети для приложение для смартфона.
Вот содержимое скетча для модуля
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <Wire.h>
#include <BH1750.h>
BH1750 light1;
#include "DHT.h"
DHT dht(8, DHTTYPE);
OneWire ds(7); // on pin 7
// датчик 1
/**/
byte mac[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xF1 };
byte ip[] = { 192, 168, 1, 121 };
EthernetServer server(10001);
byte my_addr[8]={0x28,0x2A,0x78,0x65,5,0,0,0x10};
/**/
// датчик 2
/*
byte mac[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xF2 };
byte ip[] = { 192, 168, 0, 122 };
EthernetServer server(10002);
byte my_addr[8]={0x28,0x1,0x65,0x65,5,0,0,0xCE};
*/
int count_motion=0;
uint16_t count_sound=0;
void setup() {
Serial.begin(9600);
Serial.println("start");
Ethernet.begin(mac, ip);
// запуск сервера
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
Wire.begin();
delay(1000);
light1.begin();
attachInterrupt(0,motion,RISING);
}
void loop ()
{
EthernetClient client = server.available();
if (client) {
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.print('{');
client.print('"');client.print("meteo");client.print('"');client.println(":");
client.print('{');
int Temp=get_temp();
//Serial.print(Temp/16);
//Serial.print(".");
//Serial.print(((Temp%16)*100)/16);
//Serial.println();
client.print('"');client.print("temp1");client.print('"');client.print(":");
client.print('"');client.print(Temp/16);
client.print(".");
client.print(((Temp%16)*100)/16);client.print('"');client.print(',');
float h = dht.readHumidity();
client.print('"');client.print("humidity1");client.print('"');client.print(":");
client.print('"');client.print(h);client.print('"');
client.print(',');
// bh1750
uint16_t lux = light1.readLightLevel();
client.print('"');client.print("lux1");client.print('"');client.print(":");
client.print('"');client.print(lux);client.print('"');
client.print(',');
// sound
client.print('"');client.print("sound1");client.print('"');client.print(":");
client.print('"');client.print(count_sound);client.print('"');
client.print(',');
count_sound=0;
//датчик движения
client.print('"');client.print("motion1");client.print('"');client.print(":");
client.print('"');client.print(count_motion);client.print('"');
client.println("}");
client.print("}");
count_motion=0;
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
}
// sound
if(analogRead(A0)<500)
{count_sound++;delay(1000);}
}
// получение тмпературы датчика
int get_temp()
{
byte i;
byte present = 0;
byte data[12];
byte addr[8];
int Temp;
ds.reset();
ds.select(my_addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end
delay(1000); // maybe 750ms is enough, maybe not
// we might do a ds.depower() here, but the reset will take care of it.
present = ds.reset();
ds.select(my_addr);
ds.write(0xBE); // Read Scratchpad
for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
}
Temp=(data[1]<<8)+data[0];//take the two bytes from the response relating to temperature
Temp=Temp;//divide by 16 to get pure celcius readout
return Temp;
}
// обработка прерывания ик датчика движения
//
void motion()
{
detachInterrupt(0);
count_motion++;
attachInterrupt(0,motion,RISING);
}
Все устройства находятся в одной локальной сети. В сети находится сайт для сбора данных с устройств и представления данных в виде графиков и таблиц. А также отображение данных в виде виджетов на плане дома или квартиры.
Опрос модулей по cron каждые 5 минут, данные собираются в базу данных mySQL,
где также хранятся настройки для всех модулей, находящихся в системе

Сайт написан на html5 с элементами canvas при выводе виджетов на плане объекта
Отправка информации на сервер - без перезагрузки страницы (ajax, библиотека xajax)
Вид объектов с виджетами (средние значения температуры, влажности, освещенности)

При авторизации активируются ссылки с виджетов в админскую часть
В админской части просмотр данных
c выбором объекта (квартира, дача, гараж)
подобъекта (1 этаж ....)
комнаты
и даты

для температуры, влажности, освещенности строятся графики

для датчиков звука и датчиков движения - таблицы с количеством срабатываний между запросами

При построении графиков и таблиц используется API Google Chart
Архив с файлами сайта - скачать
Посмотреть можно здесь
Логин - admin1
пароль - 123456
числа 03.05, 04.05, 05.05

0 комментариев на «“Ethernet-модуль датчиков на Arduino и web-интерфейс для множества таких модулей”»
Интересный проект. Хочу что то похожее сделать, вот только имею затруднения с PHP, скачал, хотел посмотреть, не получается зайти с помощью указанных данных, в лог ошибок пишется, но из-за объема комментария включить не получается.
Помогите разобраться!
Не получается запустить — в архив забыл включить дамп базы данных
Напишите почту — я вышлю
Поставьте на Денвер и работайте
Посмотреть в сети
на там графиков не увидите — т.к. графики берут данные из бд, а сейчас нет записи показаний в базу
можно посмотреть за 2014-05-04
Здравствуйте, Спасибо Вам!
Я по роду работы нахожусь в разъездах по просторам нашей страны, а так хочется посмотреть «как там дома». Для запуска необходим — «дамп базы данных», в виду «ограничения рейтинга» не могу написать сообщение с указанием почты, если можете
напишите сообщение с указанием Вашей почты, конфиденциальность со своей стороны гарантирую.
victor.petin@gmail.com
Здравствуйте, Спасибо Вам!
тоже очень заинтересовал проект. Не могли бы вы выслать мне дамп базы данных и инструкцию небольшую куда чего вставлять, и работает ли под виндой
С уважением Алексей
astotskiy@mail.ru
Здравствуйте, очень заинтересовал ваш проект.
Не могли бы вы скинуть ваши исходники мне «ангелок»
walentin_lew@mail.ru
Заранее огромное спасибо
Здравствуйте. Если не трудно, вышлите, пожалуйста, дамп базы данных. Заранее спасибо.
sergej.r@mail.ru
выслал на почту
Мне бы тоже бд на почту pragatz@yandex.ru
отправил
Здравствуйте. Вышлите, пожалуйста, дамп базы данных. Спасибо.
zvorchik@gmail.com
отправил
Здравствуйте! Пожалуйста вышлите и мне дамп БД на mtsby@hotmail.com Спасибо.
отправил
Здравствуйте. Вышлите, пожалуйста, дамп базы данных. Спасибо.
evklid1@ya.ru
Здравствуйте! Пожалуйста вышлите и мне дамп БД на iwizard7@gmail.com Спасибо.
отправил
Здравствуйте, Спасибо Вам!
тоже очень заинтересовал проект. Не могли бы вы выслать мне дамп базы данных и инструкцию небольшую куда чего вставлять, и работает ли под виндой
С уважением Борис ученик робошколы г.Рязани
pear3200@gmail.com
Добрый день. Классно! И мне пришлите пожалуйста дамп БД на mbar@yandex.ru. Спасибо
отправил
Добрый день!
Пришлите мне пожалуйста дамп БД.
w_vladimir@74.ru
спасибо.
отправил
Спасибо… Виктор. БД получил.
Сервер после ввода логина с паролем подвисает. В итоге белый лист. Что делаю не так?
Система Win XP. Установлен Денвер.
Здравствуйте!
Вам наверное уже надоело рассылать базу данных от проекта.
Но все же, если можно, скиньте на адрес:
5diezov@gmail.com
Здравствуйте!
Пришлите мне пожалуйста дамп БД.
max77701@bk.ru
Заранее спасибо.
Здравствуйте, Спасибо Вам!
тоже очень заинтересовал проект. Не могли бы вы выслать мне дамп базы данных и инструкцию небольшую куда чего вставлять, и работает ли под виндой
С уважением Борис ученик робошколы
pear3200@gmail.com
Добрый день! Очень интересный проект!
Спасибо за Вашу работу!
Пришлите мне, пожалуйста, дамп базы.
Спасибо!
ser_ov@tut.by
Спасибо за Вашу работу!
Пришлите мне, пожалуйста, дамп базы.
Спасибо!
7oup@mail.ru
Подскажите чайнику в Arduino если не трудно и Сталкивались:
Имею Arduino Mega и Internet Shild Wiznet W5100 Ethernet controller;
Так вот мега работает нормально, а вот шилд начинает нормально работать только после нажатия кнопки reset на нем до следующего выключения питания.
Что в нем нет так или я что то туплю. Спасибо!!!
Хорошая работа!
Если не затруднит, вышлите мне, пожалуйста, дамп базы.
Заранее спасибо!
v.panishko@gmail.com
Спасибо за ваши труды!
Можно попросить дамп база.
kim@rambler.ru
Дамп БД и остальные файлы
можно найти в архиве
на сайте издательства BHV
Приветствую! Очень крутой проект, респект! По ссылкам дампа нет, прошу выслать d.kalugin@gmail.com Заранее спасибо!
Добрый день, очень крутой проект! Его однозначно нужно развивать. Можно попросить выслать дамп на vitalik.net@list.ru, спасибо! Я может подключусь и внесу свою лепту во внешний вид)
и мне скиньте pragatz@yandex.ru
Спасибо) на почте нашел уже у себя
скиньте дамп базы пожалуйста. niarbrnd@yandex.ru
Спасибо
Здравствуйте. Скиньте пожалуйста, дамп базы данных. tanya.kozlovskaya.1995@mail.ru Спасибо.
Здравствуйте! И мне скиньте, пожалуйста, дамп базы данных yurdelmail.ru для работы со школьниками. Заранее благодарен!
Здравствуйте!
Отправил на e-mail — yurdel@mail.ru — правильно?
Здравствуйте, Виктор! Благодарю за ваши труды, покупаю и читаю ваши книги. Не затруднит ли вас и мне скинуть дамп базы ask.dzen@mail.ru.
Здравствуйте!
Очень интересный проект.Большое вам спасибо за работу. Если не затруднит скиньте пожалуйста, дамп базы данных. Заранее благодарен.
С уважением Юрий
gerasimchuky@gmail.com
Интересный проект. У меня на данный момент автоматизация без веб сервера, чуток не удобно стало. Хочу добавить функцию эту и толком не знаю с чего начинать. Плиз сбросьте мне на почту гляну. Спасибо.
mal-alexander@yandex.ru
А как можно подключить 2 датчика освещенности GY-49 max44009?