Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας ! φτιαχνω ενα Gsm remote control και θα ηθελα λιγο τη βοηθεια σας στον προγραμματισμο !

Για υλικα χρησιμοποιω της Arduino to UNO και το gsm shield      

http://store.arduino.cc/index.php?main_page=product_info&cPath=11&products_id=195

http://store.arduino.cc/index.php?main_page=product_info&cPath=11&products_id=195

Αυτο που θελω ειναι οταν θα στελνω ενα μηνυμα π.χ .    ona   στην sim του gsm να εχω 5 V σε μια εξοδο των arduino ωστε να μπορω να ενεργοποιησω ενα ρελε !

Χρησιμοποιω τον κωδικα που ειναι απο αυτο το project http://www.instructables.com/id/Control-the-relays-via-GPRS-SMS/step4/Upload-the-program/κανοντας 2 μικρο αλλαγες γιατι εγω εχω ενα ρελε και το φορτωνω ετσι με επιτυχια στο uno :

#include <SoftwareSerial.h>
 
 
// EN: String buffer for the GPRS shield message
String msg = String("");
// EN: Set to 1 when the next GPRS shield message will contains the SMS message
int SmsContentFlag = 0;
//control pins of relay.
int relay_a=4; //==============> το ρελέ που οδηγείται απο το pin 4 του Arduino
 
// EN: Code PIN of the SIM card (if applied)
String SIM_PIN_CODE = String( "XXXX" );//==============> βάζω το PIN της κάρτας  όπου ΧΧΧΧ
 
void setup()
{
  Serial.begin(19200);                 // the GPRS baud rate
  // Initialize  PINs
  pinMode( 4, OUTPUT ); 
  digitalWrite( 4, LOW ); 
Serial.println( "AT+CMGF=1" ); 
 delay(200);
}
 
void loop()
{
    char SerialInByte;
    if(Serial.available())
    {       
        SerialInByte = (unsigned char)Serial.read();
       delay(5);
        
        // -------------------------------------------------------------------
        // EN: Program also listen to the GPRS shield message.
        // -------------------------------------------------------------------
       // EN: If the message ends with <CR> then process the message
        if( SerialInByte == 13 ){
          // EN: Store the char into the message buffer
          ProcessGprsMsg();
         }
         if( SerialInByte == 10 ){
            // EN: Skip Line feed
         }
         else {
           // EN: store the current character in the message string buffer
           msg += String(SerialInByte);
         }
     }   
}
// EN: Make action based on the content of the SMS. 
//     Notice than SMS content is the result of the processing of several GPRS shield messages.
void ProcessSms( String sms ){
  
  if( sms.indexOf("ona") >= 0 ){
    digitalWrite( relay_a, HIGH );
  }
   
  if( sms.indexOf("offa") >= 0 ){
    digitalWrite(  relay_a, LOW );
  }
  
}
// EN: Request Text Mode for SMS messaging
void GprsTextModeSMS(){
  Serial.println( "AT+CMGF=1" );
}
 
void GprsReadSmsStore( String SmsStorePos ){
  Serial.print( "AT+CMGR=" );
  Serial.println( SmsStorePos );
}
 
// EN: Clear the GPRS shield message buffer
void ClearGprsMsg(){
  msg = "";
}
 
// EN: interpret the GPRS shield message and act appropiately
void ProcessGprsMsg() {
  if( msg.indexOf( "Call Ready" ) >= 0 ){
   //  Serial.println( "*** GPRS Shield registered on Mobile Network ***" );
     GprsTextModeSMS();
  }
  
  // EN: unsolicited message received when getting a SMS message
  if( msg.indexOf( "+CMTI" ) >= 0 ){
   //  Serial.println( "*** SMS Received ***" );
     // EN: Look for the coma in the full message (+CMTI: "SM",6)
     //     In the sample, the SMS is stored at position 6
     int iPos = msg.indexOf( "," );
     String SmsStorePos = msg.substring( iPos+1 );
   //  Serial.print( "SMS stored at " );
  //   Serial.println( SmsStorePos );     
     // EN: Ask to read the SMS store
     GprsReadSmsStore( SmsStorePos );
  }
  
  // EN: SMS store readed through UART (result of GprsReadSmsStore request)  
  if( msg.indexOf( "+CMGR:" ) >= 0 ){
    // EN: Next message will contains the BODY of SMS
    SmsContentFlag = 1;
    // EN: Following lines are essentiel to not clear the flag!
    ClearGprsMsg();
    return;
  }
  
  // EN: +CMGR message just before indicate that the following GRPS Shield message 
  //     (this message) will contains the SMS body 
  if( SmsContentFlag == 1 ){
 //   Serial.println( "*** SMS MESSAGE CONTENT ***" );
 //   Serial.println( msg );
 //   Serial.println( "*** END OF SMS MESSAGE ***" );
    ProcessSms( msg );
  }
  
  ClearGprsMsg();
  // EN: Always clear the flag
  SmsContentFlag = 0; 
}

Το αποτελεσμα ειναι οταν στελνω  ona να μην εχω 5 V sto pin4 και να μην ενεργοποιειται το ρελε ! τι φταιει ; θελει καποιες επιπλεον αλλαγες ο κωδικας η πρεπει να φτιαξω αλλο απο την αρχη ;;

(πραγμα πολυ δυσκολο γιατι ξερω τα βασικα απο προγραμματισμο)

Δημοσ.

αυτη ηταν η πρωτη σου δοκιμη ? πηγες κατευθειαν να το ετοιμασεις? θελω να πω δοκιμασε πρωτα με kana ledaki, mporei συνδεση του ρελε να μην ειναι σωστη, παιξε με τα high low βαλτα αναποδα, γενικα με δοκιμες πιστευω θα το πετυχεις και δες αν οντως το μηνυμα στέλνεται

  • Like 1
  • 5 εβδομάδες αργότερα...
Δημοσ.

►Για δοκίμασε αυτό που επεσύναψα. Δεν το δοκίμασα γιατί δεν έχω εύκαιρο GPRS shield, αλλά λογικά πρέπει να δουλέψει. Άλλαξε την προέκταση από txt σε ino, βάλ' το σε έναν φάκελο με το ίδιο όνομα (SMS_Control) & τρέξ' το.
►Όρισα σαν relayPin το 13 ώστε να βλέπεις μετά τα SMS αν ανάβει/σβήνει το LEDάκι του Uno, αλλά φυσικά μπορείς να ορίσεις όποιο pin θέλεις (πάνω απ' τη setup().)
►Σαν εντολές μπορείς να στείλεις on & off, αλλά μπορείς να τις αλλάξεις στη loop() (δες τα σχόλια).
►Οι turnOn() & turnOff() που εκτελούνται ανάλογα με ποια εντολή περιέχει το SMS, βρίσκονται στο τέλος του sketch. Έχω βάλει μόνο να ανάβουν/σβήνουν το LEDάκι του pin 13 αλλά μπορείς να βάλεις ό,τι εντολές θέλεις.

 

Και πού να δεις τίποτα Ethernet :P

Έχει στο ebay κινέζικα με €6 & μάλιστα πολύ καλά. :P Προσωπικά έχω 4 σε συνεχή λειτουργία εδώ & 2 χρόνια & δουλεύουν μια χαρά.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...