Πίνακας περιεχομένων:

Μίνι μετεωρολογικός σταθμός με Attiny85: 6 βήματα (με εικόνες)
Μίνι μετεωρολογικός σταθμός με Attiny85: 6 βήματα (με εικόνες)

Βίντεο: Μίνι μετεωρολογικός σταθμός με Attiny85: 6 βήματα (με εικόνες)

Βίντεο: Μίνι μετεωρολογικός σταθμός με Attiny85: 6 βήματα (με εικόνες)
Βίντεο: Arduino Project: Temperature and Humidity monitor Tutorial with DHT11 (or DHT22) sensor LCD shield. 2024, Ιούλιος
Anonim
Μίνι μετεωρολογικός σταθμός με Attiny85
Μίνι μετεωρολογικός σταθμός με Attiny85
Μίνι μετεωρολογικός σταθμός με Attiny85
Μίνι μετεωρολογικός σταθμός με Attiny85
Μίνι μετεωρολογικός σταθμός με Attiny85
Μίνι μετεωρολογικός σταθμός με Attiny85

Σε ένα πρόσφατο διδακτικό Indigod0g περιέγραψε έναν μίνι μετεωρολογικό σταθμό που λειτουργεί αρκετά καλά, χρησιμοποιώντας δύο Arduinos. Maybeσως δεν θέλουν όλοι να θυσιάσουν 2 Arduinos για να πάρουν μετρήσεις υγρασίας και θερμοκρασίας και σχολίασα ότι θα πρέπει να είναι δυνατόν να γίνει μια παρόμοια λειτουργία με δύο Attiny85. Υποθέτω ότι η ομιλία είναι εύκολη, οπότε καλύτερα να βάζω τα χρήματά μου εκεί που είναι το στόμα μου.

Στην πραγματικότητα, αν συνδυάσω δύο προηγούμενες οδηγίες, έγραψα:

Διεπαφή LCD 2-Wire για Arduino ή Attiny andReceiving και αποστολής δεδομένων μεταξύ Attiny85 (Arduino IDE 1.06) τότε το μεγαλύτερο μέρος της εργασίας έχει ήδη ολοκληρωθεί. Απλώς πρέπει να προσαρμόσετε λίγο το λογισμικό.

Επέλεξα για μια λύση δύο καλωδίων LCD με έναν καταχωρητή αλλαγής και όχι μια οθόνη LCD I2C επειδή στο Attiny ο καταχωρητής αλλαγής ταχυτήτων είναι ευκολότερο να εφαρμοστεί από το δίαυλο I2C. Ωστόσο … αν θέλετε για παράδειγμα να διαβάσετε έναν αισθητήρα πίεσης BMP180 ή BMP085, χρειάζεστε το I2C για αυτό ούτως ή άλλως, ώστε επίσης να χρησιμοποιήσετε μια LCD I2C. Το TinyWireM είναι μια καλή βιβλιοθήκη για I2C σε ένα Attiny (αλλά απαιτεί επιπλέον χώρο).

BOM Ο πομπός: DHT11 Attiny85 10 k αντίσταση 433MHz μονάδα πομπού

Υποδοχή δέκτη Attiny85 10k αντίσταση 433 MHz δέκτη

Η οθόνη 74LS164 shift shift 1N4148 δίοδος 2x1k αντίσταση 1x1k μεταβλητή αντίσταση μια οθόνη LCD 2x16

Βήμα 1: Μίνι μετεωρολογικός σταθμός με Attiny85: the Transmitter

Μίνι μετεωρολογικός σταθμός με Attiny85: the Transmitter
Μίνι μετεωρολογικός σταθμός με Attiny85: the Transmitter
Μίνι μετεωρολογικός σταθμός με Attiny85: the Transmitter
Μίνι μετεωρολογικός σταθμός με Attiny85: the Transmitter
Μίνι μετεωρολογικός σταθμός με Attiny85: the Transmitter
Μίνι μετεωρολογικός σταθμός με Attiny85: the Transmitter
Μίνι μετεωρολογικός σταθμός με Attiny85: the Transmitter
Μίνι μετεωρολογικός σταθμός με Attiny85: the Transmitter

Ο πομπός είναι μια πολύ βασική διαμόρφωση του Attiny85 με αντίσταση έλξης στη γραμμή επαναφοράς. Μια μονάδα πομπού είναι προσαρτημένη στην ψηφιακή ακίδα '0' και η καρφίτσα δεδομένων DHT11 συνδέεται με την ψηφιακή ακίδα 4. Συνδέστε ένα καλώδιο 17,2 cm ως κεραία (για μια πολύ καλύτερη κεραία δείτε το βήμα 5). Το λογισμικό έχει ως εξής:

// θα λειτουργήσει στο Attiny // RF433 = D0 pin 5

// DHT11 = D4 pin 3 // libraries #include // From Rob Tillaart #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 // pin όπου είναι συνδεδεμένος ο πομπός σας // οι μεταβλητές επιπλέουν h = 0? float t = 0; int transmit_t = 0; int transmit_h = 0; int transmit_data = 0; void setup () {pinMode (1, INPUT); man.setupTransmit (TX_PIN, MAN_1200); } void loop () {int chk = DHT11.read11 (DHT11PIN); h = DHT11. υγρασία; t = DHT11.temperature; // Ξέρω, χρησιμοποιώ εδώ 3 ακέραιες μεταβλητές // όπου θα μπορούσα να χρησιμοποιήσω 1 // αλλά αυτό είναι έτσι ώστε να είναι πιο εύκολο να ακολουθήσω το transmit_h = 100* (int) h; transmit_t = (int) t; transmit_data = transmit_h+transmit_t; man.transmit (transmit_data); καθυστέρηση (500)? }

Το λογισμικό χρησιμοποιεί τον κωδικό του Μάντσεστερ για την αποστολή των δεδομένων. Διαβάζει το DHT11 και αποθηκεύει τη θερμοκρασία και την υγρασία σε 2 ξεχωριστούς πλωτήρες. Καθώς ο κώδικας του Μάντσεστερ δεν στέλνει πλωτήρες, αλλά έναν ακέραιο, έχω πολλές επιλογές: 1- χωρίστε τα πλωτήρες σε δύο ακέραιους το καθένα και στείλτε τους2- στείλτε κάθε πλωτήρα ως ακέραιο3- στείλτε τους δύο πλωτήρες ως έναν ακέραιο Αριθμός 1 Πρέπει να συνδυάσω οι ακέραιοι αριθμοί επιπλέουν και πάλι στον δέκτη και πρέπει να προσδιορίσω ποιος ακέραιος είναι τι, κάνοντας τον κώδικα να παραμορφωθεί Με την επιλογή 2 πρέπει ακόμα να προσδιορίσω ποιος ακέραιος είναι για υγρασία και ποιος για θερμοκρασία. Δεν μπορώ να ακολουθήσω την ακολουθία μόνο σε περίπτωση που ένας ακέραιος αριθμός χαθεί στη μετάδοση, οπότε θα χρειαστεί να στείλω ένα αναγνωριστικό προσαρτημένο στον ακέραιο. Με την επιλογή 3, μπορώ να στείλω μόνο έναν ακέραιο. Προφανώς αυτό κάνει τις ενδείξεις λίγο λιγότερο ακριβείς - εντός 1 βαθμού- και δεν μπορεί κανείς να στείλει θερμοκρασίες κάτω από το μηδέν, αλλά είναι απλός κώδικας και υπάρχουν τρόποι γύρω από αυτό. Προς το παρόν, πρόκειται μόνο για την αρχή. Έτσι, αυτό που κάνω είναι να μετατρέψω τα πλωτήρες σε ακέραιους αριθμούς και να πολλαπλασιάσω την υγρασία με 100. Στη συνέχεια, προσθέτω τη θερμοκρασία στην πολλαπλασιασμένη υγρασία. Λαμβάνοντας υπόψη το γεγονός ότι η υγρασία δεν θα είναι ποτέ 100% ο μέγιστος αριθμός που θα πάρω είναι 9900. Δεδομένου ότι η θερμοκρασία δεν θα είναι πάνω από 100 μοίρες, ο μέγιστος αριθμός θα είναι 99, επομένως ο υψηλότερος αριθμός που θα στείλω είναι 9999 και είναι εύκολο να διαχωριστεί στην πλευρά του δέκτη. Φυσικά Ο υπολογισμός μου στον οποίο χρησιμοποιώ 3 ακέραιους αριθμούς είναι υπερβολικός καθώς θα μπορούσε εύκολα να γίνει με 1 μεταβλητή. Απλώς ήθελα να κάνω τον κώδικα πιο εύκολο να τον ακολουθήσω. Ο κώδικας μεταγλωττίζεται τώρα ως:

Δυαδικό μέγεθος σκίτσου: 2, 836 byte (μέγιστο 8, 192 byte) έτσι ώστε να ταιριάζει σε ένα Attiny 45 ή 85ΣΗΜΕΙΩΣΗ η βιβλιοθήκη dht.h που χρησιμοποιώ είναι αυτή του Rob Tillaart. Αυτή η βιβλιοθήκη είναι επίσης κατάλληλη για DHT22. Χρησιμοποιώ την έκδοση 1.08. Ωστόσο, το Attiny85 μπορεί να έχει προβλήματα ανάγνωσης ενός DHT22 με χαμηλότερες εκδόσεις της βιβλιοθήκης. Μου έχει επιβεβαιωθεί ότι τα 1.08 και 1.14 -αν και δουλεύω σε ένα κανονικό Arduino- έχουν πρόβλημα να διαβάσουν ένα DHT22 στο Attiny85. Εάν θέλετε να χρησιμοποιήσετε ένα DHT22 στο Attiny85, χρησιμοποιήστε την έκδοση 1.20 αυτής της βιβλιοθήκης. Όλα έχουν να κάνουν με το χρονοδιάγραμμα. Η έκδοση 1.20 της βιβλιοθήκης έχει ταχύτερη ανάγνωση. (Ευχαριστώ για αυτήν την εμπειρία χρήστη Jeroen)

Βήμα 2: Μίνι μετεωρολογικός σταθμός με Attiny85: the Receiver

Μίνι Μετεωρολογικός Σταθμός Με Attiny85: Ο Δέκτης
Μίνι Μετεωρολογικός Σταθμός Με Attiny85: Ο Δέκτης

Και πάλι το Attiny85 χρησιμοποιείται σε μια βασική διαμόρφωση με τον πείρο Reset τραβηγμένο ψηλά με αντίσταση 10 k. Η μονάδα δέκτη είναι προσαρτημένη στην ψηφιακή ακίδα 1 (ακίδα 6 στο τσιπ). Η οθόνη LCD είναι προσαρτημένη στις ψηφιακές ακίδες 0 και δύο. Συνδέστε ένα καλώδιο 17,2 cm ως κεραία. Ο κωδικός είναι ο εξής:

#περιλαμβάνω

#include LiquidCrystal_SR lcd (0, 2, TWO_WIRE); #define RX_PIN 1 // = φυσικό pin 6 void setup () {lcd.begin (16, 2); lcd.home (); man.setupReceive (RX_PIN, MAN_1200); man.beginReceive (); } void loop () {if (man.receiveComplete ()) {uint16_t m = man.getMessage (); man.beginReceive (); lcd.print ("Υγρασία:"); lcd.print (m/100); lcd.setCursor (0, 1); lcd.print ("Temp"); lcd.print (m%100); }}

Ο κώδικας είναι αρκετά απλός: ο μεταδιδόμενος ακέραιος λαμβάνεται και αποθηκεύεται σε μεταβλητή «m». Διαιρείται με 100 για να δώσει την υγρασία και το μέτρο 100 δίνει τη θερμοκρασία. Ας υποθέσουμε ότι ο ακέραιος αριθμός που ελήφθη ήταν 33253325/100 = 333325 % 100 = 25Αυτός ο κώδικας συγκεντρώνεται ως 3380 byte και επομένως μπορεί να χρησιμοποιηθεί μόνο με attiny85 και όχι με 45

Βήμα 3: Μίνι μετεωρολογικός σταθμός με Attiny85/45: η οθόνη

Μίνι μετεωρολογικός σταθμός με Attiny85/45: η οθόνη
Μίνι μετεωρολογικός σταθμός με Attiny85/45: η οθόνη
Μίνι μετεωρολογικός σταθμός με Attiny85/45: η οθόνη
Μίνι μετεωρολογικός σταθμός με Attiny85/45: η οθόνη

Για την οθόνη είναι προτιμότερο να αναφέρομαι στον οδηγό μου σε οθόνη δύο συρμάτων. Εν ολίγοις, μια κοινή οθόνη 16x2 χρησιμοποιεί ένα shiftregister για να μπορεί να λειτουργεί με δύο ψηφιακές ακίδες. Φυσικά αν προτιμάτε να χρησιμοποιήσετε μια έτοιμη οθόνη I2C, δηλαδή είναι επίσης δυνατό, αλλά στη συνέχεια πρέπει να εφαρμόσετε ένα πρωτόκολλο I2C στο Attiny. Το πρωτόκολλο Tinywire μπορεί να το κάνει αυτό. Αν και ορισμένες πηγές λένε ότι αυτό περιμένει ένα ρολόι 1 Mhz, δεν είχα κανένα πρόβλημα (σε άλλο έργο) να το χρησιμοποιήσω στα 8Mhz Πάντως απλά δεν ασχολήθηκα εδώ και χρησιμοποίησα ένα μητρώο βάρδιας.

Βήμα 4: Μίνι μετεωρολογικός σταθμός με Attiny85/45: Δυνατότητες/Συμπεράσματα

Μίνι Μετεωρολογικός Σταθμός Με Attiny85/45: Δυνατότητες/Συμπεράσματα
Μίνι Μετεωρολογικός Σταθμός Με Attiny85/45: Δυνατότητες/Συμπεράσματα
Μίνι Μετεωρολογικός Σταθμός Με Attiny85/45: Δυνατότητες/Συμπεράσματα
Μίνι Μετεωρολογικός Σταθμός Με Attiny85/45: Δυνατότητες/Συμπεράσματα
Μίνι Μετεωρολογικός Σταθμός Με Attiny85/45: Δυνατότητες/Συμπεράσματα
Μίνι Μετεωρολογικός Σταθμός Με Attiny85/45: Δυνατότητες/Συμπεράσματα

Όπως είπα, έκανα αυτό το εγχειρίδιο για να δείξω ότι μπορεί κανείς να φτιάξει ένα μίνι μετεωρολογικό σταθμό με δύο attiny85 (ακόμη και με ένα attiny85+ 1 attiny45). Στέλνει μόνο υγρασία και θερμοκρασία, χρησιμοποιώντας ένα DHT11. Ωστόσο, το Attiny διαθέτει 5 ψηφιακές ακίδες για χρήση, 6 ακόμη και με κάποια τέχνασμα. Ως εκ τούτου, είναι δυνατή η αποστολή δεδομένων από περισσότερους αισθητήρες. Στο έργο μου- όπως φαίνεται στις φωτογραφίες στο stripboard και σε επαγγελματικό PCB (OSHPark)- στέλνω/λαμβάνω δεδομένα από DHT11, από LDR και από PIR, όλα χρησιμοποιώντας Ο περιορισμός στη χρήση ενός attiny85 ως δέκτη είναι η παρουσίαση των δεδομένων σε ένα φανταχτερό ύφος. Καθώς η μνήμη είναι περιορισμένη: Κείμενα όπως "Θερμοκρασία, Υγρασία, επίπεδο φωτός, πλησιάζει το θέμα" θα γεμίσουν πολύ γρήγορα πολύτιμο χώρο μνήμης. Ωστόσο, δεν υπάρχει λόγος να χρησιμοποιείτε δύο Arduino μόνο για να στείλετε/λάβετε θερμοκρασία και υγρασία. Επιπλέον, είναι δυνατό για να κοιμηθεί ο πομπός και να ξυπνήσει μόνο για να στέλνει δεδομένα, λένε κάθε 10 λεπτά και έτσι να τα τροφοδοτεί από ένα κελί κουμπιού. Προφανώς, δεν μπορούν να σταλούν μόνο δεδομένα θερμοκρασίας ή υγρασίας, αλλά μπορεί να αποσταλεί μια σειρά από μικρούς πομπούς επίσης μετρήσεις υγρασίας του εδάφους, ή προσθέστε ένα ανεμόμετρο ή έναν μετρητή βροχής

Βήμα 5: Μίνι μετεωρολογικός σταθμός: η κεραία

Μίνι μετεωρολογικός σταθμός: η κεραία
Μίνι μετεωρολογικός σταθμός: η κεραία

Η κεραία είναι ένα σημαντικό μέρος οποιασδήποτε ρύθμισης 433Mhz. Πειραματίστηκα με την τυπική κεραία «ράβδου» 17,2 cm και είχα ένα σύντομο φλερτ με μια κεραία πηνίου. Αυτό που φάνηκε να λειτουργεί καλύτερα είναι μια κεραία με πηνίο που είναι εύκολο να κατασκευαστεί. Το σχέδιο είναι από τον Ben Schueler και προφανώς δημοσιεύτηκε στο περιοδικό 'Elektor'. Είναι εύκολο να ακολουθήσετε ένα PDF με την περιγραφή αυτής της "Κεραίας ψύξης αέρα 433 MHz". (Ο σύνδεσμος εξαφανίστηκε, ελέγξτε εδώ)

Βήμα 6: Προσθήκη BMP180

Προσθήκη BMP180
Προσθήκη BMP180

Θέλετε να προσθέσετε αισθητήρα βαρομετρικής πίεσης όπως το BMP180; ελέγξτε το άλλο μου οδηγό για αυτό.

Συνιστάται: