Arduino GSM Shield obsahuje GSM modul SIM900. Tento populární obvod od firmy Simcom nám umožňuje vytvořit z Arduina vlastní mobilní telefon. Můžeme tedy pomocí Arduina volat na různá telefonní čísla, zároveň i hovory přijímat a to samé se SMS zprávami. Dále je možné se pomocí GPRS připojit na Internet, avšak tato funkce není součástí tohoto návodu. Díky podpoře Quad-Band (850/900/1800/1900 MHz) je možné používat modul téměř po celém světě. Komunikace s Arduinem probíhá přes sériovou linku pomocí AT příkazů.
Pro úspěšné propojení GSM Shieldu s Arduinem tedy stačí vespod GSM shieldu vložit SIM kartu (je nutné odstranit zadávání PINu) a do desky Arduino Uno (či jiné kompatibilní) zapojit Shield. Na některých Shieldech lze pomocí propojek nastavit ručně piny TX a RX pro komunikaci se senzorem, u novějších jsou to pak většinou piny 7 a 8. A jako třetí je použit pin 9 pro zapínání napájení pro GSM modul.
Pokud byste chtěli využít GSM shield na jiných deskách, tak na deskách Mega a Mega 2560 je možné pro pin RX využít pouze tyto piny: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69). A na deskách Leonardo a Micro lze pro pin RX využít tyto piny: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
Pro správnou funkci uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu GPRS_SIM900, návod jak na to je uveden zde. Ukázkový kód obsahuje na svém začátku připojení potřebných knihoven a poté nastavení propojovacích pinů a rychlosti komunikace se SIM modulem. Jako další jsou vytvořeny proměnné jako detekované číslo, se kterým budeme ovládat modul, a proměnné pro práci se SMS zprávami. Následně provedeme inicializaci modulu SIM900 z knihovny. V podprogramu setup zahájíme komunikaci po sériové lince pro výpis ladících informací a následně provedeme kontrolu napájení pro SIM modul. Pokud je modul vypnutý, provedeme jeho zapnutí a poté vyčkáme ve smyčce while na kompletní inicializaci modulu. Pokud by se nedařilo navázat spojení se SIM modulem, budeme dostávat každou vteřinu informaci o chybě inicializace. Po úspěšné inicializaci se posuneme do hlavní smyčky loop, kde jako první načteme aktuální čas od spuštění napájení a převedeme si ho na textový tvar, který je poté použit při odesílání SMS odezvy. Následují ukázky různých funkcí modulu SIM900. Jako první je uvedena ukázka načtení počtu nepřečtených zpráv a v případě existence alespoň jedné nepřečtené zprávy si nejprve do proměnných načteme všechny informace, následně zprávu smažeme a vytiskneme po sériové lince všechny dostupné informace. Poté proběhne kontrola, jestli zpráva přišla od našeho nastaveného čísla a v případě že ano, tak jestli obsahuje očekávaný text „Ahoj“ nebo „Zavolej“. Pokud jsou obě podmínky splněny, vypíšeme hlášku o přijaté zprávě, u zprávy „Zavolej“ také zavoláme na nastavené číslo. V opačném případě si vypíšeme chybovou hlášku. Druhá ukázka funkce modulu SIM900 souvisí s detekcí telefonátu. Pokud je tedy splněna if podmínka o příchozím hovoru, vytiskneme si po sériové lince číslo volajícího a následně po jedné sekundě zavěsíme. Poté zkontrolujeme, jestli se číslo volaného shoduje s naším nastaveným a pokud tato podmínka platí, načteme si v našem příkladu hodnotu z analogového portu A0 a vytvoříme odpověď obsahující čas od spuštění a naměřenou hodnotu z portu A0. Následně ji převedeme na formát vhodný pro SIM modul a odešleme na uložené telefonní číslo. Pokud by byl detekován hovor od cizího čísla, dostaneme o tomto pouze informaci po sériové lince. Na konci programu se nachází už jen krátká pauza před novým během smyčky loop.
// SIM 900 GSM Shield
// připojení potřebných knihoven
#include <GPRS_Shield_Arduino.h>
#include <SoftwareSerial.h>
// nastavení propojovacích pinů a rychlosti
// komunikace se SIM modulem,
// novější Shieldy používají pro
// komunikaci TX a RX piny 7 a 8
#define pinTX 2
#define pinRX 3
#define pinPower 9
#define rychlostSim 9600
// vytvoření proměnné s detekovaným číslem
char mojeCislo[16] = "+420721******";
// vytvoření proměnných pro práci s SMS
#define delkaZpravy 160
char smsZprava[delkaZpravy];
int smsIndex = 0;
char telCislo[16];
char casDatum[24];
// inicializace SIM900 modulu z knihovny
GPRS sim900(pinTX, pinRX, rychlostSim);
void setup() {
// zahájení komunikace po sériové lince
Serial.begin(9600);
// kontrola napájení modulu SIM900,
// v případě vypnutého modulu ho zapneme
if(!sim900.checkPowerUp()) {
sim900.powerUpDown(pinPower);
}
// vyčkávací smyčka, dokud není správně nainicializován
// SIM modul
while(!sim900.init()) {
Serial.println("Chyba inicializace!");
delay(1000);
}
delay(2000);
Serial.println("Inicializace uspesna!");
}
void loop() {
// načtení a přepočet času od spuštění Arduina
// do tvaru 1h2m3s
long cas = millis()/1000;
long casSekundy = cas % 60;
long casMinuty = (cas / 60) % 60;
long casHodiny = cas / 3600;
String casKomplet = String(casHodiny);
casKomplet += "h";
casKomplet += String(casMinuty);
casKomplet += "m";
casKomplet += String(casSekundy);
casKomplet += "s";
// kontrola SMS zpráv - načtení počtu nepřečtených zpráv
smsIndex = sim900.isSMSunread();
// pokud existuje alespoň jedna nepřečtená zpráva,
// provedeme její přečtení a detekci textu
if (smsIndex > 0) {
// načtení SMS zprávy do proměnných ve funkci
sim900.readSMS(smsIndex, smsZprava, delkaZpravy, telCislo, casDatum);
// vymazání aktuálně přečtené zprávy
sim900.deleteSMS(smsIndex);
// vytištění informací o přijaté SMS zprávě
Serial.print("Od cisla: ");
Serial.println(telCislo);
Serial.print("Datum a cas: ");
Serial.println(casDatum);
Serial.print("Zprava: ");
Serial.println(smsZprava);
// kontrola přijetí SMS zprávy od našeho nastaveného čísla
// strcmp porovná 2 stringy a nula znamená počet odlišných znaků
if (strcmp(telCislo, mojeCislo)==0) {
// proměnná s detekovaným textem v SMS zprávě
char mojeZprava1[delkaZpravy] = "Ahoj";
char mojeZprava2[delkaZpravy] = "Zavolej";
// kontrola přijetí detekovaného textu
if (strcmp(smsZprava, mojeZprava1)==0) {
Serial.println("Prijata zprava Ahoj!");
}
else if (strcmp(smsZprava, mojeZprava2)==0) {
Serial.println("Prijata zprava Zavolej, tak volam!");
sim900.callUp(mojeCislo);
}
else {
Serial.println("Prijata neznama zprava.");
}
}
else {
Serial.println("Prijata neznama zprava od neznameho cisla.");
}
}
// kontrola příchozího hovoru s uložením čísla do proměnné
if(sim900.isCallActive(telCislo)) {
// vytištění informací o příchozím hovoru
Serial.print("Vola cislo: ");
Serial.println(telCislo);
// pauza po dobu 1 sekundy a následné zavěšení hovoru
delay(1000);
sim900.hangup();
// kontrola hovoru od našeho nastaveného čísla
if (strcmp(telCislo, mojeCislo)==0) {
// vytištění informace o poslání zprávy
Serial.println("Zname cislo, odeslana SMS.");
// načtení hodnoty analogového pinu
// do proměnné typu String
String analog = String(analogRead(A0));
// složení celé zprávy do proměnné odpoved
String odpoved = "Cas od spusteni: ";
odpoved += casKomplet;
odpoved += " vterin. A0: ";
odpoved += analog;
// převedení textu na proměnnou kompatibilní se SIM modulem
odpoved.toCharArray(smsZprava, 160);
// poslání SMS zprávy na nastavené číslo
sim900.sendSMS(telCislo, smsZprava);
}
else {
// vytištění informací o volání neznámého čísla
Serial.println("Nezname cislo - bez odezvy.");
Serial.print("Ulozene : ");
Serial.println(mojeCislo);
Serial.print("Volajici: ");
Serial.println(telCislo);
}
}
// krátká pauza před novou komunikací se SIM modulem
delay(10);
}
Po nahrání ukázkového kódu do Arduino desky s připojeným GSM Shieldem dostaneme například tento výsledek:
Arduino GSM Shield s modulem SIM900 je velice šikovný komunikační doplněk, který nám umožňuje doplnit Arduino o funkce mobilního telefonu. Můžeme ho pak využívat pro dálkovou kontrolu a ovládání různých zařízení, kdy může reagovat jak na příchozí nastavovací zprávy, tak jen na jednoduché prozvonění. A to vše samozřejmě jen u povolených telefonních čísel.
Motorizovaný kulový ventil. Má široké uplatnění v různých průmyslových a obytných instalacích. Může být integrován do automatických systémů řízení, kde je možné ovládat průtok dálkově nebo automatizovaně podle předem nastavených podmínek.
Motorizované kulové vently s obvodem CR01, CR02, CR03 nebo CR04 je poměrně jednoduché po elektrické stránce správně zapojit. U ventilu s obvodem CR05 je tomu ale trochu jinak - ventil si sám nehlídá krajní polohy otevření, nebo zavření. Z toho důvodu vznikl tento článek, ukazující některé výhody, použití a především správné zapojení ventilu s obvodem CR05.