Pages: [1]   Go Down
Author Topic: controllo caldaia a distanza  (Read 1340 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve a tutti mi servirebbe una mano, io ho creato un progettino di rilevamento/lettura delle sonde di temperatura tramite gsm, ora mi sono bloccato perchè dovrei mettere un allarme quando la caldaia va in blocco.
Mi spiego meglio quando la caldaia va in blocco mi si accende una spia sul quadro elettrico, io vorrei usare arduino che quando la spia sul quadro elettrico si accende mi manda un sms e io capisco che la caldaia si e bloccata.

vi mando il mio sketch funzionante di controllo sonde per avere una mano da voi grazie a tutti
Code:
#include "gsm.h"
#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
SMSGSM sms;
int numdata;

char mobileno[]="+39xxxx"; //Phone Number authorized

char mobileno1[]="+39xxxx"; //Second Phone Number authorized

char tmpmobileno[30]; //buffer for reading phone number from SMS

char smstxtwrite[]="Blocco Bruciatore";

char smstxtread[]="Gradi"; // Sms send with your authorize number

int gradi0=40; // Degress top 0

int gradi1=40; // Degress top 1

int gradi2=99; // Degress top 2

boolean started=false;

boolean onesend=true; // Sms only one

char inSerial[40];

char gsmSerial[40];

char smstempc[32];  // for resend sms
char rx_sms[32]={0};
int i=0;

// Imposta il numero di pin analogico A0 to A5

int pin0=0;
int pin1=1;
int pin2=2;

// Dichiara e inizializza la variabile che conterrà la temperatura rilevata

int tempc0=0;
int tempc1=0;
int tempc2=0;

// pin per led

int ledpin=3;

void setup()

{

  Serial.begin(9600); // Inizializza la comunicazione seriale

  pinMode(ledpin, OUTPUT);

  Serial.println("GSM Starting.");

  if (gsm.begin(9600)){

    Serial.println("\nstatus=READY");

    started=true;

  }

  else Serial.println("\nstatus=IDLE");

  delay(2000);

};
static unsigned long myMillis = 0;

void loop()

{
  if ((millis() - myMillis) >= 1000)
    {
  serialhwread();

  serialswread();
  
  tempc0 = ( 5.0 * analogRead(pin0) * 100.0) / 1024.0;
  
  tempc1 = ( 5.0 * analogRead(pin1) * 100.0) / 1024.0;

  tempc2 = ( 5.0 * analogRead(pin2) * 100.0) / 1024.0;
 
  if(   (tempc0 > gradi0)
      ||(tempc1 > gradi1)
      ||(tempc2 > gradi2))
     {

    digitalWrite(ledpin, HIGH); //accendo

    Serial.println(tempc0);
    Serial.println(tempc1);
    Serial.println(tempc2);

    Serial.println(" Gradi BLOCCO BRUCIATORE  ");

    if(onesend){

      smssend();
      smssend1();

      onesend=false;

    }

  }

  else {

    onesend=true;

    digitalWrite(ledpin, LOW); //spengo
  if( (tempc0 > 0)
    ||(tempc1 > 0)
    ||(tempc2 > 0)){
    Serial.println(tempc0);
    Serial.println(tempc1);
    Serial.println(tempc2);
    Serial.println(" Gradi TUTTO OK  ");
}
  }
 // tempc0 = 0;
 // tempc1 = 0;
 // tempc2 = 0;
  
  //Formula che trasforma analogico in gradi centigradi

  smsreadtxt();
    myMillis = millis();
    }

};


char checksms()
{
  return sms.IsSMSPresent(SMS_ALL);
}
void smsreadtxt()
{
  int i=0;
  

  if (checksms()>0)
    {
      for (i=1; i<=20;i++)
        {
          int res;
          memset(tmpmobileno, 0x00, sizeof(tmpmobileno));
          
          res = sms.GetAuthorizedSMS(i, tmpmobileno, rx_sms, sizeof(rx_sms), 0, 0);
          if (GETSMS_AUTH_SMS == res)
            {
              if (0 == strncmp(rx_sms,smstxtread,sizeof(rx_sms)))
                {
                  Serial.println("\nSMS GRADI found!");    
                  smssend_tempc(tmpmobileno);
                  
                }
              else
               {
                 Serial.print("\nSMS received: ");    
                 Serial.println(rx_sms);
               }
               smsdel(i);
            }
          else if (GETSMS_NOT_AUTH_SMS == res)            
            smsdel(i);
       }
    }
}

void smsdel(int i){

    if (sms.DeleteSMS(i))
    Serial.print("\nSMS Delete OK on position");
    Serial.println(i);
}

void smssend(){
  
  //delay(1000); // Attende 1 secondo
  int res;
  gsm.SetCommLineStatus(CLS_FREE);
  snprintf(smstempc,63, "%s %d Mand %d Mix %d Rit", smstxtwrite, tempc0, tempc1, tempc2);
 
  res = sms.SendSMS(mobileno, smstempc);
  if (1 == res)
    Serial.println("\nSMS sent OK");
  else  
    {
      sprintf(smstempc, "Errore invio :%d", res);
      Serial.println(smstempc);
    }

}
void smssend_tempc(char *numfromsms){

  snprintf(smstempc, 63,"%d Mand %d Rit %d Mix", tempc0, tempc1, tempc2);
  if (sms.SendSMS(numfromsms, smstempc))

    Serial.println("\nSMS TEMP sent OK");

}

void smssend1(){
  
  int res;
  gsm.SetCommLineStatus(CLS_FREE);
  snprintf(smstempc,63, "%s %d Mand %d Mix %d Rit", smstxtwrite, tempc0, tempc1, tempc2);
 
  res = sms.SendSMS(mobileno1, smstempc);
  if (1 == res)
    Serial.println("\nSMS sent OK");
  else  
    {
      sprintf(smstempc, "Errore invio :%d", res);
      Serial.println(smstempc);
    }

}

void serialhwread(){

  i=0;
        
    if (Serial.available() > 0){
    while (Serial.available() > 0) {

      inSerial[i]=(Serial.read());

      delay(10);

      i++;    

    }

    inSerial[i]='\0';

    if(!strcmp(inSerial,"/END")){

      Serial.println("_");

      inSerial[0]=0x1a;

      inSerial[1]='\0';

      gsm.SimpleWriteln(inSerial);

    }

    if(!strcmp(inSerial,"SIGNAL")){

      Serial.println("SIGNAL QUALITY");

      gsm.SimpleWriteln("AT+CSQ");

    }

    if(!strcmp(inSerial,"CALL")){

      Serial.print("CALL NUMBER ");
      Serial.println(mobileno);
      gsm.SimpleWrite("ATD");
      gsm.SimpleWrite(mobileno);
      gsm.SimpleWriteln(";");
    }

    if(!strcmp(inSerial,"CLOSE")){

      Serial.println("CALL CLOSE");

      gsm.SimpleWriteln("ATH0");

    }

    if(!strcmp(inSerial,"INFO")){

      Serial.println("INFO OPERATOR");

      gsm.SimpleWriteln("AT+COPS?\r\n");

    }

    if(!strcmp(inSerial,"REP")){

      Serial.println("ENABLE VERBOSE REPORT");

      gsm.SimpleWriteln("AT+CMEE=2");

    }

    if(!strcmp(inSerial,"PIN")){

     Serial.println("PIN INFO");

      gsm.SimpleWriteln("AT+CPIN?");

    }

    else{

      Serial.println(inSerial);

      gsm.SimpleWriteln(inSerial);

    }
    inSerial[0]='\0';
    }
}

void serialswread(){

  int i=0;

  for(i=0;i<10000;i++)
    gsm.SimpleRead();
« Last Edit: January 29, 2013, 05:10:36 pm by flavio86 » Logged

Tuscany
Offline Offline
Edison Member
*
Karma: 66
Posts: 1948
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A parte che se non racchiudi il listato tra i tag ( usa il # e metti il codice all'interno ) il tutto diventa di difficile comprensione..

e infatti non ho capito se:
1) non sai come collegare la "spia" ad arduino
2) non sai come leggere lo stato della "spia"
3) non sai come inviare lo stato della "spia" via SMS
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi serve che arduino mi mandi un sms quando la spia del quadro elettrico  si accende, non ho problemi di collegamenti elettrici, non riesco a programmare l arduino ( sketch) a me basta il pezzo della programmazione. Grazie
« Last Edit: January 28, 2013, 04:49:41 pm by flavio86 » Logged

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3249
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Però Brunello ha ragione.

Il codice va messo tra [code.][/code.] , si tratta di un regolamento che seguiamo tutti non una sua pretesa e l'hai ignorato
ti ha chiesto se sai collegare la spia ad arduino, e l'hai ignorato

Tutt'ora non si è capito qual'è l'hardware che usi per portare il segnale dalla spia di "blocco caldaia" ad arduino, se non hai problemi elettrici avresti dovuto indicarlo.

La richiesta sembra banale,
Quote
Mi serve che arduino mi mandi un sms quando la spia del quadro elettrico  si accende

Hai già uno sketch che dici essere funzionante per inviare sms, una volta che tu hai introdotto il segnale in un pin input, si tratta solo di fare un controllo:
If digital.read pin_spia ==1 invia sms //fine dello sketch

Sicuro che la tua incognita sia solo software?

Ragazzi dovete imparare a esprimervi meglio!!

ciao
« Last Edit: January 28, 2013, 05:55:54 pm by pablos » Logged

no comment

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok proverò il tuo consiglio, ragazzi non vi arrabbiate sono nuovo e non so sapevo del code
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

provo a spiegarmi meglio io sul quadro elettrico ho un contatto normalmente aperto (la spia di allarme) quando la caldaia va in blocco questo contatto si chiude e in quel momento vorrei che mi mandasse un SMS col l avviso di anomalia caldaia, il mio problema e come continuare il sketch per ampliare anche questo avviso in più come dovrei fare? Spero di esser stato chiaro questa volta credo che per qualcuno di voi sia facile risolvere questo problemino
« Last Edit: January 29, 2013, 05:12:20 pm by flavio86 » Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Prendi un tester e misura la tensione di quel segnale (è CC o CA?), a questo punto si trova il modo per far leggere senza pericolo ad un pin di Arduino quel segnale.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

E corrente alternata no continua, ma il mio problema non sono i collegamenti elettrici ma la fase programmazione che non ne vengo fuori
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Te lo aveva già detto pablos. Basta semplicemente collegare il circuito che usi per rilevare la chiusura del circuito con un if.
Non capisco il problema. Con l'if controlli se c'è stato il blocco, spedisci il messaggio e poi imposti una variabile a TRUE per avvertire il programma che l'sms lo hai già mandato e che non deve rimandarlo più. Quando la lettura torna su low (quindi viene tolto il blocco) resetti la variabile di stato in modo che lo sketch inizi a monitorare nuovamente la caldaia.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ragazzi ho provato a scervellarmi come mi ha detto Pablos ma mi da errore mi sembra poca cosa mettere solo if digital.read pin_spia ==1 invia sms //fine dello sketch.
Se secondo voi e una richiesta tanto banale la mia, non mi riuscireste a indirizzarmi meglio cosa e dove mettere le variabili, per farlo funzionare regolarmente? vi ho mandato apposta lo sketch completo per un aiuto un pochettino piu completo.
Grazie
« Last Edit: January 30, 2013, 01:53:53 pm by flavio86 » Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi tiro indietro. Non ho usato per ora nessun modulo GSM.
Logged


Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3249
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Io spero che tu non abbia scritto proprio il testo così if digital.read pin_spia ==1 invia sms ... il testo era schematico, per farti capire che se tu prendi un contatto normalmente aperto e lo inserisci in un pin settato come input, devi solo nel loop controllare costantemente tale ingresso, se va a 1 vuol dire che è in blocco e allora invia l'sms. Poi fissi un flag che dice ad arduino "ho già provveduto a mandare il messaggio, non inviarlo nuovamente"
Pensavo che avessi capito cosa intendevo. Però anch'io non ho mai smanettato con i moduli gsm.
Infatti ti ho scritto ... se sei sicuro che lo sketch che invia sms  funziona bene devi solo aggiungere un controllo della spia che farai nella funzione  loop()

Code:
if(digitalRead(Pin_spia)== HIGH && msg_inviato==0)
{
 //invia SMS, come si invia l'sms io non lo so, ma tu si
  msg_inviato =1;//questo farà si che non ti mandi milioni di sms
}

byte msg_inviato=0; //lo devi mettere all'inizio dopo gli #include <librerie>

 pinMode(num_pin_blocco, INPUT);// da mettere nel setup()
« Last Edit: January 30, 2013, 05:49:24 pm by pablos » Logged

no comment

Pages: [1]   Go Up
Jump to: