Sterownik GSM
: 03 lis 2021, 20:27
Przekaźnik kontrolowany SMSem na module SIM800L i Arduino Nano
Układ zasilany napięciem 5 V z zasilacza o wydajności 1 A. Napięcie to zasila płytkę Arduino z mikrokontrolerem, a modem GSM zasilany jest napięciem 4,3 V. Większość modułów SIM800L dostępnych na rynku powinno działać bez problemu z napięciem 3,7 V, jednakże autor odkrył, że jego modem średnio działa z napięciami poniżej 4 V, stąd napięcie zasilania wynoszące 4,3 V.
Kod programu na Arduino jest bardzo prosty. Modem nie wymaga żadnych dedykowanych bibliotek, a komunikacja z nim odbywa się poprzez prosty interfejs szeregowy. Piny RX i TX skonfigurowane są jako programowy port szeregowy, poprzez który Arduino komunikuje się z modułem SIM800L. Jest to zabieg celowy, ponieważ umożliwia podsłuchiwanie tej transmisji w celu debuggowania kodu.
Program:
Po upewnieniu się, że wszystkie elementy połączone są poprawnie i wgraniu powyzszego programu do modułu Arduino można przystąpić do uruchamiania urządzenia. W pierwszej kolejności musimy włożyć do modemu kartę SIM. Po uruchomieniu w kilka sekund karta powinna zarejestrować się w sieci - modem zasygnalizuje to mrugając co kilka (2..3) sekund diodą LED. W tym momencie możemy nacisnąć przycisk reset, aby w pełni uruchomić układ.
Teraz wystarczy tylko wysłać SMSa na numer karty SIM. Po nadaniu SMSa o treści "ON" przekaźnik załączy się, a z kolei SMS o treści "OFF" wyłączy przekaźnik. Układ nie rozróżnia wielkich i małych liter. Przekaźnik podłączony może być do dowolnego urządzenia, jakim chcemy sterować. Pamiętajmy tylko, by nie przekraczać maksymalnego dopuszczalnego prądu i napięcia styków przekaźnika.
Wskazówki
* Karta SIM włożona musi być w slot tak, aby wystawała ściętym końcem, tak jak pokazano na zdjęciu * Moduł SIM800L potrzebuje napięcia zasilania od 3,4 V do 4,4 V i prądu od 1 do 2 A. W module nie ma ani zintegrowanego stabilizatora napięcia, ani układu translacji poziomów sygnałów - te elementy musimy dobudować samodzielnie.
* Zasilacz musi mieć odpowiednią wydajność prądową. Jeśli napięcie nadmiernie spadnie, modem może niespodziewanie się wyłączyć lub zresetować podczas pracy.
* Jeśli coś nie działa w przedstawionym systemie, dobrze jest wykonać twardy reset systemu.
* Kod programu, jakkolwiek działający, wymagać może kilku poprawek itp., więc dobrze jest go prześledzić krok po kroku i ewentualnie wprowadzić własne modyfikacje. Autor (link poniżej) chętnie się dowie, jeśli popełnił w programie jakieś błędy.
Kod programu na Arduino jest bardzo prosty. Modem nie wymaga żadnych dedykowanych bibliotek, a komunikacja z nim odbywa się poprzez prosty interfejs szeregowy. Piny RX i TX skonfigurowane są jako programowy port szeregowy, poprzez który Arduino komunikuje się z modułem SIM800L. Jest to zabieg celowy, ponieważ umożliwia podsłuchiwanie tej transmisji w celu debuggowania kodu.
Program:
Kod: Zaznacz cały
*
* SIM800L SMS RELAY v1.0
* Arduino Hardware (Author): Nano V3 (ATmega328)
* Arduino IDE (Author): 1.6.9
* T.K.Hareendran/2018
*/
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10,11); // (Rx,Tx > Tx,Rx)
char incomingByte;
String inputString;
int relay = 13; // Wyjście do sterowania przekaźnikiem
void setup()
{
pinMode(relay, OUTPUT);
digitalWrite(relay, LOW); // Stan wyjścia przekaźnikowego po uruchomieniu układu
Serial.begin(9600);
mySerial.begin(9600);
while(!mySerial.available()){
mySerial.println("AT");
delay(1000);
Serial.println("Connecting...");
}
Serial.println("Connected!");
mySerial.println("AT+CMGF=1"); //Ustawiamy SMSy w tryb tekstowy
delay(1000);
mySerial.println("AT+CNMI=1,2,0,0,0"); //Procedura, która obsługuje nadchodzące wiadomości
delay(1000);
mySerial.println("AT+CMGL=\"REC UNREAD\""); // Komdenda odczytu nowych wiadomości
}
void loop()
{
if(mySerial.available()){
delay(100);
// Serial Buffer
while(mySerial.available()){
incomingByte = mySerial.read();
inputString += incomingByte;
}
delay(10);
Serial.println(inputString);
inputString.toUpperCase(); // Zmiana wszystkich liter na wielkie w odebranej wiadomości
//turn RELAY ON or OFF
if (inputString.indexOf("ON") > -1){
digitalWrite(relay, HIGH);
}
if (inputString.indexOf("OFF") > -1){
digitalWrite(relay, LOW);
}
delay(50);
// Tutaj kasujemy wiadomości w modemie, aby oszczędzać pamięć
if (inputString.indexOf("OK") == -1){
mySerial.println("AT+CMGDA=\"DEL ALL\"");
delay(1000);}
inputString = "";
}
}
Teraz wystarczy tylko wysłać SMSa na numer karty SIM. Po nadaniu SMSa o treści "ON" przekaźnik załączy się, a z kolei SMS o treści "OFF" wyłączy przekaźnik. Układ nie rozróżnia wielkich i małych liter. Przekaźnik podłączony może być do dowolnego urządzenia, jakim chcemy sterować. Pamiętajmy tylko, by nie przekraczać maksymalnego dopuszczalnego prądu i napięcia styków przekaźnika.
Wskazówki
* Karta SIM włożona musi być w slot tak, aby wystawała ściętym końcem, tak jak pokazano na zdjęciu * Moduł SIM800L potrzebuje napięcia zasilania od 3,4 V do 4,4 V i prądu od 1 do 2 A. W module nie ma ani zintegrowanego stabilizatora napięcia, ani układu translacji poziomów sygnałów - te elementy musimy dobudować samodzielnie.
* Zasilacz musi mieć odpowiednią wydajność prądową. Jeśli napięcie nadmiernie spadnie, modem może niespodziewanie się wyłączyć lub zresetować podczas pracy.
* Jeśli coś nie działa w przedstawionym systemie, dobrze jest wykonać twardy reset systemu.
* Kod programu, jakkolwiek działający, wymagać może kilku poprawek itp., więc dobrze jest go prześledzić krok po kroku i ewentualnie wprowadzić własne modyfikacje. Autor (link poniżej) chętnie się dowie, jeśli popełnił w programie jakieś błędy.