11-03-2020, 21:54
Cześć, pracuje nad małym projektem alarmu sterowanego telefonem.
Alarm ma się składać z:
- Arduino uno
- SIM900A
- kontaktron na drzwiach
- przekaźnik SSR do źródła światła.
Założenie jest takie:
1. Po starcie systemu przychodzi sms z info o starcie.
2. Arduino czeka na polecenie włączenia alarmu.
3. Jak przyjdzie sms "ALARM ON" alarm ma się aktywować
4. Alarm jest aktywny i jak ktoś otworzy drzwi ma się zaświecić światło i przyjść sms o wejściu.
5. W międzyczasie jak alarm jest aktywny na sms "STATUS" przychodzi aktualny stan alarmu.
6. Można też zdalnie sms "ALARM OFF" dezaktywować alarm.
Trochę kodu już napisałem ale utknąłem.
Nie do końca wiem jak ogarnąć żeby w czasie aktywacji alarmu była możliwość odpytania statusu lub dezaktywacji alarmu. Jak wrzucę if w sekcje w której aktywuje alarm to z niej nie wyjdzie wiec nie będzie można dezaktywować alarm.
Nie wiem czy to dobrze wytłumaczyłem
Konstruktywna krytyka mile widziana
Dodatkowo myślałem jeszcze żeby można było sms sprawdzać zasięg (żeby przychodził w sms zwrotnym) wiem że jest komenda AT (AT+CSQ) ale nie wiem jak zrobić żeby po wysyłce sms "ZASIEG" zwracany był wynik na sms.
Tutaj moje dotychczasowe wypociny jak na razie wszytko działa:
Alarm ma się składać z:
- Arduino uno
- SIM900A
- kontaktron na drzwiach
- przekaźnik SSR do źródła światła.
Założenie jest takie:
1. Po starcie systemu przychodzi sms z info o starcie.
2. Arduino czeka na polecenie włączenia alarmu.
3. Jak przyjdzie sms "ALARM ON" alarm ma się aktywować
4. Alarm jest aktywny i jak ktoś otworzy drzwi ma się zaświecić światło i przyjść sms o wejściu.
5. W międzyczasie jak alarm jest aktywny na sms "STATUS" przychodzi aktualny stan alarmu.
6. Można też zdalnie sms "ALARM OFF" dezaktywować alarm.
Trochę kodu już napisałem ale utknąłem.
Nie do końca wiem jak ogarnąć żeby w czasie aktywacji alarmu była możliwość odpytania statusu lub dezaktywacji alarmu. Jak wrzucę if w sekcje w której aktywuje alarm to z niej nie wyjdzie wiec nie będzie można dezaktywować alarm.
Nie wiem czy to dobrze wytłumaczyłem
Konstruktywna krytyka mile widziana
Dodatkowo myślałem jeszcze żeby można było sms sprawdzać zasięg (żeby przychodził w sms zwrotnym) wiem że jest komenda AT (AT+CSQ) ale nie wiem jak zrobić żeby po wysyłce sms "ZASIEG" zwracany był wynik na sms.
Tutaj moje dotychczasowe wypociny jak na razie wszytko działa:
Kod:
#include <SoftwareSerial.h>
SoftwareSerial SIM900A(2,3); //piny na których jest podłączona komunikacja z modułem GSM
String textMessage; //deklaracja zmiennej do sms
String alarmState = "OFF"; //zmienna do przechowywania statusu alarmu
const int relay = 12; //do pinu 12 podpięty przekaźnik
String phone = "XXXXXXXXX"; //zmienna z numerem tel do powiadomień
void setup() {
pinMode(relay, OUTPUT); // ustawienie pinu 12 jako wyjście
digitalWrite(relay, LOW); // ustawienie poziomu niskiego
Serial.begin(9600);
while(!Serial);
SIM900A.begin(9600);
delay(5000);
sendSMS(phone,"START SYSTEMU");
}
void sendSMS(String phone, String message)
{
SIM900A.print("AT+CMGF=1\r\n"); // komenda AT do wysyłania SMS
delay(1000);
SIM900A.println("AT+CMGS=\"+48" + phone + "\"\r\n"); // numer telefonu w formacie +48xxxxxxxxx
delay(1000);
SIM900A.println(message); // wiadomość
delay(1000);
SIM900A.println((char)26); // komenda AT z końcem linii a ^Z, ASCII code 26
delay(1000);
SIM900A.println();
delay(100);
}
void loop(){
if(SIM900A.available()>0){
textMessage = SIM900A.readString();
Serial.print(textMessage);
delay(10);
}
if(textMessage.indexOf("ALARM ON")>=0){
digitalWrite(relay, HIGH);
alarmState = "ON";
Serial.println("ALARM AKTYWOWANY");
textMessage = "";
}
if(textMessage.indexOf("ALARM OFF")>=0){
digitalWrite(relay, LOW);
alarmState = "OFF";
Serial.println("ALARM DEZAKTYWOWANY");
textMessage = "";
}
if(textMessage.indexOf("STATUS")>=0){
String message = "ALARM JEST " + alarmState;
sendSMS(phone,message);
Serial.println("Status ALARMU");
textMessage = "";
}
}