Ασύρματο θερμόμετρο χρησιμοποιώντας 433 MHz RF Link χρησιμοποιώντας Arduino

Δοκιμάστε Το Όργανο Μας Για Την Εξάλειψη Των Προβλημάτων





Σε αυτήν την ανάρτηση πρόκειται να κατασκευάσουμε ένα ασύρματο θερμόμετρο με βάση το Arduino το οποίο μπορεί να παρακολουθεί τη θερμοκρασία δωματίου και την εξωτερική θερμοκρασία περιβάλλοντος. Τα δεδομένα μεταδίδονται και λαμβάνονται μέσω συνδέσμου RF 433 MHz.

Χρησιμοποιώντας 433MHz RF Module και DHT11 Sensor

Το προτεινόμενο έργο χρησιμοποιεί το Arduino ως εγκέφαλο και ως καρδιά Μονάδα πομπού / δέκτη 433 MHz .



Το έργο χωρίζεται σε δύο ξεχωριστά κυκλώματα, ένα με δέκτη 433 MHz, οθόνη LCD και αισθητήρα DHT11 που θα τοποθετηθούν μέσα στο δωμάτιο και επίσης μετρά τη θερμοκρασία δωματίου .

Ένα άλλο κύκλωμα έχει πομπό 433MHz, Αισθητήρας DHT11 για μέτρηση εξωτερικής θερμοκρασίας περιβάλλοντος. Και το δύο κύκλωμα έχει ένα arduino το καθένα.



Το κύκλωμα που βρίσκεται μέσα στο δωμάτιο θα εμφανίζει τις ενδείξεις εσωτερικής και εξωτερικής θερμοκρασίας στην οθόνη LCD.

Ας ρίξουμε μια ματιά στη μονάδα πομπού / δέκτη 433 MHz.

Μονάδα πομπού / δέκτη 433 MHz.

Οι μονάδες πομπού και δέκτη φαίνονται παραπάνω, είναι ικανές για απλή επικοινωνία (μονόδρομος). Ο δέκτης διαθέτει 4 ακίδες Vcc, GND και DATA. Υπάρχουν δύο ακίδες DATA, είναι ίδιες και μπορούμε να εξάγουμε τα δεδομένα από οποιαδήποτε από τις δύο ακίδες.

Ο πομπός είναι πολύ πιο απλός, έχει απλώς καρφίτσα εισόδου Vcc, GND και DATA. Πρέπει να συνδέσουμε μια κεραία και στις δύο ενότητες που περιγράφεται στο τέλος του άρθρου, χωρίς η επικοινωνία μεταξύ τους να μην πραγματοποιηθεί πέρα ​​από λίγες ίντσες.

Ας δούμε πώς επικοινωνούν αυτές οι ενότητες.

Τώρα ας υποθέσουμε ότι εφαρμόζουμε παλμό ρολογιού 100Hz στον ακροδέκτη εισόδου δεδομένων του πομπού. Ο δέκτης θα λάβει ακριβή αντίγραφο του σήματος στην καρφίτσα δεδομένων του δέκτη.

Αυτό είναι απλό, σωστά; Ναι… αλλά αυτή η ενότητα λειτουργεί σε AM και είναι ευαίσθητη στον θόρυβο. Από την παρατήρηση του συγγραφέα εάν ο πείρος δεδομένων του πομπού έμεινε χωρίς κανένα σήμα για περισσότερα από 250 χιλιοστά του δευτερολέπτου, ο πείρος εξόδου δεδομένων δέκτη παράγει τυχαία σήματα.

Επομένως, είναι κατάλληλο μόνο για μη κρίσιμες μεταδόσεις δεδομένων. Ωστόσο, αυτό το έργο λειτουργεί πολύ καλά με αυτήν την ενότητα.

Τώρα ας προχωρήσουμε στα σχήματα.

ΔΕΚΤΗΣ:


σύνδεση arduino σε οθόνη LCD. Ποτενσιόμετρο 10Κ

Το παραπάνω κύκλωμα είναι σύνδεση arduino σε οθόνη LCD. Το ποτενσιόμετρο 10K παρέχεται για τη ρύθμιση της αντίθεσης της οθόνης LCD.

Ασύρματο θερμόμετρο χρησιμοποιώντας 433 MHz RF Link και Arduino

Τα παραπάνω είναι το κύκλωμα δέκτη. Η οθόνη LCD πρέπει να είναι συνδεδεμένη σε αυτό το arduino.

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

Επικεφαλής ραδιοφώνου: github.com/PaulStoffregen/RadioHead

Βιβλιοθήκη αισθητήρων DHT: https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip

Πρόγραμμα για δέκτη:

//--------Program Developed by R.Girish-----//
#include
#include
#include
#include
#define DHTxxPIN A0
LiquidCrystal lcd(12,11,5,4,3,2)
RH_ASK driver(2000, 7, 9, 10)
int ack = 0
dht DHT
void setup()
{
Serial.begin(9600)
lcd.begin(16,2)
if (!driver.init())
Serial.println('init failed')
}
void loop()
{
ack = 0
int chk = DHT.read11(DHTxxPIN)
switch (chk)
{
case DHTLIB_ERROR_CONNECT:
ack = 1
lcd.setCursor(0,0)
lcd.print('INSIDE:')
lcd.print('NO DATA')
delay(1000)
break
}
if(ack == 0)
{
lcd.setCursor(0,0)
lcd.print('INSIDE:')
lcd.print(DHT.temperature)
lcd.print(' C')
delay(2000)
}
uint8_t buf[RH_ASK_MAX_MESSAGE_LEN]
uint8_t buflen = sizeof(buf)
if (driver.recv(buf, &buflen))
{
int i
String str = ''
for(i = 0 i {
str += (char)buf[i]
}
lcd.setCursor(0,1)
lcd.print('OUTSIDE:')
lcd.print(str)
Serial.println(str)
delay(2000)
}
}
//--------Program Developed by R.Girish-----//

Πομπός:

Ασύρματο πομπό θερμόμετρου

Τα παραπάνω είναι το σχήμα για πομπό, το οποίο είναι αρκετά απλό ως δέκτης. Εδώ χρησιμοποιούμε έναν άλλο πίνακα arduino. Ο αισθητήρας DHT11 θα ανιχνεύσει τη θερμοκρασία περιβάλλοντος και θα στείλει πίσω στη μονάδα δέκτη.

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

Πρόγραμμα για πομπό:

//------Program Developed by R.Girish----//
#include
#include
#define DHTxxPIN A0
#include
int ack = 0
RH_ASK driver(2000, 9, 2, 10)
dht DHT
void setup()
{
Serial.begin(9600)
if (!driver.init())
Serial.println('init failed')
}
void loop()
{
ack = 0
int chk = DHT.read11(DHTxxPIN)
switch (chk)
{
case DHTLIB_ERROR_CONNECT:
ack = 1
const char *temp = 'NO DATA'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
break
}
if(ack == 0)
{
if(DHT.temperature == 15)
{
const char *temp = '15.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 16)
{
const char *temp = '16.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 17)
{
const char *temp = '17.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 18)
{
const char *temp = '18.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 19)
{
const char *temp = '19.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 20)
{
const char *temp = '20.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 21)
{
const char *temp = '21.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 22)
{
const char *temp = '22.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 23)
{
const char *temp = '23.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 24)
{
const char *temp = '24.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 25)
{
const char *temp = '25.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 26)
{
const char *temp = '26.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 27)
{
const char *temp = '27.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 28)
{
const char *temp = '28.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 29)
{
const char *temp = '29.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 30)
{
const char *temp = '30.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 31)
{
const char *temp = '31.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 32)
{
const char *temp = '32.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 33)
{
const char *temp = '33.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 34)
{
const char *temp = '34.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 35)
{
const char *temp = '35.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 36)
{
const char *temp = '36.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 37)
{
const char *temp = '37.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 38)
{
const char *temp = '38.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 39)
{
const char *temp = '39.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 40)
{
const char *temp = '40.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 41)
{
const char *temp = '41.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 42)
{
const char *temp = '42.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 43)
{
const char *temp = '43.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 44)
{
const char *temp = '44.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
delay(500)
if(DHT.temperature == 45)
{
const char *temp = '45.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 46)
{
const char *temp = '46.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 47)
{
const char *temp = '47.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 48)
{
const char *temp = '48.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 49)
{
const char *temp = '49.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 50)
{
const char *temp = '50.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
delay(500)
}
}
//------Program Developed by R.Girish----//

Κατασκευή κεραίας:

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

Κεραία RF 433 MHz

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

Πρωτότυπο ασύρματου θερμομέτρου του συγγραφέα χρησιμοποιώντας Arduino και 433 MHz RF Link:

Ασύρματο θερμόμετρο πρωτότυπο χρησιμοποιώντας 433 MHz RF Link και Arduino


Προηγούμενο: Αντιδιαβρωτικοί ανιχνευτές για ελεγκτή στάθμης νερού Επόμενο: L293 Quad Half-H Driver IC Pinout, Datasheet, Application Circuit