Arduino Uno Ve Gsm Shield İle Isı Kontrol Sistemi

Merhaba arkadaşlar. Arduino Uno ve Gsm Shield ile bir odanın sıcaklığını kontrol edecek sistem tasarlamaya çalışıyorum . Programda benim telefondan gönderdiğim derece komutlarını yorumlayarak LM35’ den gelen sıcaklık değeri ile karşılaştırıp o anki sıcaklığa göre odanın sıcaklığını arttırıp yada azaltan programı yazmaya çalışıyorum. Yani Şöyle "Oda sıcaklığını 25 C yap! "gibi telefondan mesaj yollayacağım. Sensörden ölçülen sıcaklık 28 derece ise fan çalışacak. Tek sorun benim gönderdiğim mesajın içindeki string ve sayıları ayırt edip nasıl çıkış sunacak ? Yardım ederseniz sevinirim. #include <gsm.h>
define PINNUMBER “”//simde pin varsa buraya yazın
const int fan = 4;

GSM gsmAccess;
GSM_SMS sms;

char senderNumber[20];

void setup() {
Serial.begin(9600);
while (!Serial) {
;
}

boolean notConnected = true;

while (notConnected) {
if (gsmAccess.begin(PINNUMBER) == GSM_READY) {
notConnected = false;
} else {
Serial.println(“baglanamadi”);
delay(100);
}
}

sms.print(“AT+CMGD=1,4”);//tüm smsleri sil
delay(1000);

Serial.println(“GSM baglandi”);
}

void loop() {
char c;

if (sms.available()) {
sms.remoteNumber(senderNumber, 20);

while (c = sms.read()) 
{
  Serial.print(c);
  if (c == 'O') // Oda kaç derece ? Telefondan mesaj yolla
  {
    sms.flush();
    smsat();
  }
  else if(c=='S') // Sıcaklık("istediğimiz derece" C) Yap ! diye telefonla mesaj yolla
  {
    
    sms.flush();
    smsat3();
  }
  else 
  {
    sms.flush();
    smsat2();
  }
  
  
}
Serial.println("MESSAGE DELETED");

}
delay(100);
}

void smsat() {

String txtMsg = “”;
float derece = (( analogRead(A0) / 1024.0) * 5000 ) / 10;
txtMsg = "ODA SICAKLIGI: “;
txtMsg = txtMsg + derece;
txtMsg = txtMsg + " C”;

Serial.println(“SENDING”);
Serial.println(“derece:”);
Serial.println(txtMsg);

sms.beginSMS(“05423584203”);//sms atılacak telefon numarası
sms.print(txtMsg);
sms.endSMS();
Serial.println(“\nCOMPLETE!\n”);
delay(100);
}

void smsat2() {

String txtMsg = “”;
txtMsg = "Yanlış Mesaj! ";

Serial.println(“SENDING”);
Serial.println(txtMsg);

sms.beginSMS(“05321234567”);//sms atılacak telefon numarası
sms.print(txtMsg);
sms.endSMS();
Serial.println(“\nCOMPLETE!\n”);
delay(100);
}
void smsat3()
{
int i=0;
double derece_dizisi[1]=" ";
float sicaklik; //Analog değeri dönüştüreceğimiz sıcaklık
float derece = (( analogRead(A0) / 1024.0) * 5000 ) / 10;
derece=(analogRead(A1)/1023)*5000;//değeri mV’a dönüştr
sicaklik = derece /10,0; // mV’u sicakliğa dönüştür
for(i=0;i<100;i++) //Alınan mesajı anlamak için for döngüsü başlat
{
char m = sms.read(); //sms’den okuduğu sayıları m değişkenine ata
delay(4); //4 ms bekle
Serial.print(m); //Serial Monitor’e m değişkenini yaz
derece_dizisi[i]=m; // m değişkenini derece_dizisi dizisine ata
sms=derece_dizisi; //sms değişkenini derece_dizisi’ne eşitle
if(sms.indexOf(m)>=0) //sms değişkeninin içerisinde sayı ifadesi var ise
{
Serial.println(“Derece bilgisi okundu”); //Serial Monitor’e “Derece bilgisi okundu” yaz
if (sicaklik < m) {
digitalWrite(fan, LOW);//Sıcaklık 34 derecenin altında ise fan durur.
} else {
digitalWrite(fan, HIGH); //Sıcaklık 34 derecenin üstünde ise fan çalışır.
}
}
delay(1000);

String txtMsg = “”;
txtMsg = "İşlem Onaylandı ! ";

Serial.println(“SENDING”);
Serial.println(txtMsg);

sms.beginSMS(“05321234567”);//sms atılacak telefon numarası
sms.print(txtMsg);
sms.endSMS();
Serial.println(“\nCOMPLETE!\n”);
delay(100);
}

</gsm.h>

gelen sms i bir değişkene atayıp ekranda gösterebiliyor musun ?

Elimde şuanda shield yok bu proje okul projesi malzeme olmayınca kodu önceden yazmaya başladık. Shield daha elime ulaşmadı. Bu kodları bir yerden buldum. Üstüne ekleme yapmaya çalışıyorum. Sorun attığım mesajda string ve sayıları ayırıp o sayıyı odanın sıcaklığını değiştirmek için kullanmak istiyorum. Sadece o kod bloğu lazım.

Dostum sana onu soruyorum zaten. Sen eğer shieldi taktığında, o shielddeki sim karta sms attığında, o gelen sms i bir değişkene alabiliyorsan gerisi kolay. Ben yardımcı olurum sana. Önce senin gelen sms i yani gönderdiğin stringi bir değişkene alman lazım.

Yardım edersen çok mutlu olurum sağol.

www.instructables.com/files/orig/F0I/E6QX/IPEIE4I1/F0IE6QXIPEIE4I1.ino Bu kodu incele bence. Seninkine benzer mesaj gönderip daha sonra gsm modüldeki mesajı okutup bi değişkene yazdırıyor. Mesajla gelen karakteri okutup duruma göre röle kontrol ediyor. İşine yarayabilir.

Dogru kodu yazdıysan paylaşa bilirmisiniz

Bu programı bir inceleyebilir misiniz? Birşeyler yapmaya çalıştım ama, inşallah yardımcı olur. include “GSM.h” define PINNUMBER “”//simde pin varsa buraya yazın const int fan = 4; GSM gsmAccess; GSM_SMS sms; char senderNumber[20]; void setup() { Serial.begin(9600); while (!Serial) { ; } boolean notConnected = true; while (notConnected) { if (gsmAccess.begin(PINNUMBER) == GSM_READY) { notConnected = false; } else { Serial.println(“baglanamadi”); delay(100); } } sms.print(“AT+CMGD=1,4”);//tüm smsleri sil delay(1000); Serial.println(“GSM baglandi”); } void loop() { char c; if (sms.available()) { sms.remoteNumber(senderNumber, 20); while (c = sms.read()) { Serial.print(c); if (c == ‘O’) // Oda kaç derece ? Telefondan mesaj yolla { sms.flush(); smsat(); } else if(c==‘S’) // Sıcaklık(“istediğimiz derece” C) Yap ! diye telefonla mesaj yolla { sms.flush(); smsat3(); } else { sms.flush(); smsat2(); } } Serial.println(“MESSAGE DELETED”); } delay(100); } void smsat() { String txtMsg = “”; float derece = (( analogRead(A0) / 1024.0) * 5000 ) / 10; txtMsg = "ODA SICAKLIGI: “; txtMsg = txtMsg + derece; txtMsg = txtMsg + " C”; sms.beginSMS(“05423584203”);//sms atılacak telefon numarası sms.print(txtMsg); sms.endSMS(); sms.print(“AT+CMGD=1,4”);//tüm smsleri sil delay(100); } void smsat2() { String txtMsg = "Yanlış mesaj! Tekrar deneyiniz. "; sms.beginSMS(“05321234567”);//sms atılacak telefon numarası sms.print(txtMsg); sms.endSMS(); sms.print(“AT+CMGD=1,4”);//tüm smsleri sil delay(100); } void smsat3() { float istenen = 0; float sicaklik; //Analog değeri dönüştüreceğimiz sıcaklık float derece = (( analogRead(A0) / 1024.0) * 5000 ) / 10; derece=(analogRead(A1)/1023)*5000;//değeri mV’a dönüştr sicaklik = derece /10,0; // mV’u sicakliğa dönüştür while(1) { if(sms.available()) { char m = sms.read(); // sms’den okuduğu karakterleri m değişkenine ata sms.flush(); if(‘0’ <= m && m <= ‘9’ ) // m değişkeni 0 ile 9 arasında bir sayı mı? { istenen = istenen*10.0 + (float)m; } } else { break; } } if(sicaklik < istenen) { digitalWrite(fan, LOW); //Sıcaklık 34 derecenin altında ise fan durur. } else { digitalWrite(fan, HIGH); //Sıcaklık 34 derecenin üstünde ise fan çalışır. } delay(100); String txtMsg = “İşlem Onaylandı!”; sms.beginSMS(“05321234567”); sms.print(txtMsg); sms.endSMS(); sms.print(“AT+CMGD=1,4”);//tüm smsleri sil delay(100); }

.