accendere e spegnere con cellulare

ciao
applicazione terminata, scopo accendere e spegnere una utenza elettrica con la chiamata da cell, applicazione banale lo so, sotto lo sketch migliorabile sviluppato con arduino 101

stefano

/*
SparkFun Cellular Shield - Pass-Through Sample Sketch
 SparkFun Electronics
 Written by Ryan Owens
 CC by v3.0
 3/8/10
 max current 330 mA when 'ringing'
 
 versione 25ago2012 stefano
 */
int led13=13;  //led per accensione 
int led12=12;  //led per spegnimento
int i;   //contatore

//#include <NewSoftSerial.h>  //Include the NewSoftSerial library to send serial commands to the cellular module.
#include <SoftwareSerial.h>  //per la comuncazione con il modem
#include <string.h>         //per le stringhe

char incoming_char=0;//Will hold the incoming character from the Serial Port.
String stringOne,substringa;

SoftwareSerial cell(3,2);  //Create a 'fake' serial port. cell(RX,TX)
  
void setup()
{ 
pinMode(led13,OUTPUT);
  digitalWrite(led13,LOW);
pinMode(led12,OUTPUT);
  digitalWrite(led12,LOW);
  
  incoming_char=0;  //inizializza
    stringOne="";  //inizializza
      substringa="";  //inizializza
      
  i=0;  //inizializza
  
  Serial.begin(9600);  //Initialize serial ports for communication.
  cell.begin(9600);  //Initialize serial ports for communication.
  delay(500);  //pausa
  
  cell.print("AT+CLIP=1 \r\n");
  delay(1000);  //pausa
  
  while(cell.available()>0)
  {
    delay(50);  //pausa
     incoming_char=cell.read();
     // Serial.print(incoming_char);  //stampa di controllo 
  }
  delay(5000);
}

void loop() 
{ 
while(cell.available()>0)  //while a character is coming from the terminal to the Arduino 
  {
    delay(50);  //pausa
      incoming_char=cell.read();
    
       stringOne+=String(incoming_char);
       stringOne.trim();
  
    //Serial.println(stringOne);  //stampa di controllo
    
   substringa=stringOne.substring(11,24);
  }
  //Serial.println(substringa);  //stampa di controllo
    
if(substringa=="+39**********")  //inserire numero di telefono
{
  switch(i)
  {
 case 0:  //per accensione utenza
 
    cell.println("ATH");  //per interruzione chiamata
      delay(100);  //pausa
    i++;
       
   digitalWrite(led13,HIGH);  //preme pulsante avviamento
     delay(500);  //pausa
   digitalWrite(led13,LOW);  //rilascia pulsante avviamento
     delay(500);  //pausa
     
     while(cell.available()>0)
  {
    delay(50);  //pausa
    cell.read();
     // Serial.print(incoming_char);  //stampa di controllo
  }
  
     incoming_char=0;  //svuota
    stringOne="";  //svuota
      substringa="";  //svuota
        
 break;
 
  case 1:  //per spegnimento utenza
  
    cell.println("ATH");  //per interruzione chiamata
     delay(100);  //pausa
    i--;
       
   digitalWrite(led12,HIGH);  //preme pulsante arresto
     delay(500);  //pausa
   digitalWrite(led12,LOW);  //rilascia pulsante arresto
     delay(100);  //pausa
     
   while(cell.available()>0)
  {
    delay(50);  //pausa
    cell.read();
      //Serial.print(incoming_char);  //stampa di controllo
  }
     
     incoming_char=0;  //svuota
    stringOne="";  //svuota
      substringa="";  //svuota
  
  break;
  }
}     
  //If a character is coming from the the Arduino to the terminal
  if(Serial.available()>0)
 {
   incoming_char=Serial.read();  //Get the character coming from the terminal
     cell.print(incoming_char);    //Send the character to the cellular module.
 }

}

scusa, ma spendi qualche parola di descrizione, non è molto chiaro, arduino è collegato a un telefono su linea urbana? chiami col cell casa e arduino risponde riconocendo un tono DTMF ? bho non capisco cosa fai col cell, un numero a caso ...

ciao

ciao
con il cellulare chiami un modem gsm lo sketch ricava il numero chiamante e se uguale a quello memorizzato

...
if(substringa=="+39**********")  //inserire numero di telefono
...

esegue i comandi che seguono, alla prima interrompe la chiamata

cell.println("ATH");  //per interruzione chiamata

e accende l'utenza,

digitalWrite(led13,HIGH);  //preme pulsante avviamento
     delay(500);  //pausa
   digitalWrite(led13,LOW);  //rilascia pulsante avviamento
     delay(500);  //pausa

alla seconda interrompe la chiamata e spegne l'utenza
il tutto è migliorabile

stefano

il tutto è migliorabile

soprattutto la descrizione perchè ancora ora secondo me è incomprensibile, il software senza hardware sono parole nel deserto :smiley:

ciao
mi spiace non voglio fare il prof perchè ne meno di tutti qua dentro, a questo risultato ci sono infatti arrivato dopo molti tentativi, comunque i comandi sono semplici, non ci sono particolari virtuosismi di programmazione

stefano

Ok, ricapitoliamo
Lasciamo stare la parte software che se l'hai fatta e provata funziona sicuramente, io cerco di capire come è la parte hardware.

Premessa: io installo da un po' di anni moduli GSM già fatti programmabili da terminale con il loro software e microcontrollori, ciscuno di essi ha degli input e degli output che imposto da programma a mio piacimento, non mi sbatto certo a farli con il prezzo ridicolo che hanno, ero curioso di capire quello che avevi fatto.
Sarò duro di comprendonio, hai spiegato il programma e il funzionamento ma non ho idea di quale modulo gsm parli, non conosco gsm con porte seriali dedicate, di quale modulo stai parlando? forse uno shield per arduino? che cosa?

Tu hai postato un programma e basta, per questo ti dico che senza hardware lo sketch è composto da parole al vento, non ci sono link dei componenti che hai usato, dei nomi, schemi di riferimento, ecco tutto qui :D, lo dico anche per te il post senza queste parti è poco utile a chi potrebbe servire o prenderne spunto.

Ciao

ciao
a me interessa accendere e spegnere una pompa elettrica allego uno schema di massima per fare l'autoritenuta del teleruttore della pompa e il datasheet del modem, serve un max232 per adattare il livello di tensione del modem a quello di arduino

stefano

autoritenuta.pdf (12.4 KB)

wavecom m1206_user_guide.pdf (469 KB)

a inizio sketch c'è questo

SparkFun Cellular Shield - Pass-Through Sample Sketch
 SparkFun Electronics

immagino abbbia usato quello :grin: