PDA

Επιστροφή στο Forum : ARDUINO NANO - SLEEP MODE



galman
02-01-21, 20:35
ΧΡΟΝΙΑ ΠΟΛΛΑ ΚΑΛΗ ΧΡΟΝΙΑ ΜΕ ΥΓΕΙΑ !!!!!

Παιδιά χρειάζομαι βοήθεια !!!

Έχω φτιάξει ένα κώδικα για να προγραμματίσω έναν arduino nano.
Με τον κώδικα αυτόν , στέλνω μήνυμα στην SIM800L #info ,και μου στέλνει την θερμοκρασία και την υγρασία (DHT11) που υπάρχει μέσα σε ένα θερμοκήπιο. Επειδή στον χώρο αυτό δεν υπάρχει ρεύμα και θα χρησιμοποιήσω αλκαλικές μπαταρίες ...η.... οποιαδήποτε άλλη.......μορφή μπαταρίας , θέλω να βάζω τον NANO και την SIM800L σε κατάσταση sleep mode μετά την αποστολή του μηνύματος δηλαδή μετά από κάθε φορά που θα του ζητάω να μου στείλει την υγρασία και την θερμοκρασία για να έχει διάρκεια λειτουργίας όσο το δυνατόν περισσότερες ημέρες η εφαρμογή. Ο κώδικας είναι παρακάτω. Μπορεί κάποιος να με βοηθήσει επειδή είμαι αρκετά αρχάριος και επειδή έχω σπάσει το κεφάλι μου και δεν κατάφερα τίποτα μέχρι στιγμής, να μου πει σε ποιο σημείο και τι πρέπει να γραφεί για να μπορέσει να λειτουργήσει σύμφωνα με το σκεπτικό μου ??
Ευχαριστώ εκ των προτέρων
Φιλικά Μανώλης

#include <SoftwareSerial.h>
#include <avr/sleep.h>
#include <dht.h>

#define DHT11_PIN 7

SoftwareSerial mySerial(2, 3);

dht DHT;
char inchar;


void setup() {

Serial.begin(9600);
mySerial.begin(9600);

Serial.println("Syndesi..........");
delay(500);

updateSerial();
mySerial.println("AT"); //Once the handshake test is successful, it will back to OK
updateSerial();
mySerial.println("AT+CMGF=1"); // Configuring TEXT mode
updateSerial();
mySerial.println("AT+CMGS="+AT+CMGS="+30ΧΧΧΧΧΧΧΧΧΧ"");//change ZZ with country code and xxxxxxxxxxx with phone number to sms
updateSerial();
mySerial.println("** Temperature & Humidity **");
updateSerial();
mySerial.println("I am ready.......!!!!"); //text content
updateSerial();
mySerial.write(26);
updateSerial();
mySerial.println("AT+CMGD=1,4");
updateSerial();
mySerial.println("AT+CNMI=1,2,0,0,0"); // Decides how newly arrived SMS messages should be handled
updateSerial();

}

void loop() {
red_SMS();
}




void red_SMS(){

if(mySerial.available()>0)
{
inchar=mySerial.read();
if (inchar=='#'){
delay(10);
inchar=mySerial.read();
if (inchar=='i'){
delay(10);
inchar=mySerial.read();
if (inchar=='n'){
delay(10);
inchar=mySerial.read();
if (inchar=='f'){
delay(10);
inchar=mySerial.read();
if (inchar=='o')
delay(10);
{
mySerial.println("AT+CMGD=1,4");

send_SMS();

}
}
}
}
}
}
}


void send_SMS(){

Serial.println("** Temperature & Humidity **");
Serial.println("Send SMS .............!!!!!");
mySerial.println("AT+CMGF=1"); // Configuring TEXT mode
updateSerial();
mySerial.println("AT+CMGS="+30ΧΧΧΧΧΧΧΧΧΧ"");//change ZZ with country code and xxxxxxxxxxx with phone number to sms
updateSerial();
mySerial.println("** Temperature & Humidity **");
updateSerial();

int chk = DHT.read11(DHT11_PIN);

SmySerial.print("Temperature = ");
updateSerial();
mySerial.println(DHT.temperature);
updateSerial();
mySerial.print("Humidity = ");
updateSerial();
mySerial.println(DHT.humidity);

delay(1000);


mySerial.write(26);
updateSerial();
mySerial.println("AT+CMGD=1,4");
}


void updateSerial()
{
delay(500);
while (Serial.available())
{
mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port
}
while(mySerial.available())
{
Serial.write(mySerial.read());//Forward what Software Serial received to Serial Port
}
}

void GOTO_SLEEP()
{
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_cpu();

}

Ste7ios
02-01-21, 20:55
Ρίξε μια ματιά σε αυτό το project, μπορεί να σε βοηθήσει: https://www.hlektronika.gr/forum/showthread.php?t=92275&highlight=Cat+flusher

nkarama
04-01-21, 11:18
Νομίζω πάντως ότι δεν αξίζει αυτό που κάνεις. Αντε να το βάλεις για ύπνο... απο την στιγμή που το GSM θα καταναλώσει τα κέρατά του όταν ξυπνήσει, για να συνδεθεί στο δίκτυο, να σtείλει και το SMS να λάβει και το ACK, αστα...
Εδώ σε αυτοκίνητα αυτοί οι δήθεν trackers και πάλι αν δεν το βάλεις μπροστά για 3-4 μέρες, η μπαταρία του πάει για βρούβες....

Επίσης το NANO έχει LED άνω του... ακόμα και σε sleep να το βάλεις, 20mA τα τρώς μόνο απο αυτό...

Θέλω να πω, ότι πρέπει να αρχίσεις πρώτα απο τα προφανή και μετά να ασχοληθείς με τις λεπτομέρειες..

Επίσης μερικές απο τις λεπτομέρειες...
- Να χρησιμοποιήσεις σκέτο τον επεξεργαστή. Οι πλακέτες των arduino έχουν πάνω μπόλικα εξαρτήματα που καταναλώνουν ενέργεια (πχ USB, Led, Regulator).
- Να χρησιμοποιήσεις τον επεξεργαστή στο 1MHz με τον εσωτερικό ταλαντωτή.
- Εφόσον χρησιμποιείς τον επεξεργαστή στα 1ΜΗz μπορείς να τν τροφοδοτείς κατευθείαν απο μια LiPo μπαταρία χωρίς regulator.
- Να κλεισεις τον ADC που το arduino έχει ενεργοποιημένος.
- Να μην χρησιμοποιείς pins που δεν είναι απαραίτητα... (βάλτα σαν OUTPUT και LOW ή σαν INPUT και γείωσε τα).
- η UART δεν χρειάζετε....
- Να βρεις τον οικονομικότερο (σε επίπεδο κατανάλωσης) τρόπο να κοιμήσεις την SIM800 χωρίς να καταναλώνει πολύ ενέργεια όταν ξυπνάει.


Αν επιμένεις, τότε το καλύτερο είναι να βάλεις ένα ηλιακό πάνελ να φορτίζει μια 18650 ή άλλου τύπου επαναφορτιζόμενη.

Εγώ θα έψαχνα την λύση LoRaWAN πάντως.
Η διαφορετικά αν το θερμοκήπιο είναι σχετικά κοντά και με κάλυπτε η εμβέλεια, θα έβαζα ίσως NRF24L01 που έχω και στον μετερεολογικό σταθμό (καλά, όχι ακριβώς μετεο.. θερμοκρασία και υγρασία προς το παρών)...

Οσον αφορά τον ύπνο, δες εδώ (https://www.youtube.com/watch?v=urLSDi7SD8M&feature=youtu.be&ab_channel=KevinDarrah)ένα βίντεο...

SProg
04-01-21, 11:51
Εδώ σε αυτοκίνητα αυτοί οι δήθεν trackers και πάλι αν δεν το βάλεις μπροστά για 3-4 μέρες, η μπαταρία του πάει για βρούβες....


Καλά αυτό προφανώς και δεν ισχύει, δε ξέρω πως έβγαλες τέτοιο συμπέρασμα και το παραθέτεις κιόλας με τόση ευκολία.


....στέλνω μήνυμα στην SIM800L #info ,και μου στέλνει την θερμοκρασία και την υγρασία (DHT11) που υπάρχει μέσα σε ένα θερμοκήπιο.


Δε μπορώ να σε βοηθήσω με το Arduino αλλά σε μία τόσο απλή εφαρμογή δεν έχει νόημα να βαλεις έναν απλό μΕ να οδηγεί το SIM800 που περιέρχει εναν ARM και σου επιτρέπει να τον προγραμματίσεις. Επιπλέον ο εξωτερικός μΕ αυξάνει την κατανάλωση.

Εάν θέλεις διάβασε για τα EAT της SimCom.

nkarama
04-01-21, 15:59
Καλά αυτό προφανώς και δεν ισχύει, δε ξέρω πως έβγαλες τέτοιο συμπέρασμα και το παραθέτεις κιόλας με τόση ευκολία.


Είμαι παθών με ανάλογες Κινεζιές... Αλλά για περισσότερες μέρες, 10 περίπου... Βρήκα την μπαταρία του SMART με 4.5V...




Δε μπορώ να σε βοηθήσω με το Arduino αλλά σε μία τόσο απλή εφαρμογή δεν έχει νόημα να βαλεις έναν απλό μΕ να οδηγεί το SIM800 που περιέρχει εναν ARM και σου επιτρέπει να τον προγραμματίσεις. Επιπλέον ο εξωτερικός μΕ αυξάνει την κατανάλωση.

Εάν θέλεις διάβασε για τα EAT της SimCom.




Πολύ χρήσιμη πληροφορία αυτή με το Embeded AT. :thumbup1::thumbup1: Ευχαριστώ!
....Βέβαια φαντάζομαι ότι είναι άχρηστη για τον νηματοθέτη... :001_unsure:

Ste7ios
04-01-21, 18:31
Γενικά θα βρεις οδηγούς που σου εξηγούν πως κάνεις εφαρμογές με χαμηλή κατανάλωση, τις απαραίτητες λεπτομέρειες... Για παράδειγμα, η delay είναι απαγορευμένη σε τέτοιες εφαρμογές καθώς δημιουργεί πρόβλημα και χρησιμοποιούνται άλλες λογικές για την έννοια του χρόνου, πας σε λίγο πιο low level ή advanced programming, όπως θες πες το...

Μπορείς επίσης να βελτιώσεις την κατανάλωση με λίγο διαφορετική λογική, π.χ. να ενεργοποιείς την επικοινωνία μόνο όταν υπάρχει μεταβολή μέσα σε κάποιο εύρος κ.ο.κ. και όχι να στέλνεις πληροφορία με σταθερό ρυθμό.

Πρέπει να μου πήρε 1-2 μήνες διαβάσματος & πειραματισμών για να φτάσω στο αποτέλεσμα που βλέπεις παραπάνω... Τώρα εννοείται δεν θυμάμαι τίποτα απολύτως! :D

Αν το GSM είναι απολύτως απαραίτητο τότε σίγουρα με μια μπαταρία δεν θα κάνεις δουλειά, θα πρέπει να υπολογίσεις και φωτοβολταϊκό.

galman
05-01-21, 11:43
Ευχαριστώ για τις άμεσες απαντήσεις. Είμαι αρχάριος και το παλεύω......πόσο ??? Δεν ξέρω και εγώ......... Θα συνεχίσω πάντως .......κάπου θα με βγάλει .!!!!!