Официальный сайт компании Arduino по адресу arduino.cc
Сигнализация с отправкой sms и датчики от китайских сигнализаций на 433МГц
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Решил сделать охранную сигнализацию для дома.
Была китайскя arduino uno и несколькокитайских датчиков(Они оказались серии PT2262). Наверное лучше и проще купить готовую сигнализацию, но хочется попробывать сделать чтото свое родное, хотябы и на uno.
Докупил пульт и радиомодули на 433, + блютуз модуль для связи с телефоном android.
Схема работы: приходит сигнал от датчика на ардуино, номер которого по блютуз передается на телефон, а он отправляет смс на нужные номера. Наверное потом куплю GSM модуль, а пока мой первый проект использует GSM модуль телефона. При первом включении нужно стереть память EEPROM, и первые два сигнала с пульта записываются как управляющие, с помощью которых можно прописать любые датчики. Потом при помощи команд можно удалять добовлять менять режимы датчиков.
Также написал программу на app inventor для синхранизации с ардуино:https://yadi.sk/d/wNGGxOD8spPMW
Возможно это комуто пригодится. фото проекта:
/* * This sketch is ALARM (RomanVS) * Connect the receiver to digital pin 2. */ #include <EEPROM.h> #include <RemoteReceiver.h> #include <RemoteTransmitter.h> unsigned int N = 70; // kol datch max unsigned int countA; byte k,i; // kol enable datch (K<N) unsigned long datch[71]; // база номеров датчиков byte dd[71]; // база режимов датчиков byte tm[84]; unsigned int per = 441; //period duration unsigned long code; //code unsigned long tCode; boolean cd,aw,onv,mc,e = false; boolean p,pp2,pp3 = false; boolean d,dd4,dd5 = false; unsigned long t; unsigned int god = 16; unsigned long start = micros(); unsigned long correct = 0; byte hours,minutes,sec; unsigned int day=125; String str; void setup() { Serial.begin(9600); read_baza(); cd=0; vvv_syn(); pinMode(13, OUTPUT); pinMode(7, OUTPUT); //BT pinMode(12, OUTPUT); //Transmit pinMode(8, OUTPUT); // GND digitalWrite(8, LOW); // WARNING GND no use!!!!! (no -- digitalWrite(8, HIGH); ) !!!!! !!!!! // Initialize receiver on interrupt 0 (= digital pin 2), calls the callback "showCode" RemoteReceiver::init(0, 2, showCode); } void loop() { timer(); // ЧАСЫ ///// РАБОТА с BT if (Serial.available()) { //val = Serial.read(); str = Serial.readString(); if (str.substring(0, 6) == "DELall") {del_baza();Serial.println("Hello Baza Deleted:");}; if (str.substring(0, 3) == "del") {del_Pul_Dat(str.substring(3, 5).toInt());vvv_syn();}; if (str.substring(0, 2) == "ch") {ch_Pul_Dat(str.substring(2, 4).toInt(),str.substring(4, 6).toInt(),str.substring(6, 15).toInt());vvv_syn();}; if (str.substring(0, 5) == "timer"){vvv_timer();}; if (str.substring(0, 5) == "time:") {if (str.substring(5, 7).toInt()<24) hours = str.substring(5, 7).toInt(); if (str.substring(7, 9).toInt()<60) minutes = str.substring(7, 9).toInt(); if (str.substring(9, 11).toInt()<60) sec = str.substring(9, 11).toInt(); if (str.substring(11, 16).toInt()<60000) {day = str.substring(11, 16).toInt();EEPROM.put(3, day);}; vvv_timer(); }; if (str == "synchr"){vvv_syn();} if (str == "syntm"){vvv_syntm();} if (str == "signalon"){onv=0;Serial.println("signal_on");} if (str == "signaloff"){onv=1;Serial.println("signal_off");} if (str == "on") a_on(); if (str == "off") a_off(); if (str == "BTon") BT_on(); if (str == "BToff") BT_off(); if (str == "writeall") {write_baza();Serial.println("Hello Baza WriteOK:");}; if (str == "readall") {read_baza();Serial.println("Hello Baza readOK:");}; if (str == "BAZAeeprom") {vvv_baza();}; if (str.substring(0, 5) == "send:") {tCode=str.substring(5, 14).toInt(); Serial.print("send:");Serial.print(tCode); transmit(tCode,per); Serial.println(">OK"); }; if (str == "help")vvv_help(); if (str.substring(0, 5) == "corr:") {correct=str.substring(5, 14).toInt(); Serial.print("correct:");Serial.print(correct); Serial.println(">ok"); }; if (str == "echoon") {e=0;Serial.println("echoon");}; if (str == "echooff") {e=1;Serial.println("echooff");}; if (str == "show_set") { if (aw == 0) {Serial.println("alarm -- off");} else {Serial.println("alarm -- on");}; if (e == 1) {Serial.println("echo -- off");} else {Serial.println("echo -- on");}; if (onv == 1) {Serial.println("signal -- off");} else {Serial.println("signal -- on");}; Serial.print("correct:");Serial.println(correct); } } ///// РАБОТА ALARM if (countA !=0 && aw == 1) {digitalWrite(13, HIGH);delay(100);digitalWrite(13, LOW);}; if (cd==1){ if (analiz(code)!=252) { if ((dd[analiz(code)]== 5) || (dd[analiz(code)]==4)) { save_alarm(countA); countA++; sendbluetooth(analiz(code)); if (countA>20){countA=0;mc=1;}; }; if (onv==0) {vvv_timer();}; if (dd[analiz(code)]== 2)a_on(); if (dd[analiz(code)]== 3)a_off(); if (dd[analiz(code)]== 7) { pp2=1;p=1;digitalWrite(13, HIGH);Serial.println("PUSHED_MANAG:1"); }; if ((dd[analiz(code)]== 1)) { pp3=1;p=1;digitalWrite(13, HIGH);Serial.println("PUSHED_MANAG:2"); }; } else { if ((k==0)) {dd[1]=7;datch[1]=code;k++;Serial.println("MANAG:1");}; // write 1 signal mod 7 if ((k==1) && (datch[1]!=code)) {dd[2]=1;datch[2]=code;;k++;Serial.println("MANAG:2"); write_baza();}; // write 2 signal mod 1 }; cd=0;}; delay(100); } //////////////////////////////////////////////////////////// END void a_on(void) { Serial.println("Alarm_on");countA=0;aw=1;mc=0; for (i=1;i<=k;i++) {if (dd[i]==6) dd[i]=4;}; } void a_off(void) { Serial.println("Alarm_off");vvv_syntm();aw=0; for (i=1;i<=k;i++) {if (dd[i]==4) dd[i]=6;}; } void save_alarm(byte j) { j =j *4; tm[j] = analiz(code); tm[++j] = hours; tm[++j] = minutes; tm[++j] = sec; } byte analiz(unsigned long code1) { byte ret=252; for (i=1;i<=k;i++) {if (datch[i]==code1) ret=i;} return ret; } void sendbluetooth(byte sn) {Serial.print("ALARM:"); Serial.print(countA); Serial.print(":"); Serial.print(sn); Serial.print("="); Serial.print(hours); Serial.print(";"); Serial.print(minutes); Serial.print(";"); Serial.println(sec); } ///////////////////////////////////////////////////////////////zap void zap_Pul(unsigned long cde) { byte m; m=analiz(cde); // write pult if (m==252){k++;m=k;}; if (k==N+1) {k--;m=k;}; switch (dd[m]) { case 7: d=1;dd4=1;Serial.println("PUSH_MANAG:1"); break; case 1: d=1;dd5=1;Serial.println("PUSH_MANAG:2"); break; default: if (pp2==1 ) {datch[m]=code; dd[m]=2; }; if (pp3==1 ) {datch[m]=code; dd[m]=3;}; dd[0]= k; write_data(m); digitalWrite(13, LOW); Serial.print("zapcode_P:"); Serial.print(datch[m]); Serial.print(":=:"); Serial.print(dd[m]); Serial.print("->"); Serial.println(m); vvv_syn(); break; } p=0;pp2=0;pp3=0; } void zap_Dat(unsigned long cde) { byte m; m=analiz(cde); // write datch if (m==252) {k++;m=k;}; if (k==N+1) {k--;m=k;}; switch (dd[m]) { case 7: digitalWrite(13, LOW); BT_on(); break; case 1: digitalWrite(13, LOW); BT_off(); break; default: if (dd4 == 1) {datch[m]=code; dd[m]=6;}; if (dd5 == 1) {datch[m]=code; dd[m]=5;}; dd[0]= k; write_data(m); digitalWrite(13, LOW); Serial.print("zapcode_D:"); Serial.print(datch[m]); Serial.print(":=:"); Serial.print(dd[m]); Serial.print("->"); Serial.println(m); vvv_syn(); break; } d=0;dd4=0;dd5=0; } ////////////////////////////////////////////////// ///EEPROM void read_baza(void) { k = EEPROM.read(0); dd[0] = k; EEPROM.get(1, datch[0]); for (i=1;i<=k;i++) {dd[i] = EEPROM.read(i*5); if (dd[i] == 4) {aw=1;}; EEPROM.get(i*5+1, datch[i]);}; } void write_data(byte b) { EEPROM.write(0, k); EEPROM.write(b*5, dd[b]); EEPROM.put(b*5+1, datch[b]); } void write_baza(void) { EEPROM.put(3, day); EEPROM.write(0, k); for (i=1;i<=k;i++) {EEPROM.write(i*5, dd[i]); EEPROM.put(i*5+1, datch[i]);}; } //////////////////////////////////////////////////////////// ///delete and change void del_Pul_Dat(byte m) { byte j; for (i=m;i<=k;i++) { if (m!=k) {j=i+1; dd[i]= dd[j]; datch[i]= datch[j];} else {dd[m]= 0;datch[m]= 0;} }; if (m<=k) {k=k-1;dd[0]=k;}; write_baza(); Serial.println("deleted"); } void ch_Pul_Dat(byte m,byte mn,unsigned long chcde) { if (k==N) k--; if (m>=k+1){k++;m=k;EEPROM.write(0, k);dd[0]=k;}; dd[m]= mn; datch[m]= chcde; EEPROM.write(m*5, mn); EEPROM.put(m*5+1, chcde); Serial.print("change:"); Serial.println(m); } void del_baza(void) { for (i=0;i<=k*5;i++) EEPROM.write(i, 0); for (i=0;i<=k;i++) {dd[i]= 0;datch[i]= 0;} k=0; cd=0; vvv_syn(); } ///////////////////////////////////////////////////////////BT void BT_on(void) {digitalWrite(7, HIGH); Serial.println("BTon_ok"); } void BT_off(void) {digitalWrite(7, LOW); Serial.println("BToff_ok"); } ////////////////////////////////////////////////////////////////vvvision void vvv_syn(void) { Serial.print("syn"); for (i=0;i<k+1;i++) {Serial.print(dd[i]); Serial.print(":"); Serial.print(datch[i]); Serial.print(";");}; vvv_timer(); } void vvv_baza(void) { Serial.print("BAZA:-"); read_baza(); vvv_syn(); } void vvv_timer(void) { Serial.print("<<");Serial.print(day);Serial.print(">>"); Serial.print(hours);Serial.print(":"); Serial.print(minutes);Serial.print(":"); Serial.print(sec); Serial.println("!!!"); } void vvv_syntm(void) { byte j,v; Serial.print("tm"); Serial.print(countA); Serial.print(">"); v = countA*4; if (v>81 || mc==1) v=84; for (j=0;j<v;j++) { Serial.print(tm[j]); Serial.print("="); Serial.print(tm[++j]); Serial.print(":"); Serial.print(tm[++j]); Serial.print(":"); Serial.print(tm[++j]); Serial.print(";");}; Serial.println(""); } void vvv_help(void) { Serial.println("help"); Serial.println("on"); Serial.println("off"); Serial.println("DELall"); Serial.println("delNN"); Serial.println("chNNMMCode"); Serial.println("timer"); Serial.println("time:HHMMSSday"); Serial.println("synchr"); Serial.println("syntm"); Serial.println("signalon"); Serial.println("signaloff"); Serial.println("BTon"); Serial.println("BToff"); Serial.println("send:CODEEE"); Serial.println("corr:CORECTION"); Serial.println("writeall"); Serial.println("readall"); Serial.println("BAZAeeprom"); Serial.println("echoon"); Serial.println("echooff"); Serial.println("show_set"); } ////////////////////////////////////////////////////////////////////////// ///time void timer(void) { while ((unsigned long)(micros() - start) >= 1000000 + correct) { if (++sec == 60) { sec = 0; if (++minutes == 60) // senks Datak { minutes = 0; if (++hours == 24){hours = 0;day++;} } } start += 1000000 + correct; } } /////////////////////////////////////////////////////////////////////////Receiver // Callback function is called only when a valid code is received. void showCode(unsigned long receivedCode, unsigned int period) { // Note: interrupts are disabled. You can re-enable them if needed. if ((millis()-t<2500)&&(code==receivedCode)) { cd=0;} else { cd=1; code=receivedCode; t=millis();}; if (p==1 && cd==1){zap_Pul(code);cd=0;} if (d==1 && cd==1){zap_Dat(code);cd=0;} // Print the received code. if (onv==0) {Serial.print("Code:"); Serial.print(code); Serial.println(";");}; } ////////////////////////////////////////////////////////////////////////Transmitter void transmit(unsigned long transmitCode, unsigned int period) { // Disable the receiver; otherwise it might pick up the retransmit as well. digitalWrite(12, HIGH); digitalWrite(13, HIGH); if (e == 1) RemoteReceiver::disable(); delay(200); //////////RemoteTransmitter::sendCode(11, transmitCode, period, 3);??? for (int j=0;j<6;j++) { //формируем код отправки transmitCode = transmitCode & 0xFFFFF; transmitCode |= (unsigned long)period << 23; transmitCode |= 2L << 20;} RemoteTransmitter::sendTelegram(transmitCode,11);//11-пин к которому подключен передатчик */ delay(300); digitalWrite(13, LOW); digitalWrite(12, LOW); if (e == 1)RemoteReceiver::enable(); }
если бы через строчку - дописали обьяснение что где происходит, и ощий принцип работы - было бы немного интереснее смотреть на код..
если бы через строчку - дописали обьяснение что где происходит, и ощий принцип работы - было бы немного интереснее смотреть на код..
Не компилируется:
ino:7:28: fatal error: RemoteReceiver.h: No such file or directory
если бы через строчку - дописали обьяснение что где происходит, и ощий принцип работы - было бы немного интереснее смотреть на код..
Не компилируется:
ino:7:28: fatal error: RemoteReceiver.h: No such file or directory
Также написал программу на app inventor для синхранизации с ардуино:https://yadi.sk/d/wNGGxOD8spPMW
автор скинул - типа разбирайтесь сами че я тут наваял....
автор скинул - типа разбирайтесь сами че я тут наваял....
Проект интересный, но автор пропал... на вопросы нет ответов...