Langaton lämpömittari 433 MHz: n RF-linkkiä käyttäen Arduinoa

Kokeile Instrumenttia Ongelmien Poistamiseksi





Tässä viestissä aiomme rakentaa Arduino-pohjaisen langattoman lämpömittarin, joka voi tarkkailla huoneen lämpötilaa ja ulkoista ympäristön lämpötilaa. Tiedot lähetetään ja vastaanotetaan 433 MHz RF-linkin kautta.

Käyttämällä 433 MHz: n RF-moduulia ja DHT11-anturia

Ehdotettu projekti käyttää Arduinoa aivoina ja sydän kuin 433 MHz lähetin / vastaanotinmoduuli .



Projekti on jaettu kahteen erilliseen piiriin, yhteen, jossa on 433 MHz: n vastaanotin, LCD-näyttö ja DHT11-anturi, jotka sijoitetaan huoneen sisälle, sekä mittaa huoneen lämpötilan .

Toisessa piirissä on 433 MHz lähetin, DHT11-anturi ulkolämpötilan mittaamiseen. Molemmissa piireissä on yksi arduino.



Huoneen sisäpuolella oleva piiri näyttää sisäiset ja ulkoiset lämpötilalukemat LCD-näytöllä.

Katsotaan nyt 433 MHz lähetin / vastaanotinmoduulia.

433 MHz lähetin / vastaanotinmoduuli.

Lähetin- ja vastaanotinmoduulit on esitetty yllä, ja ne pystyvät yksisuuntaiseen tiedonsiirtoon (yksisuuntainen). Vastaanottimessa on 4 nastaa Vcc-, GND- ja DATA-nastaa. DATA-nastoja on kaksi, ne ovat samat ja voimme lähettää tiedot jommastakummasta kahdesta nastasta.

Lähetin on paljon yksinkertaisempi, sillä siinä on vain Vcc-, GND- ja DATA-tulotappi. Meidän on liitettävä antenni molempiin moduuleihin, jotka on kuvattu artikkelin lopussa, ilman että niiden välistä antenniviestintää muodostetaan muutaman tuuman ulkopuolella.

Katsotaan nyt, kuinka nämä moduulit kommunikoivat.

Oletetaan nyt, että käytämme 100 Hz: n kellopulssia lähettimen datan syöttötapiin. Vastaanotin saa tarkan kopion signaalista vastaanottimen datanastalla.

Se on yksinkertaista oikein? Joo ... mutta tämä moduuli toimii AM-tilassa ja on altis melulle. Kirjoittajan havainnoista, jos lähettimen datanasta jätti ilman signaalia yli 250 millisekunnin ajaksi, vastaanottimen datan ulostulotappi tuottaa satunnaisia ​​signaaleja.

Joten se soveltuu vain ei-kriittisiin tiedonsiirtoihin. Tämä projekti toimii kuitenkin hyvin tämän moduulin kanssa.

Siirrytään nyt kaavioon.

VASTAANOTIN:


arduino - LCD-näyttöyhteys. 10K potentiometri

Yllä oleva piiri on arduino-LCD-näyttöyhteys. 10K-potentiometri on tarkoitettu LCD-näytön kontrastin säätämiseen.

Langaton lämpömittari, joka käyttää 433 MHz: n RF-linkkiä ja Arduinoa

Edellä on vastaanotinpiiri. LCD-näytön tulee olla kytkettynä tähän arduinoon.

Lataa seuraavat kirjastotiedostot ennen koodin kokoamista

Radio Head: github.com/PaulStoffregen/RadioHead

DHT-anturikirjasto: https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip

Vastaanottimen ohjelma:

//--------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-----//

Lähetin:

Langaton lämpömittarilähetin

Edellä on kaaviokuva lähettimestä, joka on melko yksinkertainen kuin vastaanotin. Tässä käytämme toista arduino-korttia. DHT11-anturi tunnistaa ulkoilman lämpötilan ja lähettää takaisin vastaanottimen moduuliin.

Lähettimen ja vastaanottimen välisen etäisyyden tulisi olla enintään 10 metriä. Jos niiden välillä on esteitä, lähetysalue voi pienentyä.

Lähettimen ohjelma:

//------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----//

Antennin rakentaminen:

Jos rakennat tätä käyttäviä projekteja 433 MHz: n moduulit , noudata alla olevia rakenteellisia yksityiskohtia tiukasti hyvän kantaman saavuttamiseksi.

433 MHz: n RF-antenni

Käytä yhden johtimen johtoa, jonka tulisi olla riittävän tukeva tukemaan tätä rakennetta. Juotosliitokseen voidaan käyttää myös eristettyä kuparilangkaa, jonka eristys on poistettu alhaalta. Tee kaksi näistä, yksi lähettimelle ja toinen vastaanottimelle.

Kirjoittajan langaton lämpömittarin prototyyppi, joka käyttää Arduinoa ja 433 MHz: n RF-linkkiä:

Langaton lämpömittarin prototyyppi, joka käyttää 433 MHz: n RF-linkkiä ja Arduinoa


Pari: Korroosionestokoettimet vedenpinnan säätimelle Seuraava: L293 Quad Half-H -ohjaimen IC-liitäntä, tuotetiedot, sovelluspiiri