Βαρομετρική πίεση, υψόμετρο, θερμοκρασία και υγρασία - Arduino IOT


Μπορεί να μην καταφέραμε να πετάξουμε τον Arduino-χαρταετό μας την Καθαρά Δευτέρα, το κάναμε όμως την εβδομάδα που μας πέρασε! Αν και δεν καταφέραμε να πάρουμε τις μετρήσεις που θέλαμε γιατί η μπαταρία μας άδειασε πολύ πιο γρήγορα απ' ότι περιμέναμε, γελάσαμε πολύ και θυμηθήκαμε και τα παιδικά μας χρόνια! 

Στο άρθρο αυτό θα σας δώσω όλες τις πληροφορίες που θα χρειαστείτε για να φτιάξετε και εσείς το σύστημα που χρησιμοποιήσαμε σε αυτό το project. Στόχος είναι να πάρουμε τις τιμές της βαρομετρικής πίεσης, υψόμετρου, θερμοκρασίας και υγρασίας και μέσω της ασύρματης τεχνολογίας WiFi να τις στείλουμε σε έναν server στο internet με σκοπό την περαιτέρω ανάλυση τους. Για παράδειγμα, θα μπορέσουμε να δούμε πως διαφοροποιείτε η θερμοκρασία σε σχέση με το υψόμετρο. O server αυτός υπάρχει ήδη και λέγεται ThingSpeak και εκτός απ' την περισυλλογή των μετρήσεων μπορεί να τις εμφανίζει απευθείας και σε γράφημα σε σχέση με τον χρόνο!



Το σύστημα αυτό είναι αρκετά μικρό και ελαφρύ και μπορεί να τοποθετηθεί πάνω σε χαρταετό, drone, ατμοσφαιρικό μπαλόνι ακόμα και στο μπαλκόνι σας. Η απόσταση που μπορεί να επικοινωνήσει ώστε να στείλει τις τιμές καθορίζεται απ' το ρούτερ σας, το οποίο φυσικά θα πρέπει και να έχει σύνδεση στο internet, καθώς αναφερόμαστε και στο "ΙΟΤ" (Internet Of the Things).

Πριν ξεκινήσετε με τον οδηγό, δείτε το βίντεο με τις στιγμές απ' την δικιά μας πτήση του χαρταετού, δε ξέρω για εσάς, εμείς γελάσαμε πολύ!



Τα υλικά που θα χρειαστείτε:


  • ATmega328p (+ την βάση του)*
  • Κρύσταλλο16MHz 
  • Πυκνωτές: 2x 22pF και 1x 0.1uF
  • Αντίσταση 10ΚΩ
  • DHT-22 για την θερμοκρασία και υγρασία
  • Adafruit BMP280 για την πίεση και το υψόμετρο 
  • ESP8266 WiFi module
  • Επαναφορτιζόμενη μπαταρία 3.7V (>500mAh)

Επίσης θα χρειαστείτε και ένα Arduino uno για να προγραμματίσετε τον ATmega328. Σας προτείνω να φτιάξετε το κύκλωμα σας πρώτα σε ενα breadboard και εφόσον όλα λειτουργούν σωστά, τότε να προχωρήσετε στην κόλληση του.

*Μπορείτε να κάνετε χρήση του Arduino Micro ή Arduino Nano και να αποφύγετε πολλές κολλήσεις.

Το κύκλωμα:



Το κύκλωμα δεν είναι δύσκολο να υλοποιηθεί. Ακολουθούν μερικές σημειώσεις ως προς την συνδεσμολογία μεταξύ εξαρτημάτων. (το Arduino uno χρησιμοποιεί τον ίδιο μικρο ελεγκτή (ATmega328) )

ESP8266 WiFi Module:

  • RXD στο Arduino TX pin
  • GPIO0
  • GPIO1
  • GND στο GND (που αλλού?)
  • VCC στα 3.3V του Arduino ή στον θετικό πόλο της μπαταρίας (3.7V)
  • RST με το Vcc
  • CH_PD με το Vcc
  • TXD στο Arduino RX pin

DHT-22 sensor:

  • VCC στα 3.3V του Arduino ή στον θετικό πόλο της μπαταρίας (3.7V)
  • DATA στο Arduino pin 11
  • NC
  • GND στο GND

Adafruit BMP280 sensor:

  • Vin στα 3.3V του Arduino ή στον θετικό πόλο της μπαταρίας (3.7V)
  • 3Vo
  • GND στο GND
  • SCK στο Arduino SCL pin (A5)
  • SDO
  • SKI στο Arduino SDA pin (A4)
  • CS

Το ThingSpeak.com




Μπείτε στο www.thingspeak.com και πατήστε εκεί που λέει "Get Started" για να δημιουργήσετε έναν λογαριασμό. Έπειτα πατήστε στο "New Channel" για να φτίαξετε το ΙΟΤ κανάλι σας στο οποίο θα παίρνετε τις τιμές απ' το κύκλωμα σας. Δώστε του ένα όνομα και επιλέξτε τα πρώτα τέσσερα πεδία ονομάζοντας τα:

  • Field1: Barometric Pressure (Pa)
  • Field2: Altimeter (m)
  • Field3: Thermometer (oC)
  • Field4: Humidity (%)

Αν θέλετε κάντε κλικ στο "Make Public?" για να κάνετε δημόσιο το κανάλι σας. Τέλος πατήστε "Save channel".

Το επόμενο βήμα είναι να βρείτε και να αντιγράψετε κάπου το κλειδί του ("Write API Key"), κάντε κλικ στο "Channels", επιλέξτε το κανάλι σας και μεταβείτε στην καρτέλα "ΑPI Keys". Προσοχή! Το κλειδί είναι προσωπικό, μην το μοιράζεστε με άλλους!


Ο κώδικας:

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

Τοποθετήστε τον μικρο-εκλεκτή ATmega328 στο Arduino uno και συνδέστε το με τον υπολογιστή σας. Πατήστε το κουμπί "Edit" και κάντε τις παρακάτω αλλαγές στον κώδικα:

  • #define SSID "name" //το όνομα του WiFi σας π.χ. "MyWiFiNetwork"
  • #define PASS "password" // ο κωδικος του π.χ. "ΑΒ12359n"
  • String msg = "GET /update?key=YOUR_WRITE_KEY"; // το κλειδί απο το προηγούμενο βήμα
  • curPre=1023.25; // Βρείτε εδώ την βαρομετρική πίεση της περιοχή σας. (αλλάζει κάθε μέρα). Την τιμή αυτή την χρησιμοποιούμε για να υπολογίσουμε με ακρίβεια το υψόμετρο (ύψος σε μέτρα απ' την επιφάνεια της θάλασσας) 

Πατήστε το "Run on Arduino". Μόλις ολοκληρωθεί η διαδικασία τοποθετήστε πίσω στο κύκλωμα σας τον ATmega328.

Για όσους δεν ξέρουν τι είναι το Codebender, πρόκειται για το online Arduino IDE το οποίο σας δίνει την δυνατότητα να προγραμματίσετε το Arduino σας μέσα απ' τον browser σας! Πίο εύκολο δεν γίνεται! Δοκιμάστε το πατώντας το πράσινο κουμπί "Run on Arduino"!

Μέγιστη απόσταση:



To τελευταίο βήμα είναι να βρείτε την μέγιστη απόσταση επικοινωνίας μεταξύ συστήματος και ρούτερ. Ανοίξτε ενα παράθυρο γραμμής εντολών (cmd) και γράψτε:

ping 192.168.1.19 -t

Αλλάξτε την ip αν είναι διαφορετική με του δικού σας ESP8266. Η παράμετρος -t θα στέλνει το αίτημα ping για πάντα. Πατήστε το enter και ξεκινήστε να απομακρύνεστε απ' το ρούτερ. Στο σημείο αυτό θα χρειαστείτε και ένα δεύτερο άτομο να παρατηρεί την οθόνη του υπολογιστή σας. Μόλις σταματήσει η μετάδοση θα πάρετε κάποιο μήνυμα του τύπου "Destination host unreachable". Σταματήστε και μετρήστε την απόσταση.

Εγώ με κεραία 5dBi μέτρησα απόσταση περίπου 200 μέτρα, φυσικά σε ανοικτό χώρο. 

Τέλος...


Όλα είναι έτοιμα, τοποθετήστε το σύστημα πάνω στον χαρταετό ομοιόμορφα, μοιράζοντας το βάρος γύρω απ' το κέντρο του, όπως στην παραπάνω φωτογραφία. Αυτό ήταν! Είστε έτοιμοι για πτήση!

Και μια συμβουλή απο εμένα... Χαρταετό δεν πετάμε απαραίτητα μόνο την Καθαρά Δευτέρα, στο εξωτερικό πετάνε κάθε μέρα! Πάρτε τα παιδιά σας, τους φίλους σας και πηγαίνετε να παίξετε! Να περάσετε όμορφα, να γελάσετε! Ξεκολλήστε απ' την τηλεόραση, τον υπολογιστή και τα κινητά σας!

Καλή διασκέδαση λοιπόν! 

Συντάκτης: Βασιλάκης Μιχάλης
www.ardumotive.com Το μεγαλύτερο ελληνικό site για το Arduino