Estou tentando implementar um sistema de automação residencial, eu mando SMS e ele aciona alguns reles e caso o sensor de chama retorne um valor maior que 4,9, ele deve ligar para meu telefone.

 

Consegui um código para mandar os SMS e acionar relé, e fiz um para me ligar caso o sensor detectasse mais de 4,9. Individualmente eles funcionam muito bem, mas não consigo fazer com que funcionem em conjunto.

 

Tenho duas semanas para entregar esse projeto, preciso muito de ajuda!

As mensagens que eu mando para acionar os relés ficam no seguinte formato:

#a1b1c1d1 (todos ON)
#a1b0c1d0 ("a" e "c" ON; "b" e "d" OFF)
#a0b0c0d0 (todos OFF)

 

Seguem os códigos separados:

 

- Sensor de Chamas:

 

#include <SoftwareSerial.h>
SoftwareSerial cell(2,3);
void setup()
{
cell.begin(9600);
delay(25000);
Serial.begin(9600);

}
void loop()
{
int sensorValue = analogRead(A0);

float voltage = sensorValue*(5.0/1023.0);

Serial.println(voltage);

delay(100);

if (voltage > 4.9)
{
cell.println("ATDXXXXXXX"); //número do telefone
}

}

 - SMS acionando relés (no caso LEDs, mas tanto faz):

#include <SoftwareSerial.h>
char inchar; //Will hold the incoming character from the Serial Port.
SoftwareSerial cell(2,3); //Create a 'fake' serial port. Pin 2 is the Rx pin, pin 3 is the Tx pin.

int led1 = 9;
int led2 = 10;
int led3 = 11;
int led4 = 12;

void setup()
{
// prepare the digital output pins
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
//Initialize GSM module serial port for communication.
cell.begin(9600);
delay(30000); // give time for GSM module to register on network etc.
cell.println("AT+CMGF=1"); // set SMS mode to text
delay(200);
cell.println("AT+CNMI=3,3,0,0"); // set module to send SMS data to serial out upon receipt
delay(200);
}

void loop()
{
//If a character comes in from the cellular module...
if(cell.available() >0)
{
inchar=cell.read();
if (inchar=='#')
{
delay(10);
inchar=cell.read();
if (inchar=='a')
{
delay(10);
inchar=cell.read();
if (inchar=='0')
{
digitalWrite(led1, LOW);
}
else if (inchar=='1')
{
digitalWrite(led1, HIGH);
}
delay(10);
inchar=cell.read();
if (inchar=='b')
{
inchar=cell.read();
if (inchar=='0')
{
digitalWrite(led2, LOW);
}
else if (inchar=='1')
{
digitalWrite(led2, HIGH);
}
delay(10);
inchar=cell.read();
if (inchar=='c')
{
inchar=cell.read();
if (inchar=='0')
{
digitalWrite(led3, LOW);
}
else if (inchar=='1')
{
digitalWrite(led3, HIGH);
}
delay(10);
inchar=cell.read();
if (inchar=='d')
{
delay(10);
inchar=cell.read();
if (inchar=='0')
{
digitalWrite(led4, LOW);
}
else if (inchar=='1')
{
digitalWrite(led4, HIGH);
}
delay(10);
}
}
cell.println("AT+CMGD=1,4"); // delete all SMS
}
}
}
}
}

Exibições: 538

Responder esta

Respostas a este tópico

Eu também tenho um projecto semelhante que ainda não tive paciência para acabar.

Deverá usar um programa para estudar a troca de caracteres ASCII. Por vezes é necessário fazer "Echo off" do módulo GSM  para que este não devolva uma string indesejada com caracteres CR e LF. Um bom programa terminal poderá ser o Tera Term.

Infelizmente não sei como unir estes dois comandos. Outra coisa, você sabe como fazer para solicitar ao Shield (via sms) o valor atual de um sensor para que ele retorne este valor via sms?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço