Сигнализация с отправкой 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
автор скинул - типа разбирайтесь сами че я тут наваял....
автор скинул - типа разбирайтесь сами че я тут наваял....
Проект интересный, но автор пропал... на вопросы нет ответов...