Šajā ziņojumā mēs izveidosim Arduino bāzes bezvadu termometru, kas var kontrolēt istabas temperatūru un ārējo apkārtējās vides temperatūru. Dati tiek pārraidīti un saņemti, izmantojot 433 MHz RF saiti.
Izmantojot 433MHz RF moduli un DHT11 sensoru
Ierosinātais projekts izmanto Arduino kā smadzenes un sirdi kā 433 MHz raidītāja / uztvērēja modulis .
Projekts ir sadalīts divās atsevišķās ķēdēs, vienā ar 433 MHz uztvērēju, LCD displeju un DHT11 sensoru, kas tiks izvietoti telpā, kā arī mēra istabas temperatūru .
Citā shēmā ir 433MHz raidītājs, DHT11 sensors ārējās apkārtējās temperatūras mērīšanai. Abās shēmās ir pa vienam arduino.
Telpā ievietotā shēma uz LCD parādīs iekšējās un ārējās temperatūras rādījumus.
Tagad apskatīsim 433 MHz raidītāja / uztvērēja moduli.
Raidītāja un uztvērēja moduļi ir parādīti virs tā, lai tas varētu veikt vienkāršo komunikāciju (vienā virzienā). Uztvērējam ir 4 tapas Vcc, GND un DATA. Ir divi DATA tapas, tie ir vienādi, un mēs varam izvadīt datus no jebkuras no divām tapām.
Raidītājs ir daudz vienkāršāks, un tam ir tikai Vcc, GND un DATA ievades tapa. Mums abiem moduļiem ir jāpievieno antena, kas aprakstīta raksta beigās, bez antenas sakari starp tiem netiks izveidoti tālāk par pāris collām.
Tagad redzēsim, kā šie moduļi sazinās.
Tagad pieņemsim, ka raidītāja datu ievades tapai tiek piemērots pulksteņa impulss 100Hz. Uztvērējs saņems precīzu signāla kopiju uztvērēja datu spraudnī.
Tas ir vienkārši labi? Jā ... bet šis modulis darbojas AM un ir uzņēmīgs pret troksni. Pēc autora novērojuma, ja raidītāja datu tapa atstāja bez signāla ilgāk par 250 milisekundēm, uztvērēja datu izvades tapa rada nejaušus signālus.
Tātad, tas ir piemērots tikai nekritiskai datu pārraidei. Tomēr šis projekts ļoti labi darbojas ar šo moduli.
Tagad pārejam pie shēmām.
UZŅĒMĒJS:
Iepriekš minētā shēma ir arduino līdz LCD displeja savienojums. LCD displeja kontrasta pielāgošanai ir paredzēts 10K potenciometrs.
Iepriekš ir uztvērēja ķēde. LCD displejam jābūt savienotam ar šo arduino.
Pirms koda apkopošanas, lūdzu, lejupielādējiet šos bibliotēkas failus
Radio vadītājs: github.com/PaulStoffregen/RadioHead
DHT sensoru bibliotēka: https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip
Uztvērēja programma:
//--------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-----//
Raidītājs:
Iepriekš minētais ir raidītāja shēma, kas ir diezgan vienkārša kā uztvērējs. Šeit mēs izmantojam citu arduino dēli. DHT11 sensors uztvers apkārtējās vides temperatūru un nosūtīs to atpakaļ uz uztvērēja moduli.
Attālumam starp raidītāju un uztvērēju nedrīkst būt lielāks par 10 metriem. Ja starp tiem ir kādi šķēršļi, pārraides diapazons var samazināties.
Raidītāja programma:
//------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----//
Antenas konstrukcija:
Ja jūs veidojat projektus, izmantojot šo 433 MHz moduļi , stingri ievērojiet tālāk norādītās konstrukcijas detaļas, lai iegūtu labu diapazonu.
Izmantojiet viena kodola vadu, kam jābūt pietiekami izturīgam, lai atbalstītu šo konstrukciju. Lodēšanas savienošanai varat izmantot arī izolētu vara stiepli ar apakšā noņemtu izolāciju. Izveidojiet divus no tiem, vienu raidītājam un otru uztvērējam.
Autora bezvadu termometra prototips, izmantojot Arduino un 433 MHz RF Link:
Pāri: Pretkorozijas zondes ūdens līmeņa kontrolierim Nākamais: L293 Quad Half-H draivera IC izvilkums, datu lapa, lietojumprogrammas shēma