- Kinakailangan ang Mga Bahagi:
- Diagram ng Circuit:
- Pagsukat ng Temperatura sa LM35 gamit ang 8051:
- 16x2 LCD:
- ADC0804 IC:
- LM35 Temperatura Sensor:
- Paliwanag sa code:
Minsan nahihirapan ang mga tao na basahin ang temperatura mula sa analog thermometer dahil sa mga pagbabago-bago. Kaya dito magtatayo kami ng isang simpleng Digital thermometer gamit ang 8051 microcontroller kung saan ginagamit ang sensor ng LM35 para sa pagsukat ng temperatura. Gumamit din kami ng LM35 upang bumuo ng digital thermometer gamit ang Arduino, NodeMCU, PIC, Raspberry Pi at iba pang mga microcontroller.
Ang proyektong ito ay maglilingkod din bilang isang tamang interfacing ng ADC0804 na may 8051 at 16 * 2 LCD na may 8051 microcontroller.
Kinakailangan ang Mga Bahagi:
- 8051 development board
- Board ng ADC0804
- 16 * 2 LCD display
- LM35 sensor
- Potensyomiter
- Jumper wires
Diagram ng Circuit:
Ang diagram ng circuit para sa Digital Thermometer Circuit na gumagamit ng LM35 ay ibinibigay sa ibaba:
Pagsukat ng Temperatura sa LM35 gamit ang 8051:
Ang 8051 microcontroller ay isang 8 bit microcontroller na mayroong 128 bytes ng sa chip RAM, 4K bytes ng sa chip ROM, dalawang timer, isang serial port at apat na 8bit port. Ang 8052 microcontroller ay isang extension ng microcontroller. Ipinapakita ng talahanayan sa ibaba ang paghahambing ng 8051 mga miyembro ng pamilya.
Tampok |
8051 |
8052 |
ROM (sa bytes) |
4K |
8K |
RAM (bytes) |
128 |
256 |
Mga timer |
2 |
3 |
I / O mga pin |
32 |
32 |
Serial port |
1 |
1 |
Nakagambala ang mga mapagkukunan |
6 |
8 |
16x2 LCD:
Ang 16 * 2 LCD ay isang malawakang ginagamit na display para sa mga naka-embed na application. Narito ang maikling paliwanag tungkol sa mga pin at pagtatrabaho ng 16 * 2 LCD display. Mayroong dalawang napakahalagang rehistro sa loob ng LCD. Ang mga ito ay data register at command register. Ginagamit ang command register upang magpadala ng mga utos tulad ng malinaw na display, cursor sa bahay atbp. Ginagamit ang rehistro ng data upang magpadala ng data na ipapakita sa 16 * 2 LCD. Ipinapakita sa ibaba ng talahanayan ang paglalarawan ng pin ng 16 * 2 lcd.
Pin |
Simbolo |
Ako / O |
Paglalarawan |
1 |
Vss |
- |
Lupa |
2 |
Vdd |
- |
+ 5V power supply |
3 |
Vee |
- |
Suplay ng kuryente upang makontrol ang kaibahan |
4 |
Ang RS |
Ako |
RS = 0 para sa rehistro ng utos, RS = 1 para sa pagrehistro ng data |
5 |
RW |
Ako |
R / W = 0 para sa pagsusulat, R / W = 1 para basahin |
6 |
E |
Ako / O |
Paganahin |
7 |
D0 |
Ako / O |
8-bit data bus (LSB) |
8 |
D1 |
Ako / O |
8-bit data bus |
9 |
D2 |
Ako / O |
8-bit data bus |
10 |
D3 |
Ako / O |
8-bit data bus |
11 |
D4 |
Ako / O |
8-bit data bus |
12 |
D5 |
Ako / O |
8-bit data bus |
13 |
D6 |
Ako / O |
8-bit data bus |
14 |
D7 |
Ako / O |
8-bit data bus (MSB) |
15 |
A |
- |
+ 5V para sa backlight |
16 |
K |
- |
Lupa |
Ipinapakita ng talahanayan sa ibaba ang madalas na ginagamit na mga LCD code ng utos.
Code (hex) |
Paglalarawan |
01 |
I-clear ang display screen |
06 |
Palakihin na cursor (kanang paglipat) |
0A |
Ipakita, naka-on ang cursor |
0C |
Ipakita ang, naka-off ang cursor |
0F |
Ipakita ang, pagkurap ng cursor |
80 |
Pilitin ang cursor sa simula ng 1 st line |
C0 |
Pilitin ang cursor sa simula ng linya ng 2 nd |
38 |
2 linya at 5 * 7 matrix |
ADC0804 IC:
Ang ADC0804 IC ay isang 8-bit parallel ADC sa pamilya ng serye ng ADC0800 mula sa National Semiconductor. Gumagana ito sa +5 volts at may resolusyon na 8bits. Ang laki ng hakbang at saklaw ng Vin ay nag-iiba para sa iba't ibang mga halaga ng Vref / 2. Ipinapakita ng talahanayan sa ibaba ang ugnayan sa pagitan ng Vref / 2 at saklaw ng Vin.
Vref / 2 (V) |
Vin (V) |
Laki ng hakbang (mV) |
buksan |
0 hanggang 5 |
19.53 |
2.0 |
0 hanggang 4 |
15.62 |
1.5 |
0 hanggang 3 |
11.71 |
1.28 |
0 hanggang 2.56 |
10 |
Sa aming kaso ang Vref / 2 ay konektado sa 1.28 volts, kaya ang laki ng hakbang ay 10mV. Para sa laki ng ADC0804 na hakbang ay kinakalkula bilang (2 * Vref / 2) / 256.
Ang sumusunod na formula ay ginagamit upang makalkula ang boltahe ng output:
Dout = Laki ng Vin / hakbang
Kung saan ang Dout ay digital na output ng data sa decimal, Vin = analog input voltage at laki ng hakbang (resolusyon) ay ang pinakamaliit na pagbabago. Dagdagan ang nalalaman tungkol sa ADC0804 dito, suriin din ang interfacing ng ADC0808 sa 8051.
LM35 Temperatura Sensor:
Ang LM35 ay isang sensor ng temperatura na ang output boltahe ay linear na proporsyonal sa temperatura ng Celsius. Ang LM35 ay na-calibrate na kaya't hindi nangangailangan ng panlabas na pagkakalibrate. Naglabas ito ng 10mV para sa bawat degree na temperatura ng Celsius.
Ang sensor ng LM35 ay gumagawa ng boltahe na naaayon sa temperatura. Ang boltahe na ito ay na-convert sa digital (0 hanggang 256) ng ADC0804 at ito ay pinakain sa 8051 microcontroller. Pinapalitan ng 8051 microcontroller ang digital na halagang ito sa temperatura sa degree Celsius. Pagkatapos ang temperatura na ito ay nai-convert sa form ng ascii na angkop para sa pagpapakita. Ang mga halagang ito sa Alexa ay pinapakain sa 16 * 2 lcd na nagpapakita ng temperatura sa screen nito. Ang prosesong ito ay paulit-ulit pagkatapos ng tinukoy na agwat.
Nasa ibaba ang naka-setup na imahe para sa LM35 Digital Thermometer na gumagamit ng 8051:
Mahahanap mo rito ang lahat ng mga batay sa digital na thermometro ng LM35.
Paliwanag sa code:
Ang kumpletong programa ng C para sa Digital Thermometer na gumagamit ng LM35 ay ibinibigay sa pagtatapos ng proyektong ito. Ang code ay nahahati sa maliit na makahulugang mga tipak at ipinaliwanag sa ibaba.
Para sa 16 * 2 LCD na nakikipag-ugnay sa 8051 microcontroller, kailangan nating tukuyin ang mga pin kung saan ang 16 * 2 lcd ay konektado sa 8051 microcontroller. Ang RS pin ng 16 * 2 lcd ay konektado sa P2.7, ang RW pin ng 16 * 2 lcd ay konektado sa P2.6 at ang E pin ng 16 * 2 lcd ay konektado sa P2.5. Ang mga data pin ay konektado sa port 0 ng 8051 microcontroller.
sbit rs = P2 ^ 7; // Register Select (RS) pin ng 16 * 2 lcd sbit rw = P2 ^ 6; // Basahin / Isulat (RW) ang pin ng 16 * 2 lcd sbit en = P2 ^ 5; // Paganahin ang (E) pin ng 16 * 2 lcd
Katulad nito, para sa ADC0804 interfacing sa 8051 microcontroller, kailangan nating tukuyin ang mga pin kung saan ang ADC0804 ay konektado sa 8051 microcontroller. Ang RD pin ng ADC0804 ay konektado sa P3.0, ang WR pin ng ADC0804 ay konektado sa P3.1 at ang INTR pin ng ADC0804 ay konektado sa P3.2. Ang mga data pin ay konektado sa port 1 ng 8051 microcontroller.
sbit rd_adc = P3 ^ 0; // Basahin (RD) ang pin ng ADC0804 sbit wr_adc = P3 ^ 1; // Isulat (WR) ang pin ng ADC0804 sbit intr_adc = P3 ^ 2; // Makagambala (INTR) na pin ng ADC0804
Susunod kailangan nating tukuyin ang ilang mga pagpapaandar na ginagamit sa programa. Ang pagpapaandar na pagpapaandar ay ginagamit upang lumikha ng tinukoy na pagkaantala ng oras, c mdwrt function ay ginagamit upang magpadala ng mga utos sa 16 * 2 lcd display, ginagamit ang datawrt function upang magpadala ng data sa 16 * 2 lcd display at pag- andar ng convert_display ay ginagamit upang mai-convert ang data ng ADC sa temperatura at upang ipakita ito sa 16 * 2 lcd display.
walang bisa ang pagkaantala (unsigned int); // function para sa paglikha ng pagkaantala ng void cmdwrt (unsigned char); // function para sa pagpapadala ng mga utos sa 16 * 2 lcd display void datawrt (unsigned char); // function para sa pagpapadala ng data sa 16 * 2 lcd display void convert_display (unsigned char); // function para sa pag-convert ng halaga ng ADC sa temperatura at ipakita ito sa 16 * 2 lcd display
Sa ilalim ng bahagi ng code, nagpapadala kami ng mga utos sa 16 * 2 lcd. Ang mga utos tulad ng malinaw na pagpapakita, pagtaas ng cursor, pilitin ang cursor sa simula ng 1 st line ay ipinadala sa 16 * 2 lcd display isa-isa pagkatapos ng ilang tinukoy na pagkaantala ng oras.
para sa (i = 0; i <5; i ++) // magpadala ng mga utos sa 16 * 2 lcd ipakita ang isang utos nang paisa-isa {cmdwrt (cmd); // function call upang magpadala ng mga utos sa pagkaantala ng pagpapakita ng 16 * 2 lcd (1); }
Sa bahaging ito ng code, nagpapadala kami ng data sa 16 * 2 lcd. Ang data na ipapakita sa 16 * 2 lcd display ay ipinapakita upang isa-isang ipakita pagkatapos ng ilang tinukoy na pagkaantala ng oras.
para sa (i = 0; i <12; i ++) // magpadala ng data sa 16 * 2 lcd ipakita ang isang character nang paisa-isa {datawrt (data1); // function call upang magpadala ng data sa pagkaantala ng pagpapakita ng 16 * 2 lcd (1); } Sa bahaging ito ng code ay kinokonekta namin ang analog boltahe na ginawa ng sensor ng LM35 sa digital na data at pagkatapos ay na-convert ito sa temperatura at ipinakita sa 16 * 2 lcd display. Para masimulan ng ADC0804 ang conversion kailangan naming magpadala ng isang mababa sa mataas na pulso sa WR pin ng ADC0804, pagkatapos ay maghintay kami para sa pagtatapos ng conversion. Ang INTR ay naging mababa sa pagtatapos ng conversion. Kapag naging mababa ang INTR, ang RD ay ginawang mababa upang makopya ang digital data sa port 0 ng 8051 microcontroller. Matapos ang isang tinukoy na pagkaantala ng oras, magsisimula ang susunod na ikot. Ang prosesong ito ay inuulit magpakailanman.
habang (1) // ulitin magpakailanman {wr_adc = 0; // send LOW to HIGH pulse on WR pin pagkaantala (1); wr_adc = 1; habang (intr_adc == 1); // wait for End of Conversion rd_adc = 0; // make RD = 0 upang mabasa ang data mula sa halaga ng ADC0804 = P1; // copy ADC data convert_display (halaga); // function call upang i-convert ang data ng ADC sa temperatura at ipakita ito sa pagkaantala ng pagpapakita ng 16 * 2 lcd (1000); // agwat sa pagitan ng bawat pag-ikot rd_adc = 1; // make RD = 1 para sa susunod na ikot}
Sa ilalim ng bahagi ng code, nagpapadala kami ng mga utos sa pagpapakita ng 16 * 2 lcd. Ang utos ay nakopya sa port 0 ng 8051 microcontroller. Ang RS ay ginawang mababa para sa pagsulat ng utos. Ang RW ay ginawang mababa para sa operasyon ng pagsusulat. Ang mataas hanggang mababang pulso ay inilapat upang paganahin ang (E) pin upang simulan ang operasyon ng pagsulat ng utos.
walang bisa cmdwrt (unsigned char x) {P0 = x; // ipadala ang utos sa Port 0 kung saan ang 16 * 2 lcd ay konektado sa rs = 0; // make RS = 0 for command rw = 0; // make RW = 0 para sa pagsusulat ng operasyon en = 1; // send a HIGH to LOW pulse on Enable (E) pin upang simulan ang pagkaantala ng operasyon ng commandwrite (1); tl = 0; }
Sa bahaging ito ng code, nagpapadala kami ng data sa 16 * 2 lcd display. Ang data ay nakopya sa port 0 ng 8051 microcontroller. Ang RS ay ginawang mataas para sa pagsulat ng utos. Ang RW ay ginawang mababa para sa operasyon ng pagsusulat. Ang mataas hanggang mababang pulso ay inilapat upang paganahin ang (E) pin upang simulan ang pagpapatakbo ng pagsulat ng data.
walang bisa datawrt (unsigned char y) {P0 = y; // ipadala ang data sa Port 0 kung saan ang 16 * 2 lcd ay konektado sa rs = 1; // make RS = 1 for command rw = 0; // make RW = 0 para sa pagsusulat ng operasyon en = 1; // send a HIGH to LOW pulse on Enable (E) pin upang simulan ang datawrite operasyon pagkaantala (1); tl = 0; }
Sa bahaging ito ng code, nagko - convert kami ng digital na data sa temperatura at ipinapakita ito sa 16 * 2 lcd display.
void convert_display (unsigned char halaga) {unsigned char x1, x2, x3; cmdwrt (0xc6); // utos na itakda ang cursor sa ika-6 na posisyon ng ika-2 linya sa 16 * 2 lcd x1 = (halaga / 10); // hatiin ang halaga sa 10 at i-store ang kabuuan sa variable x1 x1 = x1 + (0x30); // convert variable x1 to ascii sa pamamagitan ng pagdaragdag ng 0x30 x2 = halaga% 10; // hatiin ang halaga ng 10 at ang natitirang tindahan sa variable x2 x2 = x2 + (0x30); // convert variable x2 to ascii sa pamamagitan ng pagdaragdag ng 0x30 x3 = 0xDF; // Alexa halaga ng degree (°) simbolo datawrt (x1); // display temperatura sa 16 * 2 lcd display datawrt (x2); datawrt (x3); datawrt ('C'); }
Gayundin, suriin ang iba pang mga thermometers na gumagamit ng LM35 na may iba't ibang mga microcontroller:
- Digital Thermometer gamit ang Arduino at LM35
- Pagsukat ng Temperatura gamit ang LM35 at AVR Microcontroller
- Pagsukat ng Temperatura sa Silid na may Raspberry Pi