Домашний монитор
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Об этом проекте
Я начал с домашнего мониторинга, установив термостат Ecobee Smart в доме моей дочери. Ecobee сняла их с производства, поэтому мне нужна была альтернатива, которая позволяла бы контролировать такие вещи, как уровень отстойника, сигнализация о наводнении, потеря мощности, а также другие элементы. Я многое почерпнул из других проектов на разных сайтах, особенно для кодирования как Arduino, так и веб-сайта. Использование Pushingbox для уведомлений было ключевой частью системы, позволяющей использовать средства удаленного уведомления. Я ценю открытое сообщество дизайнеров за публикацию своих знаний и проектов.
<рисунок>Я начал с Arduino Mega 2560, добавил карту Ethernet. Используя Eagle cad, я разработал пару плат для входов, а также визуальный сигнализатор. Я заказал их в OSH Park. Плата интерфейса соединяет семь доступных сухих контактов, датчик температуры и влажности, часы реального времени и ультразвуковой датчик уровня в поддоне Arduino.
<рисунок>
Для локального дисплея я использовал ЖК-дисплей 4x20. Также есть 8 светодиодов, которые показывают состояние любого тревожного входа:желтый, когда включен, зеленый, когда сброшен, и выключен при сбросе.
Кнопка сброса гаснет все зеленые светодиоды, а сообщение enable PB включает / выключает уведомления с помощью Pushingbox.
Сайт отображается только в локальной сети. Я не хотел переносить свой роутер из соображений безопасности. Было несколько примеров Arduino, части которых я использовал, а также jqplot, так как я хотел работать отдельно в своей лабораторной системе.
Ярлыков пока нет, программное обеспечение настроено на срабатывание сигнализации на расстоянии менее 10 дюймов от датчика, и горит желтый светодиод, указывающий на то, что эта сигнализация активна. Тревога зеленого цвета показывает, что она когда-то была, но с тех пор открылась. При нажатии кнопки сброса зеленый индикатор погаснет, однако желтый индикатор будет гореть до тех пор, пока уровень не превысит 10 дюймов.
Код
- Код Arduino
- Веб-сайт
Код Arduino C / C ++
// Код домашнего монитора / * НАЗНАЧЕНИЯ arduino grn светодиод красный светодиодный индикатор интерфейса сигнализатор датчик # переменный входной контакт выходной контакт выходной контакт переменная плата контактная плата красная контактная плата grn pinsump level 1 6,8 18 19 дюймов x15-2 до 6 , от x15-3 до 8 20-1 20-2 Предупреждение о наводнении 2 28 23 25 x15-4 20-3 20-4 потеря мощности 3 30 27 29 x15-5 20-5 20-6 температура 4 ftemp 5 (ftemp, 1 ) x15-1 влажность 5 fhumi 5 (fhumi, 1) x15-1aux 1 6 доп. 1 32 31 33 x15-6 20-7 20-8aux 2 7 доп. 2 34 35 37 x15-11 21-1 21-2 доп. 3 8 доп. 3 36 39 41 x15-7 21-3 21-4aux 4 9 доп. 4 38 43 45 x15-8 21-5 21-6aux 5 10 aux5 40 47 49 x15-9 21-7 21-8 сброс сброса 42 x15-10 запрет сообщения msginhbt 44 x15-12 светодиод сообщения 17 * необходимо изменить для экрана Wi-Fi WIRINGVCC на 5VLCD:вывод SDA на штифт 21L CD:контакт SCL к контакту 20 DHT:контакт 1 DHT к контакту VCCDHT:контакт 2 DHT к контакту 5 и 10K к VCCDHT:контакт 3 DHT резервный DHT:контакт 4 DHT к GNDSR04:триггер контакта SR04 к контакту 8SR04:эхо контакта SR04 к контакту 6 RTC:Вывод SDA на вывод 21 RTC:вывод SCL на вывод 20 Вывод ПОТЕРЯ ПИТАНИЯ 30 Вывод сигнала тревоги FLOOD 28 Вывод 17 светодиода сообщения не может использовать выводы 4, 7, 10, 11, 12, 13 50, 51, 52 и 53 * /// БИБЛИОТЕКИ # include#include #include #include #include #include #include #include #include // размер буфера, используемого для захвата HTTP-запросов # define REQ_BUF_SZ 50 // MAC-адрес из наклейки щита Ethernet под boardbyte mac [] ={0xzz, 0xzz, 0xzz, 0xzz, 0xzz, 0xzz}; IP-адрес ip (192, 168, 1, 100); // (10, 9, 9, 12); или (192 168 11 100); IP-адрес, возможно, потребуется изменить в зависимости от шлюза networkIPAddress (192,168,1,1); // (10,9,9,1):или (192,168,1,1); не использованный ранее в других скетчах МОЖЕТ БЫТЬ УДАЛЕН IPAddress subnet (255,255,255,0); // (255,255,255,0); не использованный ранее в других скетчах, МОЖЕТ БЫТЬ УДАЛЕННЫЙ серверthernetServer server (1000); // создаем сервер на порту 1000File webFile; // файл веб-страницы на SD-картеchar HTTP_req [REQ_BUF_SZ] ={0}; // буферизованный HTTP-запрос хранится как строка с завершающим нулемchar req_index =0; // индексировать в буфер HTTP_req // Ваш секретный DevID от PushingBox.com. Вы можете использовать несколько DevID для нескольких контактов, если хотите char DEVID1 [] ="xxxxxxxxxxxxxxxxx"; // Сценарий:«это первый сценарий оповещения» укажите здесь свой DevID в кавычках // НАСТРОЙКА УСТРОЙСТВА // настройка LCDLiquidCrystal_I2C lcd (0x27,20,4); // установить адрес ЖК-дисплея на 0x27 для отображения 16 символов и 2 строк // настроить DHT22dht DHT; #define DHT22_PIN 5 // настроить сонар # определить TRIGGER_PIN 8 // контакт Arduino, привязанный к контакту триггера на ультразвуковом датчике. # define ECHO_PIN 6 // Вывод Arduino привязан к выводу эха на ультразвуковом датчике. # Define MAX_DISTANCE 200 // Максимальное расстояние, на которое мы хотим пинговать (в сантиметрах). Максимальное расстояние датчика оценивается в 400-500 см. Новый гидролокатор (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing установка выводов и максимальное расстояние .//setup RTCRTC_DS3231 RTC; // Глобальные переменные unsigned long mathtime1 =0; беззнаковое длинное mathtime2 =0; беззнаковое длинное mathtime3 =0; беззнаковое длинное mathtime3a =0; беззнаковое длинное mathtime4 =0; Строка timestring; String datestring; беззнаковые int дюймы; float ftemp; плавать фхуми; int aux1; int aux2; int aux3; int aux4; int aux5; int reset; int msginhbt =LOW; int sensor1 =0; Строка sensor2 =0; Строка sensor3 =0; int sensor4 =0; int sensor5 =0; Строка sensor6 =0; Строка sensor7 =0; Строка sensor8 =0; Строка sensor9 =0; Строка sensor10 =0; String messagesend; Строка sensor1msg; Строка sensor2msg; Строка sensor3msg; Строка sensor6msg; Строка sensor7msg; Строка sensor8msg; Строка sensor9msg; Строка sensor10msg; Строка msginhbtmsg; Строка devid ="xxxxxxxxxxxxxxxxx"; char serverName [] ="api.pushingbox.com"; логическое lastConnected =false; логическое DEBUG =true; // для устранения неполадок pushingboxboolean DEBUG1 =true; // для устранения проблем с веб-сайтомboolean DEBUG2 =false; // для устранения неполадок datavoid setup () {// ОПЕРАЦИИ С SD-КАРТОЙ // отключение микросхемы Ethernet pinMode (10, OUTPUT); digitalWrite (10, ВЫСОКИЙ); // НАЧАТЬ ПОСЛЕДОВАТЕЛЬНУЮ ИНФОРМАЦИЮ ДЛЯ ОТЛАДКИ Serial.begin (9600); if (DEBUG1) {Serial.println ("Запуск программы ..");} Ethernet.begin (mac, ip, шлюз, подсеть); if (DEBUG1) {Serial.println ("Активный IP-адрес сервера:"); Serial.println (Ethernet.localIP ());} server.begin (); // инициализируем SD-карту if (DEBUG1) {Serial.println ("Инициализация SD-карты ...");} if (! SD.begin (4)) {if (DEBUG1) {Serial.println ("ERROR - SD card инициализация не удалась! ");} return; // ошибка инициализации} if (DEBUG1) {Serial.println ("УСПЕХ - SD-карта инициализирована.");} // проверка файла index.htm if (! SD.exists ("index.htm")) {if ( DEBUG1) {Serial.println ("ОШИБКА - Не удается найти файл index.htm!");} Return; // не удается найти индексный файл} Serial.println ("УСПЕШНО - найден файл index.htm."); // ИНИЦИАЛИЗИРУЕМ ОБОРУДОВАНИЕ // инициализируем веб-сервер Ethernet.begin (mac, ip); // инициализируем устройство Ethernet server.begin (); // начать прислушиваться к клиентам // инициализировать ЖК-дисплей lcd.init (); // инициализируем RTC Wire.begin (); RTC.begin (); if (! RTC.isrunning ()) {if (DEBUG2) {Serial.println («RTC НЕ запущен!»);} // следующая строка устанавливает RTC на дату и время компиляции этого скетча RTC.adjust (DateTime (__ДАТА__, __ВРЕМЯ__)); } DateTime now =RTC.now (); DateTime скомпилирован =DateTime (__ DATE__, __TIME__); if (now.unixtime () -1) {// проверяем, пришла ли команда homefront =homefront + 6; // получаем следующий символ int endfront =homefront + 3; // Надеюсь, эта команда 3 символа String action =line.substring (homefront, endfront); // получить значение команды client.print ("datas ({sensor1:"); client.print (sensor1); client. print (", sensor2:"); client.print (sensor2); client.print (", sensor3:"); client.print (sensor3); client.print (", sensor4:"); client.print (sensor4 ); client.print (", sensor5:"); client.print (sensor5); client.print (", sensor6:"); client.print (sensor6); client.print (", sensor7:"); клиент .print (sensor7); client.print (", sensor8:"); client.print (sensor8); client.print (", sensor9:"); client.print (sensor9); client.print (", sensor10:"); client.print (sensor10); client.print (", msgtimer:"); client.print (mathtime3a); client.print (", msgonoff:"); client.print (msginhbtmsg); client.print ("})"); } ломать; } если (c =='\ n') {непрерывно =истина; } иначе, если (c! ='\ r') {непрерывно =ложь; }}} задержка (1); client.stop (); } if (DEBUG1) {Serial.print ("данные ({sensor1:"); Serial.println (sensor1); Serial.print (", sensor2:"); Serial.println (sensor2); Serial.print (", sensor3:"); Serial.println (sensor3); Serial.print (", sensor4:"); Serial.println (sensor4); Serial.print (", sensor5:"); Serial.println (sensor5); Последовательный. print (", sensor6:"); Serial.println (sensor6); Serial.print (", sensor7:"); Serial.println (sensor7); Serial.print (", sensor8:"); Serial.println (sensor8 ); Serial.print (", sensor9:"); Serial.println (sensor9); Serial.print (", sensor10:"); Serial.println (sensor10); Serial.print (", msgtimer:"); Последовательный .println (mathtime3a); Serial.print (", msgonoff:"); Serial.print (msginhbtmsg); Serial.println ("})");} if (DEBUG1) {Serial.print ("IP-адрес моего веб-сайта:"); Serial.println (Ethernet.localIP ());}} void timeanddate () {// время и дата DateTime now =RTC.now (); DateTime future (now.unixtime () - 0); // корректировка времени была на 840 String hourstring; Строка минутной строки; String secondstring; if (future.hour () <10) {hourstring ='0' + String (future.hour ()) + ':';} else {hourstring =String (future.hour ()) + ':';} если (future.minute () <10) {minutestring ='0' + String (future.minute ()) + ':';} else {minutestring =String (future.minute ()) + ':';} if ( future.second () <10) {secondstring ='0' + String (future.second ());} else {secondstring =String (future.second ());} временная строка =часовая строка + минутная строка + вторая строка; Строка monthstring; String daystring; String yearstring; if (future.month () <10) {monthstring ='0' + String (future.month ()) + '/';} else {monthstring =String (future.month ()) + '/';} если (future.day () <10) {daystring ='0' + String (future.day ()) + '/';} else {daystring =String (future.day ()) + '/';} datestring =строка месяца + строка дня + future.year (); lcd.setCursor (0,0); lcd.print (временная строка); lcd.setCursor (10,0); lcd.print (строка даты); mathtime1 =(now.unixtime ()); возвращение; } void ultrasonicsensor () {// ультразвуковой датчик {unsigned int uS =sonar.ping_median (5); // Отправляем пинг, получаем время пинга в микросекундах (мкс). lcd.setCursor (9,1); lcd.print (""); lcd.setCursor (9,1); lcd.print (США / US_ROUNDTRIP_IN); // Преобразуем время пинга в расстояние в см и распечатываем результат (0 =за пределами установленного диапазона расстояний) дюймы =(uS / US_ROUNDTRIP_IN); sensor1 =дюймы; if (DEBUG2) {Serial.print ("Distance:"); Serial.println (дюймы);}} return;} void dht22 () {// датчик температуры и влажности {if ((mathtime1 - mathtime4)> 2) { int chk =DHT.read22 (DHT22_PIN); fhumi =(DHT.влажность); ftemp =((DHT.температура * 1.8) +32); lcd.setCursor (9,2); lcd.print (фхуми, 1); lcd.setCursor (12,3); lcd.print (ftemp, 1); mathtime4 =mathtime1; } // задержка (2000); // 2-секундная задержка чтения if (DEBUG2) {Serial.println ("Температура и влажность:");} if (DEBUG2) {Serial.println (ftemp, 1);} if (DEBUG2) {Serial.println (fhumi , 1);}} return;} void annunciator () {// сигнал отстойника if (дюймы <10) {digitalWrite (18, HIGH); digitalWrite (19, ВЫСОКИЙ); } else {digitalWrite (19, LOW);} // наводнение if (digitalRead (28) ==HIGH) {digitalWrite (23, HIGH); digitalWrite (25, ВЫСОКИЙ); } else {digitalWrite (25, LOW);} // сигнал тревоги при потере питания if (digitalRead (30) ==HIGH) {digitalWrite (27, HIGH); digitalWrite (29, ВЫСОКИЙ); } else {digitalWrite (29, LOW);} // aux 1 alarmif (digitalRead (32) ==HIGH) {digitalWrite (31, HIGH); digitalWrite (33, ВЫСОКИЙ); } else {digitalWrite (33, LOW);} // aux 2 alarmif (digitalRead (34) ==HIGH) {digitalWrite (35, HIGH); digitalWrite (37, ВЫСОКИЙ); } else {digitalWrite (37, LOW);} // aux 3 alarmif (digitalRead (36) ==HIGH) {digitalWrite (39, HIGH); digitalWrite (41, ВЫСОКИЙ); } else {digitalWrite (41, LOW);} // aux 4 alarmif (digitalRead (38) ==HIGH) {digitalWrite (43, HIGH); digitalWrite (45, ВЫСОКИЙ); } else {digitalWrite (45, LOW);} // Aux 5 alarmif (digitalRead (40) ==HIGH) {digitalWrite (47, HIGH); digitalWrite (49, ВЫСОКИЙ); } else {digitalWrite (49, LOW);} // сбросить ledsif (digitalRead (42) ==HIGH) {int ledPinsout [] ={18, 19, 23, 25, 27, 29, 31, 33, 35, 37 , 37, 39, 41, 43, 45, 47, 49}; int ledPinsoutcnt =17; {для (int q =0; q 99999) {mathtime3a =99999;}; if (DEBUG2) {Serial.print ("MATH TIME 1:"); Serial.println (mathtime1); Serial.print ("MATH TIME 2:"); Serial .println (mathtime2); Serial.print ("MATH TIME 3:"); Serial.println (mathtime3); Serial.print ("ZFLAG:"); Serial.println (zflag);} {if (zflag ==1 &&mathtime3> 300) // изменение на 300 секунд отправляет сообщение не чаще, чем каждые 5 минут {mathtime2 =mathtime1; if (DEBUG1) {Serial.println ("ОТПРАВИТЬ СООБЩЕНИЕ!");} Клиент EthernetClient; Serial.println ("Ethernet готов"); // выводим IP-адрес платы / экрана Ethernet:Serial.print ("Мой IP-адрес SENDMESSAGE:"); Serial.println (Ethernet.localIP ()); // даем экрану Ethernet секунду для инициализации:delay (1000); if (DEBUG2) {Serial.print ("incoming value:"); Serial.println (messagesend);} String Repel =messagesend; char room [Repel. длина () + 1]; repl.toCharArray (комната, repl.length () + 1); if (DEBUG2) {Serial.print ("Это значение обрамляется:"); Serial.println (room);} client.stop (); if (DEBUG) {Serial.println ("подключение ...");} if (client.connect (serverName, 80)) {if (DEBUG) {Serial.println ("connected");} if (DEBUG) { Serial.println ("отправка запроса");} client.print ("GET / pushingbox? Devid ="); client.print (девид); client.print ("&room ="); if (DEBUG) {Serial.print ("Это отправляемое значение:"); Serial.println (room);} client.print (room); client.println («HTTP / 1.1»); client.print ("Хост:"); client.println (имя_сервера); client.println («Пользовательский агент:Arduino»); client.println (); } else {if (DEBUG) {Serial.println ("соединение не удалось");}}}} return;}
Веб-сайт JavaScript
необходимо добавить файлы js и css для запуска, они находятся на вашем компьютере. IДомашний монитор <тип сценария ="text / javascript" src ="../ src / plugins / jqplot.canvasAxisLabelRenderer.min.js"> //Домашний монитор Разработано Кевином Стрейном
Дата и время:
MUDSHARK INDUSTRIES
Изменение мира для лучшего будущего.Статус:
Sump Level Значение: дюймов от верха
Сигнал наводнения Статус:
Power Status:
Temperature Value: ° F
Humidity Value: %
Aux Input 1 Status:
Aux Input 2 Status:
Aux Input 3 Status:
Aux Input 4 Status:
Aux Input 5 Status:
Email message sentminutes agoСхема
Interface and annunciator LED%20BAR%202.sch
Внешний термометр с трендом, максимальной и минимальной температурой Интеллектуальный биомедицинский монитор с MAX32620FTHRПроизводственный процесс
- Монитор артериального давления
- Создание сети беспроводных датчиков в вашем доме
- Следите за температурой в доме с помощью Raspberry Pi
- МАЛИНОВАЯ АВТОМАТИЗАЦИЯ ДОМА
- Сделайте машинку для письма домашнего задания дома
- Создание монитора Ambilight с помощью Arduino
- Монитор сердечного ритма с использованием Интернета вещей
- Монитор напряжения термопары водонагревателя
- Автономный домашний робот-помощник
- Домашний контроллер Arduino, активированный Alexa
-
Как сделать дома робота для управления жестами
Компоненты и расходные материалы Arduino UNO × 1 Arduino Nano R3 × 1 Модуль Bluetooth HC-05 × 2 Трехосевой акселерометр и гироскоп SparkFun - MPU-6050 × 1 Двигатель постоянного
-
Включение света при приближении к дому
Компоненты и расходные материалы Ардуино Юн × 1 LED (общий) × 1 Резистор 221 Ом × 1 Макет (общий) × 1 Перемычки (общие) × 1 Apple iPhone ×
-
Монитор ПК Arduino
Компоненты и расходные материалы Ардуино Леонардо или другое устройство Arduino или даже Atmega с конвертером UART × 1 ЖК-дисплей 16x2 × 1 Перемычки (общие) × 1 Об этом проекте Введение Идея этого
-
Домашняя автоматизация на базе GSM
Компоненты и расходные материалы Arduino UNO × 1 4-канальное реле 12 В × 1 ЖК-экран с подсветкой Adafruit RGB - 16x2 × 1 GSM-модуль SIM900A × 1 адаптер 12 В × 1