Arduino schéma - arduino.sk

GSM_Alarm

Kompletné projekty s návodom a zdrojovým kódom
Príspevky: 21
Registrovaný: Pon 11. Feb 2013 12:57:54

GSM_Alarm

Poslaťod Korko » Sob 28. Dec 2013 20:23:44

Zdar pani. Podarilo sa mi po 1000 pokusoch (C++ mi nic nehovori) po hodinach citania roznych for, konecne zostrojit jednoduchy GSM Alarm . Alarm kontroluje PIR cidla zapojene paralelne - rozpinacia logika, a dverove kontakty zapojene do serie. Pri polachu telefonuje x-krat na y-tel. cisel. Zaroven cez odporovy delic kntroluje stav napajania (12V autobateria). Pri poklese odosle SMS. Kod bude pre vas asi smiesne zlozity,ale je to pojazdne. Ako modem je pouzity SIEMENS C35. Pokusim sa postupom casu prilozit foto, schemu zapojenia a kod. Rad si potom vypocujem kritiku na program.
Majte sa.


#include <SoftwareSerial.h> // zahrn kniznicu
#define rxPin 10
#define txPin 12
SoftwareSerial phone = SoftwareSerial(rxPin, txPin);
int pir;
int sercidlo;
int tlacitko;
int led=LOW;
int alstav=LOW;
int relesp=LOW;
int relesir=LOW;
int a; // premenna pre ignoraciu alarmu
int b; // premenna pre dverovy alarm
int c; // premenna pre SMS baterka
int d; // autoblok
int e; // autoblok
int f; // sms baterka
int batPin=A1;
int batVolt=1000;

void setup ()
{
word a=1;
word b=1;
word c=1;
word d=1;
word e=1;
word f=1;
pinMode (4, OUTPUT); //Led
pinMode (2, INPUT); // Tlacitko
pinMode (8,OUTPUT); // Reproduktor
pinMode (5,INPUT); // pir
pinMode (7,INPUT); // seriove cidlo
pinMode (1,OUTPUT);//rele spinac
pinMode (11,OUTPUT);//rele 12V
digitalWrite (1,relesp);
digitalWrite (11,relesir);
digitalWrite (4,led);
}

void loop ()
{
start:
if (a==1) phone.begin(19200);
tlacitko=digitalRead (2);
if (tlacitko==HIGH) a=1,b=1,c=1,d=1,e=1,f=1;
if (alstav==HIGH) alarmakt();
if (tlacitko==HIGH) goto alarmstav;
pir=digitalRead (5);
sercidlo=digitalRead (7);
if (alstav==LOW && pir==HIGH && sercidlo == HIGH) autoblok ();
goto start;
alarmstav:
tlacitko=digitalRead(2); //aktivacia alarmu s kontrolou ci je tlacitko drzane
if (tlacitko==HIGH) led=HIGH;
digitalWrite (4,led);
delay (2500);
tlacitko=digitalRead(2);
if (tlacitko==LOW) led=LOW;
digitalWrite (4,led);
if (tlacitko==LOW) goto start;
alstav=!alstav;
if (alstav== HIGH) tone (8,1000,1000);
delay (5000);
if (alstav== HIGH) tone (8,1000,1000);
delay (5000);
if (alstav== HIGH) tone (8,1000,1000);
delay (4000);
if (alstav== HIGH) tone (8,1000,1000);
delay (4000);
if (alstav== HIGH) tone (8,1000,600);
delay (3000);
if (alstav== HIGH) tone (8,1000,600);
delay (3000);
if (alstav== HIGH) tone (8,1000,600);
delay (2000);
if (alstav== HIGH) tone (8,1000,600);
delay (2000);
if (alstav== HIGH) tone (8,1000,400);
delay (1500);
if (alstav== HIGH) tone (8,1000,400);
delay (1500);
if (alstav== HIGH) tone (8,1000,400);
delay (1000);
if (alstav== HIGH) tone (8,1000,200);
delay (1000);
if (alstav== HIGH) tone (8,1000,2000);
goto start;

}

void alarmakt ()
{
startalakt:
batVolt=analogRead (batPin);
delay(500);
if(batVolt<=555) f=f+1;
if (f==10) batlow();// 0-1023 analog jednotiek = 0-5V 11,0V aktiv 2,73V na 3K3 odpore
pir=digitalRead (5);
sercidlo=digitalRead (7);
tlacitko=digitalRead(2);
if (pir==LOW) alpohyb();
if (sercidlo==LOW) aldvere();
if (tlacitko==HIGH) delay (2000),tlacitko=LOW;
tlacitko=digitalRead(2);
if (tlacitko==HIGH) alstav=LOW; // deaktivacia alarmu
if (alstav==LOW) goto alaktkon;
goto startalakt;
alaktkon:
tone (8,1000,3000);
digitalWrite (4,LOW);
digitalWrite (1,HIGH); //rele svetlo
delay (30000);
digitalWrite (1,LOW);
}


void alpohyb ()
{
if (alstav==LOW) goto kon;

if (a>=2) goto kon;
a=a+1;
digitalWrite(1,HIGH);
tone (8,1000);
phone.println("atd 0905215294;");
delay (20000);
noTone(8);
phone.println("ath");
digitalWrite(11,HIGH);
delay (5000);
phone.println("atd 0903696953;");
delay (20000);
phone.println("ath");
delay (5000);
phone.println("atd 0915342616;");
delay (20000);
phone.println("ath");
delay (5000);
phone.println("atd 0902102839;");
delay (20000);
phone.println("ath");
delay (5000);
digitalWrite(11,LOW);
digitalWrite(1,LOW);
c=2;
kon:
phone.flush();
phone.end();
blik: // blikanie led - info o stave, kym sa nestlaci tlacitko.
tlacitko=digitalRead(2);
if (alstav==HIGH && tlacitko==LOW) digitalWrite(4,HIGH),delay(1000);
if (alstav==HIGH && tlacitko==LOW) digitalWrite(4,LOW),delay(1000);
if (alstav==HIGH && tlacitko==LOW) goto blik;
if (alstav==HIGH && tlacitko==HIGH) alstav=LOW,digitalWrite(4,LOW),tone(8,1000,1000),tlacitko=LOW;

}

void aldvere ()
{
if (alstav==LOW) goto koniec;
if (a>=2) goto koniec;
digitalWrite (1,HIGH);
a=a+1;
tone(8,1000);
zaciatok:
b=b+1;

if (b==4) goto koniec;
phone.println("atd 0905215294;");
//delay (25000);
// phone.println("ath");
delay (8000);
tlacitko=digitalRead(2);
if (tlacitko==HIGH && b==2) noTone(8);
if (tlacitko==HIGH && b==2) alstav=LOW;
if (tlacitko==HIGH && b==2) led=LOW,digitalWrite(4,LOW);
if (tlacitko==HIGH && b==2) delay(12000);
if (tlacitko==HIGH && b==2) phone.println("ath");
digitalWrite (4,led);
if (alstav==LOW) goto koniec;
delay (12000);
noTone(8);
if (b==2) digitalWrite(11,HIGH);
phone.println("ath");
delay (3000);
phone.println("atd 0915342616;");
delay (20000);
phone.println("ath");
delay (3000);
phone.println("atd 0902102839;");
delay (20000);
phone.println("ath");
delay (3000);
phone.println("atd 0903696953;");
delay (20000);
phone.println("ath");
delay (3000);
if (b==2) digitalWrite (11,LOW),digitalWrite(1,LOW);
if (alstav==LOW) goto koniec;

goto zaciatok;
koniec:
phone.flush();
phone.end();
c=2;
blik:
tlacitko=digitalRead(2);
if (alstav==HIGH && tlacitko==LOW) digitalWrite(4,HIGH),delay(1000);
if (alstav==HIGH && tlacitko==LOW) digitalWrite(4,LOW),delay(1000);
if (alstav==HIGH && tlacitko==LOW) goto blik;
if (alstav==HIGH && tlacitko==HIGH) alstav=LOW,digitalWrite(4,LOW),tone(8,1000,1000),tlacitko=LOW;
}

void batlow ()
{
if (c==2)goto konsms;
c=2;
phone.println("AT+CMGF=0");
delay(3000);
phone.println("AT+CMGS=16");//at+cmgs rovno odosle AT+CMGW=17

delay(2000);

phone.print("0011000A929050855940004AA03426174"); //0011000C912491501224820004AA03626174

phone.write(0x1A); // Ctrl+Z

phone.write(0x0D); //CR

phone.write(0x0A); //LF
delay (1000);
konsms:
phone.flush();
}

void autoblok ()
{
stautoblok:
if (alstav==HIGH) goto konautoblok;
pir=digitalRead (5);
sercidlo=digitalRead (7);
tlacitko=digitalRead (2);
if (alstav==LOW && pir==HIGH && sercidlo == HIGH) delay (1000),d=d+1;
if (alstav==LOW && pir==LOW) d=1,e=1;
if (alstav==LOW && sercidlo==LOW) d=1,e=1;
if (d==1500) tone(8,1000,3000),d=1,e=e+1;
if (tlacitko==HIGH) delay (2000),tlacitko=LOW;
tlacitko=digitalRead (2);
if (tlacitko==HIGH) d=1,e=1,tone(8,1700,1000);
if (tlacitko==HIGH) goto konautoblok;
if (e==4 && alstav==LOW && pir==HIGH && sercidlo == HIGH) alstav=HIGH,a=1,b=1,c=1,d=1,e=1,f=1, digitalWrite (4,HIGH),tone (8,1000,5000);
goto stautoblok;
konautoblok:
tlacitko=digitalRead(2);
}
Naposledy upravil Korko dňa Str 29. Apr 2015 8:44:22, celkovo upravené 2

Obrázok užívateľa
Príspevky: 300
Registrovaný: Pon 19. Nov 2012 12:01:08
Bydlisko: HC/BA

Re: GSM_Alarm

Poslaťod tomXX » Uto 31. Dec 2013 12:54:53

Ahoj, je fajn že to funguje, gratulujem :) Trochu mi nesedí vetvenie programu s použitím "goto", to je taký pozostatok z Basicu, ale budiž. No a pokiaľ je toto jednoúčelové zariadnie (a to zjavne je), tak nevadí ani použitie "delay" v takom množstve a situáciách. Totižto ak sa vykoná príkaz "delay" tak program reálne nič nerobí po celý čas, takže prípadne nezachytí ďalšie narušenie, alebo by nebol schopný napr. aktualizovať info na displeji a podobne.

PS: dúfam že si tu v kóde neuviedol svoje tel. čísla :)
blog.sitepoint.sk - zaujímavé riešenia okolo Arduina

Príspevky: 21
Registrovaný: Pon 11. Feb 2013 12:57:54

Re: GSM_Alarm

Poslaťod Korko » Str 01. Jan 2014 0:27:14

Dik za reakciu.
Cisla su pozmenene jednou cislicou. Co sa Basicu tyka , trafil si klinec po hlavicke - mal som Didaktik M ,ale ziadnu hru -tak mi ostalo jedine Basicovanie. O Delay viem ze stopne vsetko, ale kontrola cidiel a 1. telefonovanie ide pred Delay, teda mi to az tak neprekaza. Mam ale rozrobeny este taky zberac hraciek po synovi. - krokovy motor a tri serva. Je to ovladane cez dialkove z telky. Tam uz je delay dost problem .
V pauzach medzi krokmi motora a servami nejde ovládanie. teda niekedy sa dost nastukam kym to zastavim.

Príspevky: 174
Registrovaný: Ned 16. Mar 2014 23:22:00

Re: GSM_Alarm

Poslaťod posjirka » Uto 12. Aug 2014 22:15:41

Ahoj. Kolega chce spachat neco podobneho tak aspon bude mit inspiraci. Jen pri zbeznem pohledu mas chybku na vykrese v kvadrantu A1-B1. Podle me mas prehozene odpory 3k3 a 10k. Jinak by ti slo na A1 atmegy 10V coz je zarucena smrt svabu. Jinak jsem rad ze lidova tvorivost stale funguje.

Príspevky: 21
Registrovaný: Pon 11. Feb 2013 12:57:54

Re: GSM_Alarm

Poslaťod Korko » Štv 21. Aug 2014 11:18:33

Vdaka za postreh, nevsimol som si to pri kresleni schémy.

Späť na Hotové projekty