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
    #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<br />{
    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);
    }


  • 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ı?<br /> {
    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);

    }

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook

Tagged

Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.