Железо: GSM модуль SIM900 Микрофонный модуль Max4466 Термодатчик DS18B20 TO-92 Релейный модуль 4х канальный инфракрасный модуль HC-SR501 Геркон Ethernet модуль W5500 или ENC28J60 Датчик дождя Вот эти вещи прикрутить (может быть что то ещё добавиться) на Uno R3 atmega 328P или MEGA 2560 R3 REV3 ATMEGA 16U2. Тех. задание: 1. Связь с внешним сервером (или сервером на Ардуино), через Мобильное приложение под Андроид (самое простенькое) + через браузер. 2. На Ардуино нужно сделать опрос датчиков, а также управление внешними устройствами (реле, лампочки, и т.д.) 3. Связь с Ардуино, через Ethernet и GSM модуль (резервный канал). 3.1 Интернет по LAN будет приходить с роутера. 3.2 На GSM модуле нужно будет запустить GPRS, + SMS оповещение, (о срабатывании события). 4. Поднять защиту соединения, по средствам того же VPN, либо с помощью чего то другого. Железо я купил, от разработчика программа, проверку и отладку можно сделать в виртуальной среде в том же Протеусе, проект могу сам скинуть, можете собрать сами.
1. Элементная база. 2. Техзадание (очень абстрактное). 1. Я не утверждаю, что из комплекта этих железок нельзя выжать то, что в общих чертах Вы хотите, но усилия для этого потребуются зело великие. Железо для того и развивается и совершенствуется, чтобы быстро решать задачи, а не упражняться в последнем байте. 2. Задание нужно описывать подробно и до конца. "управление внешними устройствами (реле, лампочки, и т.д.)" - к этому возникает слишком много впросов, как и ко многим другим вещам в Вашем сообщении.
Сразу полно и правильно описать хотелки могут 10% заказчиков, из остальных приходится тянуть информацию клещами. Что зачастую ставит их в ступор. Думаю вводить наценку за дополнительные расходы времени и сил на извлечение и угадывание желаний.
1. Я не понимаю что из них нужно выжимать. 2. Алгоритм и принцип работы в ключе "Умного дома" думаю эта тема достаточно распространена. Повторить или допилить как проект ниже возможно? Спойлер: Программа /* ############################################################### Smart home C by Nikodem Bartnik October 2014 ############################################################### */ //libraries #include "etherShield.h" #include "ETHER_28J60.h" #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x01, 0x24}; // this just needs to be unique for your network, // so unless you have more than one of these boards // connected, you should be fine with this value. static uint8_t ip[4] = {192, 168, 0, 101}; // the IP address for your board. Check your home hub // to find an IP address not in use and pick that // this or 10.0.0.15 are likely formats for an address // that will work. static uint16_t port = 80; // Use port 80 - the standard for HTTP ETHER_28J60 ethernet; double tempin; double tempout; boolean light; boolean light2; boolean PIR; boolean rain; int alarm; boolean check; void setup() { delay(200); ethernet.setup(mac, ip, port); //temperature sensor sensors.begin(); sensors.setWaitForConversion(false); sensors.setResolution(12); sensors.requestTemperatures(); // define pins pinMode(A0, INPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(3, INPUT); pinMode(4, INPUT); pinMode(7, INPUT); } void loop() { char* params; if (params = ethernet.serviceRequest()) { //when you type in browser http://192.168.0.101/all if (strcmp(params, "all") == 0){ sensors.requestTemperatures(); tempin = sensors.getTempCByIndex(0); sensors.requestTemperatures(); tempout = sensors.getTempCByIndex(1); ethernet.print("<center>"); ethernet.print("<font color='teal'>"); ethernet.print("<h1>Smart Home</h1>"); ethernet.print("</font>"); ethernet.print("<br>"); ethernet.print("<h2>Temp in: "); ethernet.print(tempin); ethernet.print("</h2>"); ethernet.print("<h2>Temp out: "); ethernet.print(tempout); ethernet.print("</h2>"); check = true; ethernet.print("<h2>Alarm: "); ethernet.print(alarm); ethernet.print("</h2>"); ethernet.print("<h2>Rain: "); rain = digitalRead(4); if(rain==true){ ethernet.print("NO"); } if(rain==false){ ethernet.print("YES"); } ethernet.print("</h2>"); ethernet.print("<h2>Window: "); if(digitalRead(7)==HIGH){ ethernet.print("CLOSE"); } else{ ethernet.print("OPEN"); } ethernet.print("</h2>"); ethernet.print("Lamp: "); ethernet.print("<a href='light'><button>Lamp</button></a>"); ethernet.print("<br>"); ethernet.print("<br>"); ethernet.print("Instruction how make your smart home: <a href='http://www.instructables.com/member/Nikus/'>link</a>"); ethernet.print("<br>"); ethernet.print("C by Nikodem Bartnik"); ethernet.print("</center>"); } // TEMP IN ******************** if (strcmp(params, "tempin") == 0){ sensors.requestTemperatures(); tempin = sensors.getTempCByIndex(0)*100; ethernet.print(tempin); // print temperature in on ethernet } // TEMP OUT ******************* if (strcmp(params, "tempout") == 0){ sensors.requestTemperatures(); tempout = sensors.getTempCByIndex(1)*100; ethernet.print(tempout); // print temperature out on ethernet } // ALARM ********************** if (strcmp(params, "alarm") == 0){ check = true; ethernet.print(alarm); } // RAIN *********************** if (strcmp(params, "rain") == 0){ rain = digitalRead(4); if(rain==true){ ethernet.print("NO"); } if(rain==false){ ethernet.print("YES"); } } // WINDOW ********************** if (strcmp(params, "window") == 0){ if(digitalRead(7)==HIGH){ ethernet.print("close"); } else{ ethernet.print("open"); } } //LIGHT INTERNET**************** if(strcmp(params, "light") == 0){ ethernet.print("Lamp: "); ethernet.print(!light2); ethernet.print("<br>"); ethernet.print("change: "); ethernet.print("<a href='light'><button>Lamp</button></a>"); light2=!light2; digitalWrite(6, light2); } // ETHERNET RESPOND ************ ethernet.respond(); delay(20); } // LIGHT ON CLAP **************** if(analogRead(A0)>350){ light=!light; digitalWrite(5, light); delay(1000); } //MOVE SENSOR******************* PIR = digitalRead(3); if(check==true){ if(PIR==true){ alarm = 1; check = false; } if(PIR==false){ alarm = 0; } } } Меня больше интересует, кто нибудь занимался защитой соединения под МК, можно посмотреть готовые проекты?
Повторить и допилить возможно, но если "(может быть что то ещё добавиться)" или "(реле, лампочки, и т.д.)", то это первые признаки "безнадежного проекта". И что такое "защита соединения под МК" ? Вы управление хотите в браузер выводить ?
В чём сложность добавление железа с готовой библиотекой к текущему проекту? Не говоря, у же про те же лампочки, реле, кнопки? Под защитой подразумевается хотя бы VPN http://ypn.ru/342/vpn-solutions-for-secured-networking/ Если есть другие способы организовать защищённое соединение, я не против. А в чём может быть сложность через браузер? Спойлер: пр #include "etherShield.h" #include "ETHER_28J60.h" staticuint8_tmac[6]={0x54,0x55,0x58,0x10,0x00,0x24}; staticuint8_tip[4]={192,168,0,9}; staticuint16_tport=80; ETHER_28J60ethernet; intoutputPin3=13; intoutputPin=11; intoutputPin2=12; voidsetup() { ethernet.setup(mac,ip,port); pinMode(outputPin,OUTPUT); pinMode(outputPin2,OUTPUT); pinMode(outputPin3,OUTPUT); } voidloop() { char*params; if(params=ethernet.serviceRequest()) { ethernet.print("<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>"); ethernet.print("<img src='http://arduino-project.net/wp-content/uploads/2014/02/APL.png'><p></p>"); ethernet.print("<a href='?cmd=on1' >Включить L1</a><p></p>"); ethernet.print("<a href='?cmd=off1' >Отключить L1</a><p></p>"); ethernet.print("<a href='?cmd=on2' >Включить L2</a><p></p>"); ethernet.print("<a href='?cmd=off2' >Отключить L2</a><p></p>"); ethernet.print("<a href='?cmd=on3' >Включить L3</a><p></p>"); ethernet.print("<a href='?cmd=off3' >Отключить L3</a><p></p>"); ethernet.print("<a href='?cmd=on' >Включить все</a><p></p>"); ethernet.print("<a href='?cmd=off' >Отключить все</a><p></p>"); ethernet.respond(); if(strcmp(params,"?cmd=on1")==0){digitalWrite(outputPin,HIGH);} if(strcmp(params,"?cmd=off1")==0){digitalWrite(outputPin,LOW);} if(strcmp(params,"?cmd=on2")==0){digitalWrite(outputPin2,HIGH);} if(strcmp(params,"?cmd=off2")==0){digitalWrite(outputPin2,LOW);} if(strcmp(params,"?cmd=on3")==0){digitalWrite(outputPin3,HIGH);} if(strcmp(params,"?cmd=off3")==0){digitalWrite(outputPin3,LOW);} if(strcmp(params,"?cmd=on")==0){digitalWrite(outputPin,HIGH);digitalWrite(outputPin2,HIGH);digitalWrite(outputPin3,HIGH);} if(strcmp(params,"?cmd=off")==0){digitalWrite(outputPin,LOW);digitalWrite(outputPin2,LOW);digitalWrite(outputPin3,LOW);} } delay(100); }
Имхо, как то делали (в 3и человека) проект, модель Сигвеэй, прикручивали Гироскоп MPU-6050 к Атмега, не говоря про драйверы с шаговиками, пульт управления, итп... Мне кажется тогда было сложнее с программой. Я больше по железу ориентирован (спаять, вытравить, подключить) чем по программированию. Извините если я чего то не знаю в Ардуино, и мне кажется что из запрошенного мною, только защиту соединения будет трудно привязать.
Не успели полностью реализовать, задуманное. От джостика да. Так я как бы об этом же, но здесь внимание заострили на другом. Сам не искал в этом направлении, подсказали, что возможно.
VPN проще и дешевле на роутере установить (или купить роутер с поддержкой VPN, или перепрошить поддерживаемую модель в OpenWrt). Схема и скетч из сообщения №8 в оригинале на польском http://www.arduinopolska.cba.pl/projects/smart_home/smart_home.html
По Лану да, интерес через GSM шилд. Схему и скетч я привёл для примера. Так всё таки, возьмётся кто нибудь реализовать защита соединения, через VPN в Ардуино, либо другими средствами защиты? На малине?
Суть защиты, если будет произведён перехват через "Виртуальную Соту", с полной подменой номера и imei, доступ к устройству не получит, т.к нужна будет авторизация. Возможно каким то образом реализовать защищённое соединение?
+100 Самое худшее, что человек потом может еще и отказаться. А иначе никак не обьяснишь ему цену которую называем. Но и при этом варианте - как заказчик узнает о исполнителе и его способностях и правильной оценки работ(не завышенной), что в последствии наводит и тех и других в круговое недоверие и неохоту тратить личное время. Но те решения что были предложены на форуме амперки и ардуино были проигнорированы - "рейтинги исполнителей, рейтинги заказчиков, отзывы о тех и других".
Вот в этом главная проблема. на мой взгляд. Все думают, что "умный дом" это что-то стандартное и устоявшееся, когда в реальности у всех разные хотелки. Кому-то охранную систему надо, кому-то реле в каждой розетке. а кому-то чтобы унитаз с утра человеческим голосом прогноз погоды рассказывал. И пойди угадай.
Проблема только в не правильно сформулированном тех. задании, т.е в другом проблемы нет, и защиту возможно сделать?
Проблема в том, что задания вообще никакого нет. А защита от "виртуальной соты" - это блажь. Никому с такими ресурсами ваши герконы и датчики дождя не нужны.