- Potrebne komponente: -
- DS18B20 Senzor temperature:
- Kružni dijagram:-
- Koraci ili tijek koda: -
- Objašnjenje koda:
- Dobivanje podataka s temperaturnog osjetnika DS18B20:
Općenito, temperaturni senzor LM35 koristi se s mikrokontrolerima za mjerenje temperature jer je jeftin i lako dostupan. Ali LM35 daje analogne vrijednosti i trebamo ih pretvoriti u digitalne pomoću ADC-a (Analog to Digital Converter). Ali danas koristimo DS18B20 temperaturni senzor u kojem nam nije potrebna ADC konverzija da bismo izračunali temperaturu. Ovdje ćemo koristiti PIC mikrokontroler s DS18B20 za mjerenje temperature.
Dakle, ovdje gradimo termometar sa sljedećim specifikacijama pomoću mikrokontrolera PIC16F877A iz mikročipa.
- Pokazat će puni raspon temperature od -55 do +125 stupnjeva.
- Prikazati će temperaturu samo ako se temperatura promijeni + / -.2 stupnja.
Potrebne komponente: -
- Pic16F877A - PDIP40 paket
- Daska za kruh
- Pickit-3
- 5V adapter
- LCD JHD162A
- DS18b20 temperaturni senzor
- Žice za povezivanje perifernih uređaja.
- Otpornici 4.7k - 2kom
- 10k lonac
- Kristal od 20 MHz
- 2 kom 33pF keramičkih kondenzatora
DS18B20 Senzor temperature:
DS18B20 je izvrstan senzor za točno određivanje temperature. Ovaj senzor pruža razlučivost od 9 do 12 bita pri osjetljivosti temperature. Ovaj senzor komunicira samo s jednom žicom i ne treba ADC za postizanje analognih temperatura i njihovo digitalno pretvaranje.
Specifikacija senzora je: -
- Mjeri temperature od -55 ° C do + 125 ° C (-67 ° F do + 257 ° F)
- ± 0,5 ° C Točnost od -10 ° C do + 85 ° C
- Programabilna razlučivost od 9 do 12 bita
- Nisu potrebne vanjske komponente
- Senzor koristi 1-Wire® sučelje

Ako pogledamo gornju pinout sliku iz tehničkog lista, možemo vidjeti da senzor izgleda potpuno isto kao BC547 ili BC557 paket TO-92. Prvi je pin uzemljen, drugi je DQ ili podaci, a treći je VCC.
Ispod je električna specifikacija iz tehničkog lista koja će biti potrebna za naš dizajn. Nazivni napon napajanja senzora je od + 3,0 V do + 5,5 V. Također treba povući naponski napon koji je jednak gore navedenom opskrbnom naponu.

Također, postoji granica točnosti koja je + -0,5 stupnjeva Celzijusa za raspon od -10 stupnjeva C do +85 stupnjeva Celzijusa, a točnost se mijenja za cijelu marginu, koja je + -2 stupnjeva za -55 stupnjeva Celzijevih Raspon od 125 stupnjeva.
Ako ponovno pogledamo tablicu podataka, vidjet ćemo specifikaciju veze senzora. Senzor možemo povezati u režimu parazitskog napajanja gdje su potrebne dvije žice, DATA i GND, ili senzor možemo povezati vanjskim napajanjem, gdje su potrebne tri zasebne žice. Koristit ćemo drugu konfiguraciju.

Kako smo sada upoznati s ocjenama snage senzora i područjima povezanima s vezom, sada se možemo usredotočiti na izradu sheme.
Kružni dijagram:-

Ako vidimo shemu spojeva, vidjet ćemo da: -
LCD od 16 x 2 znaka povezan je preko mikrokontrolera PIC16F877A, u kojem su RB0, RB1, RB2 spojeni na LCD pin RS, R / W i E. A RB4, RB5, RB6 i RB7 su povezani preko LCD 4-polnih D4, D5, D6, D7. LCD je povezan u 4-bitnom načinu ili grickajućem načinu.
Kristalni oscilator od 20 MHz s dva keramička kondenzatora od 33 pF povezan je preko OSC1 i OSC2 pina. Omogućit će stalnu taktnu frekvenciju od 20 MHz mikrokontroleru.
DS18B20 je također povezan prema konfiguraciji pina i s otpornim povlačenjem otpora od 4,7 k, kao što je prethodno spomenuto. Sve sam to povezao u ploču.
Ako ste novi u PIC mikrokontroleru, slijedite naše upute za PIC mikrokontroler navodeći u Početak rada s PIC mikrokontrolerom.
Koraci ili tijek koda: -
- Postavite konfiguracije mikrokontrolera koje uključuju konfiguraciju oscilatora.
- Postavite željeni priključak za LCD, uključujući TRIS registar.
- Svaki ciklus sa senzorom ds18b20 započinje resetiranjem, pa ćemo resetirati ds18b20 i pričekati impuls prisutnosti.
- Napišite tražilicu i postavite razlučivost senzora 12bit.
- Preskočite očitanje ROM-a nakon čega slijedi impuls resetiranja.
- Pošaljite naredbu za pretvaranje temperature.
- Očitajte temperaturu s podloge za ogrebotine.
- Provjerite negativnu ili pozitivnu vrijednost temperature.
- Ispišite temperaturu na LCD zaslonu 16x2.
- Pričekajte promjene temperature za +/-. 20 Celzijevih stupnjeva.

Objašnjenje koda:
Potpuni kod za ovaj digitalni termometar dat je na kraju ovog vodiča s demonstracijskim videom. Trebat će vam neke datoteke zaglavlja za pokretanje ovog programa koje možete preuzeti ovdje.
Prvo, moramo postaviti konfiguracijske bitove u mikrokontroleru pic, a zatim započeti s void main funkcijom.
Zatim se ispod uključuju četiri reda za uključivanje datoteke zaglavlja knjižnice, lcd.h i ds18b20.h . A xc.h je za zaglavnu datoteku mikrokontrolera.
#include
Te se definicije koriste za slanje naredbe na senzor temperature. Naredbe su navedene u listi podataka senzora.
#define skip_rom 0xCC #define convert_temp 0x44 #define write_scratchpad 0x4E #define resolution_12bit 0x7F #define read_scratchpad 0xBE

Ova tablica 3 iz tablice podataka senzora prikazuje sve naredbe u kojima se makronaredbe koriste za slanje odgovarajućih naredbi.
Temperatura će se prikazati na zaslonu samo ako se temperatura promijeni +/- .20 stupnjeva. Ovaj temperaturni jaz možemo promijeniti iz ove temp_gap makronaredbe. Promjenom vrijednosti na ovoj makronaredbi promijenit će se specifikacija.
Ostale dvije plutajuće varijable korištene za pohranu prikazanih podataka o temperaturi i njihovo razlikovanje s temperaturnim razmakom
#define temp_gap 20 plutajuće pre_val = 0, aft_val = 0;
U void main () funkciji, lcd_init () ; je funkcija za inicijalizaciju LCD-a. Ova funkcija lcd_init () poziva se iz biblioteke lcd.h.
TRIS registri koriste se za odabir I / O pinova kao ulaza ili izlaza. Dvije nepotpisane kratke varijable TempL i TempH koriste se za pohranu podataka od 12- bitne razlučivosti s temperaturnog senzora.
void main (void) {TRISD = 0xFF; TRISA = 0x00; TRISB = 0x00; //TRISDbits_t.TRISD6 = 1; nepotpisani kratki TempL, TempH; nepotpisano int t, t2; plutajuća razlika1 = 0, razlika2 = 0; lcd_init ();
Pogledajmo while petlju, ovdje lomimo while (1) petlju na male dijelove.
Te se crte koriste za otkrivanje povezanosti senzora temperature ili ne.
while (ow_reset ()) {lcd_com (0x80); lcd_puts ("Molimo povežite se"); lcd_com (0xC0); lcd_puts ("Temp-Sense Sonda"); }
Korištenjem ovog segmenta koda inicijaliziramo senzor i šaljemo naredbu za pretvaranje temperature.
lcd_puts (""); ow_reset (); write_byte (write_scratchpad); write_byte (0); write_byte (0); bajt_zapisi (rezolucija_12bit); // 12bitna razlučivost ow_reset (); write_byte (skip_rom); write_byte (convert_temp);
Ovaj kod služi za pohranu podataka o temperaturi od 12 bita u dvije nepotpisane kratke varijable.
while (read_byte () == 0xff); __zakasniti_ms (500); ow_reset (); write_byte (skip_rom); write_byte (read_scratchpad); TempL = read_byte (); TempH = read_byte ();
Tada ako provjerite donji cjeloviti kod, stvorit ćemo uvjet if-else kako bismo saznali temperaturni znak je li pozitivan ili negativan.
Korištenjem If izjavu koda, manipulirati podacima i vidjeti da li je temperatura negativna ili ne i utvrditi promjene temperature u +/-.20 rasponu stupnjeva ili ne. U drugom dijelu provjerili smo je li temperatura pozitivna ili ne i otkrivamo promjene temperature.
kodirati
Dobivanje podataka s temperaturnog osjetnika DS18B20:
Pogledajmo vremenski razmak 1-Wire® sučelja. Koristimo kristale od 20 MHz. Ako zavirimo u datoteku ds18b20.c, vidjet ćemo
#define _XTAL_FREQ 20000000
Ova se definicija koristi za rutinu odgode kompajlera XC8. 20 MHz je postavljena kao frekvencija kristala.
Napravili smo pet funkcija
- ow_reset
- čitaj_bit
- read_byte
- zapis_bit
- write_byte
1-Wire ® protokol za komunikaciju treba stroge termine povezane s vremenom. Unutar tablice podataka dobit ćemo savršene informacije povezane s vremenskim intervalima.

Unutar donje funkcije stvorili smo točan vremenski interval. Važno je stvoriti točno kašnjenje za zadržavanje i otpuštanje te kontrolirati TRIS bit odgovarajućeg ulaza senzora.
nepotpisani char ow_reset (void) {DQ_TRIS = 0; // Tris = 0 (izlaz) DQ = 0; // postavimo pin # na low (0) __delay_us (480); // 1 žica zahtijeva vremensko kašnjenje DQ_TRIS = 1; // Tris = 1 (ulaz) __delay_us (60); // 1 žica zahtijeva vremensko kašnjenje ako (DQ == 0) // ako postoji pluse prisutnosti {__delay_us (480); povratak 0; // vratimo 0 (1-žica je prisutnost)} else {__delay_us (480); povratak 1; // vratimo 1 (1-žica NIJE prisutnost)}} // 0 = prisutnost, 1 = nema dijela
Sada, prema dolje opisu vremenskog slota koji se koristi u čitanju i pisanju , stvorili smo funkciju čitanja i pisanja .

nepotpisani char read_bit (void) {nepotpisani char i; DQ_TRIS = 1; DQ = 0; // povucite DQ nisko za početak vremenskog intervala DQ_TRIS = 1; DQ = 1; // zatim vratimo visoko za (i = 0; i <3; i ++); // odgoda 15us od početka povrata vremenskog intervala (DQ); // povratna vrijednost DQ retka} void write_bit (char bitval) {DQ_TRIS = 0; DQ = 0; // povucite DQ nisko za početak vremenskog intervala ako (bitval == 1) DQ = 1; // vratimo DQ visok ako napišemo 1 __delay_us (5); // zadrži vrijednost za ostatak vremenskog intervala DQ_TRIS = 1; DQ = 1; } // Odgoda osigurava 16us po petlji, plus 24us. Stoga je kašnjenje (5) = 104us
Dalje ovdje provjerite sve povezane datoteke zaglavlja i.c.
Dakle, na ovaj način možemo koristiti DS18B20 senzor za dobivanje temperature pomoću PIC mikrokontrolera.
Ako želite napraviti jednostavni digitalni termometar s LM35, naručite dolje projekte s drugim mikrokontrolerima:
- Mjerenje sobne temperature s Raspberry Pi
- Digitalni termometar koji koristi Arduino i LM35
- Digitalni termometar koji koristi LM35 i 8051
- Mjerenje temperature pomoću LM35 i AVR mikrokontrolera
