Nejaký čas som v práci testoval otváranie brány pomocou volania na SIM kartu. V podstate ide o to, že každá brána má prijímač rádiových vĺn a na základe kódu z diaľkového ovládania sa brána otvorí alebo zatvorí. Počas testovania som vyskúšal aj ovládanie pomocou sms, nielen pomocou volania. Celé testovanie dopadlo na výbornú, preto som sa rozhodol podeliť sa o riešenie s Vami. Najlepšie na tom je to, že takýmto spôsobom môžete ovládať nielen bránu, ale aj mnoho iného, napríklad garážové dvere, zapínať svetlo, zavlažovanie trávnika a podobne.
Použitý materiál
Všetok potrebný materiál som zakúpil na ebay. Ide o Arduino Uno, gsm shield SIM800L, relé, nejaké prepojovacie vodiče a samozrejme potrebný zdroj. Nakoľko gsm shield je napájaný 5V a pri registrácii a prijímaní hovorov/sms potrebuje až do 2A, nie je vhodné ho napájať priamo z arduina. Ja som týmto zdrojom napájal ako shield, tak aj arduino. A samozrejme, nevyhnutnosťou je aj sim karta, najlepšie s predplateným kreditom, prípadne bez záväzkov.
Schéma a knižnice na stiahnutie
Schéma zapojenia nie je zložitá. Nedá sa tam pomýliť, všetko je pekne značené. Relé odporúčam použiť kúpený modul s optocouplerom, prípadne ak si viete vyrobiť sami, tak určite odporúčam opto-coupler. Ide o to, že pri spínaní relé môže vznikať spätná väzba a arduino bude resetované. To je nežiadúce.
Pre správnu funkčnosť budete potrebovať aj nasledovné knižnice, ktoré si stiahnete a pridáte medzi knižnice softwaru Arduino IDE. GPRS_Shield_Arduino, SoftwareSerial, Wire a ArduinotechGSMShield. Tieto knižnice sú prevzaté zo stránky GitHub, kde nájdete množstvo zaujímavých a potrebných knižníc ako aj mnoho iného.
Ovládanie arduina pomocou SMS
Jednoduchou, trebárs aj prázdnou SMS sa dá dosiahnuť to, čo chceme. V mojom prípade išlo o otváranie a zatváranie brány. Výhoda tohto programu je tá, že nie každý dokáže bránu pomocou sms ovládať, nakoľko je tam zahrnutá aj autorizácia SMS. Teda pokiaľ číslo nie je zadané v programe, tak brána sa neotvorí a na sériovom porte vidíte iba Neautorizovaná SMS.
Pri troche fantázie by sa dal program určite rozšíriť na viac čísiel, prípadne pomocou rôzneho textu SMS správy ovládať rôzne výstupy arduina. Takže to je len na Vás a Vašej fantázii.
#include
#include
#include
#define PIN_TX 7
#define PIN_RX 8
#define BAUDRATE 9600
#define MESSAGE_LENGTH 160
char message[MESSAGE_LENGTH];
int messageIndex = 0;
int rele=12;
char phone[16];
char datetime[24];
GPRS gprsTest(PIN_TX,PIN_RX,BAUDRATE);//RX,TX,PWR,BaudRate
void setup() {
pinMode (rele,OUTPUT);
Serial.begin(9600);
while(!gprsTest.init()) {
Serial.print(“Chyba inicializácie”);
delay(1000);
}
delay(3000);
Serial.println(“Inicializácia úspešná”);
}
void loop() {
messageIndex = gprsTest.isSMSunread();
if (messageIndex > 0) {
gprsTest.readSMS(messageIndex, message, MESSAGE_LENGTH, phone, datetime);
gprsTest.deleteSMS(messageIndex);
Serial.print(“Od čísla: “);
Serial.println(phone);
Serial.print(“V čase: “);
Serial.println(datetime);
Serial.print(“Prijatá správa: “);
Serial.println(message);
if (strcmp(phone, “+421905123456”) == 0) {
Serial.print(“Autorizovaná SMS od XXX”); //XXX nahradte svojim menom
digitalWrite (rele,HIGH);
delay(500);
digitalWrite (rele,LOW);
}
else Serial.print(“Neautorizovaná SMS”);
}
}
Ovládanie arduina pomocou volania
Pokiaľ Vám nevyhovuje ovládanie brány pomocou SMS, tak v tomto príklade vidíte spôsob, akým sa dá arduino ovládať pomocou hovoru. Taktiež arduino reaguje iba na autorizované čísla kvôli bezpečnosti. Tu som zahrnul aj 30 sekundovú pauzu po autorizácii, to z dôvodu, aby sa brána stihla bezpečne otvoriť/zatvoriť. Cyklus brány v mojom prípade je 28 sekúnd, čiže 30 sekundová pauza je dostatočná. Taktiež sa dá doplniť viac čísiel, stačí nakopírovať konkrétne riadky podmienky if, pričom dokonca každé číslo môžete nastaviť na ovládanie iného výstupu arduina. Taktiež ako v prípade SMS ovládania, fantázii sa medze nekladú
#include
#include
#define LED 13
#define RELE1 12
AGS modul(1);
uint8_t infoStatus;
String number;
void setup()
{
pinMode(RELE1,OUTPUT);
digitalWrite(RELE1,LOW);
pinMode(LED,OUTPUT);
digitalWrite(LED,HIGH);
modul.begin();
}
void loop()
{
infoStatus = modul.checkCallAndSMS();
if (infoStatus == 1)
{
number = modul.getNumber();
Serial.println(“Call from:” + number);
modul.callEnd();
if (number == “421905123456”) //cislo zmente za Vase
{
digitalWrite(RELE1,HIGH);
digitalWrite(LED,LOW);
delay(1000);
digitalWrite(RELE1,LOW);
digitalWrite(LED,HIGH);
delay(30000); //dolezita pauza, prisposobte podla svojej potreby – pre bezpecne otvorenie alebo zatvorenie brany
}
else modul.callEnd();
}
delay(1000);
}
Pevne verím, že Vám tento článok pomôže k tomu, aby ste úspešne ovládali Vaše zariadenia pomocou telefónu na diaľku. Ja keď som toto riešenie staval, tak som to nenašiel nikde takto komplexne popísané a otestované, až na pár výnimiek, ale vždy to chcelo trochu úprav. Obe tieto riešenia sú otestované a fungujú bezchybne. Ďakujem za prečítanie článku a prajem Vám úspešné postavenie projektu, ako sa to podarilo aj mne.
Marek Duda