Mündəricat:
- Addım 1: Təsvir komponentləri
- Addım 2: Mikrokontrolör Firmware Kodu
- Addım 3: Mikro nəzarətçiyə Flaş Proqramı yanır
- Addım 4: Monitorinq Cihazı Dövrə Montajı
Video: LCD NOKIA 5110: 4 Addımlı Ekranlı İstilik və İşıq Səviyyə Monitoru
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
Hamıya salam!
Bu bölmədə temperatur və işıq səviyyəsini izləmək üçün sadə bir elektron cihaz hazırlayırıq. Bu parametrlərin ölçüləri LCD NOKIA 5110 -da göstərilir. Cihaz AVR ATMEGA328P mikro nəzarətçisinə əsaslanır. Nəzarət cihazı işıq səviyyəsini ölçmək üçün DS18B20 rəqəmsal termometr və fotorezistorla təchiz edilmişdir.
Addım 1: Təsvir komponentləri
İzləmə cihazının əsas komponentləri:
- AVR "ATMEGA328P" mikro nəzarətçi
- Monoxrom Qrafik LCD "NOKIA 5110"
- Proqramlaşdırıla bilən 1 telli rəqəmsal termometr «DS18B20»
- İşıqdan asılı rezistor
- Tellər
AVR "ATMEGA328P" mikro nəzarətçi
İzləmə cihazı mikro nəzarətçinin aşağıdakı periferik xüsusiyyətlərindən istifadə edir:
- 16 bitlik Taymer/Sayğacın kəsilməsi
- 8 kanallı 10 bitlik ADC
- Master/slave SPI serial interfeysi
Monoxrom Qrafik LCD "NOKIA 5110"
Xüsusiyyətlər:
- 48 x 84 nöqtəli LCD ekran
- Maksimum 4 Mbit/S sürətə malik Serial Avtobus İnterfeysi
- Daxili Nəzarətçi/Sürücü «PCD8544»
- LED arxa işıq
- 2.7-5 Volt gərginliyində işləyin
- Aşağı enerji istehlakı; batareya tətbiqləri üçün uyğundur
- Temperatur aralığı -25˚C ilə +70˚C arasında
- Sinyal CMOS Girişini dəstəkləyin
LCD Ünvanla İşləmə (Ünvanlama):
LCD Ekranda (DDRAM) göstərilən yaddaş ünvanı, Y-Ünvan 0-dan Y-Ünvan 5-ə qədər 6 sıra (Y Ünvan) və X-Ünvan 0-dan X-ə qədər 84 sütundan (X Ünvan) ibarət Matrixdir. Ünvan 83. İstifadəçi nəticəni LCD Ekranda göstərmək mövqeyinə daxil olmaq istəyirsə, X-Ünvan və Y-Ünvanı arasındakı əlaqəyə istinad etməlidir.
Göstərilməyə göndəriləcək məlumatlar 8 bit (1 Bayt) təşkil edir və şaquli xətt kimi təşkil ediləcək; bu halda, Bit MSB daha aşağı, Bit LSB isə yuxarıda göstərildiyi kimi olacaq.
Proqramlaşdırıla bilən 1 telli rəqəmsal termometr DALLAS «DS18B20»
Xüsusiyyətləri:
- Unikal 1-Wire® İnterfeysi ünsiyyət üçün yalnız bir Port Pin tələb edir
- İnteqrasiya edilmiş temperatur sensoru və EEPROM ilə komponentlərin sayını azaldın
- -55 ° C ilə +125 ° C (-67 ° F - +257 ° F) arasındakı temperaturları ölçür.
- ± 0,5 ° C -10 ° C ilə +85 ° C arasında dəqiqlik
- 9 bitdən 12 bitə qədər proqramlaşdırıla bilən qətnamə
- Xarici komponentlərə ehtiyac yoxdur
- Parazitar Güc Modu Əməliyyat üçün Yalnız 2 Pins (DQ və GND) tələb edir
- Dağıtılmış İstilik Algılama Tətbiqlərini Multidrop qabiliyyəti ilə sadələşdirir
- Hər bir cihazda, ROM-da saxlanılan unikal 64 bitlik seriya kodu var
- Siqnal Axtarış Komandası ilə İstifadəçi tərəfindən təyin edilə bilən Qeyri-Uçucu (NV) Siqnal Ayarları Proqramlaşdırılmış Limitlər xaricində Temperaturlu Cihazları Tanıyır.
Tətbiqlər:
- Termostatik nəzarət
- Sənaye Sistemləri
- İstehlak Məhsulları
- Termometrlər
- Termal Həssas Sistemlər
İşıqdan asılı rezistor
İşığa Bağlı Rezistor (LDR), səthə işıq düşəndə müqavimətini dəyişən bir çeviricidir.
Tipik olaraq bir LDR, tam qaranlıqda bir megaOhm -dan iki megaOhm -a, on LUX -da on -iyirmi kiloOhm -ə, 100 LUX -da iki -beş kiloohm -a malik olacaqdır. Sensorun iki kontağı arasındakı müqavimət işıq intensivliyi ilə azalır və ya sensorun iki kontağı arasındakı keçiricilik artır.
Müqavimət dəyişikliyini gərginlik dəyişikliyinə çevirmək üçün gərginlik bölücü dövrə istifadə edin.
Addım 2: Mikrokontrolör Firmware Kodu
#ifndef F_CPU #F_CPU 16000000UL təyin edin // nəzarətçi kristal tezliyini bildirir (16 MHz AVR ATMega328P) #endif
// SPI INTERFACE TANIMLAR #MOSI 3 təyin edin // MOSI bu PORT B, PIN 3 #MISO 4 təyin edin // MISO bu PORT B, PIN 4 #SCK 5 təyin edin // SCK bu PORT B, PIN 5 #SS 2 təyin edin // SS bu PORT B, PIN 2
// EKRANI SIFIRLAYIN #RST 0 təyin edin // PORT B, PIN 0 -ı sıfırlayın
// EKRAN MODU SEÇİMİ - Komanda/ünvan və ya məlumat girişini seçmək üçün giriş. #define DC 1 // DC bu PORT B, PIN 1 -dir
// mənfi işarəli statik işarəsiz işarələr char neg [4] = {0x30, 0x30, 0x30, 0x30};
// rəqəmlərdən ibarət kodlar [0..9] statik const işarəsiz char font6x8 [10] [16] = {{0xFC, 0xFE, 0xFE, 0x06, 0x06, 0xFE, 0xFE, 0xFC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 0 {0x00, 0x00, 0x18, 0x1C, 0xFE, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00}, 1 0x0C, 0x8E, 0xCE, 0xE6, 0xE6, 0xBE, 0x9E, 0x0C, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 2 {0x00, 0x04, 0x06, 0x06, 0x8C, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 3 {0x3C, 0x3E, 0x7C, 0x60, 0x60, 0xFC, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00 0x01, 0x03, 0x01}, // 4 {0x1C, 0x3E, 0x3E, 0x36, 0x36, 0xF6, 0xF6, 0xE4, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 5x01 0xFE, 0xFE, 0x36, 0x36, 0xF6, 0xF6, 0xE4, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 6 {0x04, 0x06, 0x06, 0x86, 0x86, 0x86, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00}, // 7 {0xCC, 0xFE, 0xFE, 0x36, 0x36, 0xFE, 0xFE, 0xCC, 0x01, 0x03, 0x03, 0x03, 0x03 0x0 3, 0x01}, // 8 {0x3C, 0x7E, 0x7E, 0x66, 0x66, 0xFE, 0xFE, 0xFC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01} // 9};
// "TEMP:" sözünün kodlar silsiləsi statik const işarəsiz char TEMP_1 [165] = {0x02, 0x06, 0x06, 0xFE, 0xFE, 0xFE, 0x06, 0x06, 0x02, 0x00, 0xFC, 0xFE, 0xFE, 0x26, 0x26, 0x06 0x24, 0x00, 0xFC, 0xFE, 0xFE, 0x1C, 0x38, 0x70, 0x38, 0x1C, 0xFE, 0xFE, 0xFC, 0x00, 0xFC, 0xFE, 0xFE, 0x66, 0x66, 0x7x, 0x7C, 0x7C, 0x7E, 0x7E 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00 0x01, 0x03, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0C, 0x1E, 0x33, 0x33, 0x1x, 0x0C, 0x0C 0x9C, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x01,};
// "LUX:" sözünün dizisini kodlar TEMP_2 [60] = {0xFC, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0xFC, 0x00, 0x00, 0xFC, 0xFE, 0xFC, 0x00, 0x04, 0x8E, 0xDE, 0xFC, 0xF8, 0xFC, 0xDE, 0x8E, 0x04, 0x00, 0x8C, 0x8C, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x01};
#daxil edin
#daxil edin #daxil edin
// Liman Başlatması Port_Init () {DDRB = (1 << MOSI) | (1 << SCK) | (1 << SS) | (1 << RST) | (1 << DC); // MOSI qurun, Çıxış olaraq SCK, SS, RST, DC, digər bütün girişlər PORTB | = (1 << RST); // RST pinini yüksək olaraq təyin edin PORTB | = (1 << SS); // SS pinini yüksək olaraq təyin edin - Ekran DDRC = 0xFFu aradan buraxın; // PORTC -nin bütün sancaqlarını çıxış olaraq təyin edin. DDRC & = ~ (1 << 0); // PORTC'nin ilk pinini Giriş PORTC = 0x00u olaraq edir; // Bütün PORTC pinlərini söndürən aşağıya endirin. }
// ADC Başlanğıc boşluğu ADC_init () {// ADC -ni aktiv edin, nümunə götürmə freq = osc_freq/128 prescaler -ı maksimum dəyərə təyin edin, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); ADMUX = (1 << REFS0); // ADC üçün gərginlik istinadını seçin // ADC Multiplexer Select reyestrini (ADC0) istifadə edərək kanal sıfırını standart olaraq seçin. }
// Analoqun rəqəmsaldan rəqəmsala çevrilməsinin nəticəsini oxumaq funksiyası uint16_t get_LightLevel () {_delay_ms (10); // Kanalın seçilmiş ADCSRA almasını bir müddət gözləyin | = (1 << ADSC); // ADSC bitini təyin edərək ADC çevrilməsinə başlayın. ADSC -ə 1 yazın (ADCSRA & (1 << ADSC)); // dönüşümün tamamlanmasını gözləyin // ADSC o vaxta qədər yenidən 0 olur, döngəni davamlı işlədin _delay_ms (10); qayıt (ADC); // 10 bitlik nəticəni qaytarın}
// SPI Başlatma boşluğu SPI_Init () {SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0); // SPI -ni aktivləşdirin, Master olaraq təyin edin, SPI nəzarətində Prescaler -ı Fosc/16 olaraq təyin edin qeydiyyatdan keç}
// 16 bit Timer1, fasilə və dəyişkən boşluq TIMER1_init () {// işə salın, prescaler = 256 və CTC rejimi ilə timer qurun TCCR1B | = (1 << WGM12) | (1 << CS12); // sayğacı işə salın TCNT1 = 0; // müqayisə dəyərini başlat - 1 san OCR1A = 62500; // müqayisə kəsilməsini aktivləşdir TIMSK1 | = (1 << OCIE1A); // qlobal fasilələri aktivləşdirin sei (); }
// Display Enable void SPI_SS_Enable () {PORTB & = ~ (1 << SS); // Məntiq üçün SS pinini aktiv edin 0}
// Display Disable void boşluğu SPI_SS_Disable () {PORTB | = (1 << SS); // Məntiq üçün SS pinini deaktiv edin}
// SPI_Tranceiver (işarəsiz char məlumatları) boşluq tamponuna məlumat göndərmə funksiyası {SPDR = data; // Buferə məlumat yükləyərkən (! (SPSR & (1 << SPIF))); // Göndərmə tamamlanana qədər gözləyin}
// Başlanğıcın əvvəlində Ekranı sıfırlayın void Display_Reset () {PORTB & = ~ (1 << RST); _delay_ms (100); PORTB | = (1 << RST); }
// Əmr yazma funksiyası void Display_Cmnd (işarəsiz char məlumatları) {PORTB & = ~ (1 << DC); // əmr əməliyyatı SPI_Tranceiver (data) üçün məntiqi 0 -a DC pin etmək; // məlumat reyestri haqqında məlumat göndərmək PORTB | = (1 << DC); // məlumatların işlənməsi üçün məntiqi yüksək DC pin edin}
// Display void Display_init () {Display_Reset (); // ekranı sıfırlayın Display_Cmnd (0x21); // əlavə rejimində əmr dəsti Display_Cmnd (0xC0); // C0 göndərərək gərginliyi təyin edin VOP = 5V Display_Cmnd (0x07) deməkdir; // istiliyi təyin edin. 3 Display_Cmnd (0x13) əmsalı; // Voltaj Bias Sisteminin Display_Cmnd (0x20) dəyərini təyin edin; // Display_Cmnd (0x0C) əsas rejimində əmr verilir; // nəticəni normal rejimdə göstərin}
// Ekran boşluğunu silin Display_Clear () {PORTB | = (1 << DC); // (int k = 0; k <= 503; k ++) {SPI_Tranceiver (0x00);} PORTB & = ~ (1 << DC); // DC pinini məntiqə çevirin əmr əməliyyatı üçün sıfır}
// sütunu və sətri nəticəni LCD displeydə göstərmə vəziyyətinə qoyun Display_SetXY (işarəsiz char x, işarəsiz char y) {Display_Cmnd (0x80 | x); // sütun (0-83) Display_Cmnd (0x40 | y); // sıra (0-5)}
// Mənfi işarənin boşluğunu göstərmək funksiyası Display_Neg (unsigned char neg) {Display_SetXY (41, 0); // Göstərilən mövqenin ünvanını (int index = 0; index0) {SPDR = 0x30;} // Məlumatı ekran tamponuna yükləyin (mənfi işarəni göstərin) başqa {SPDR = 0x00;} // Veriləri daxil edin ekran tamponu (mənfi işarəni sil) while (! (SPSR & (1 << SPIF)))); // Göndərmə tamamlanana qədər gözləyin _delay_ms (100); }}
// Off_Dig (işarəsiz char x, işarəsiz char y) rəqəmsal işarənin boşluğunu silmək funksiyası {Display_SetXY (x, y); // (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} üçün ekrandakı mövqeyin ünvanını təyin edin (rəqəm işarəsinin yuxarı hissəsini silin) y ++; Display_SetXY (x, y); // (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Ekranın tamponuna məlumat yüklə () rəqəmsal işarənin alt hissəsini təmizləyin)}
// Digital işarəsinin boşluğunu göstərmək funksiyası Display_Dig (int dig, işarəsiz char x, işarəsiz char y) {Display_SetXY (x, y); // (int index = 0; index <16; index ++) {if (index == 8) {y ++; Display_SetXY (x, y);} // Ekrandakı mövqenin ünvanını təyin edin (alt sıra) SPI_Tranceiver (font6x8 [dig] [index]); // _delay_ms (10) displeyinin tamponuna rəqəm məlumatları kodları silsiləsini yükləyin; }}
// DS18B20 imzasız char DS18B20_init () {DDRD | = (1 << 2); // PORTD -in PD2 pinini PORTD & = ~ (1 << 2) çıxışı olaraq təyin edin; // PD2 pinini aşağı _delay_us (490) olaraq təyin edin; // Başlama Zamanlaması DDRD & = ~ (1 << 2); // PORTD -nin PD2 pinini _delay_us (68) girişi olaraq təyin edin; // Zamanlama OK_Flag = (PIND & (1 << 2)); // sensor nəbzini əldə edin _delay_us (422); OK_Flag qayıt; // qaytar 0-ok sensoru fişdir, 1 səhv sensoru ayrılır}
// DS18B20 işarəsiz char read_18b20 () {işarəsiz char i, data = 0; üçün (i = 0; i <8; i ++) {DDRD | = (1 << 2); // PORTD -nin PD2 pinini _delay_us (2) çıxışı olaraq təyin edin; // Zamanlama DDRD & = ~ (1 1; // Növbəti bit (PIND & (1 << 2)) data | = 0x80; // biti baytda qoyduqda _delay_us (62);} məlumatları qaytarır;}
// DS18B20 -ə bayt yazmaq funksiyası etibarsız write_18b20 (işarəsiz char məlumatları) {unsigned char i; üçün (i = 0; i <8; i ++) {DDRD | = (1 << 2); // PORTD -nin PD2 pinini _delay_us (2) çıxışı olaraq təyin edin; // Zamanlama (data & 0x01) DDRD & = ~ (1 << 2); // 1 yazmaq istəsək, başqa satırı buraxın DDRD | = (1 1; // Sonrakı bit _delay_us (62); // Zamanlama DDRD & = ~ (1 << 2); // _Delay_us (2) girişi olaraq PORTD;}}
// işıq səviyyəsinin boşluğunu göstərmək funksiyası Read_Lux () {uint16_t tampon; işarəsiz int temp_int_1, temp_int_2, temp_int_3, temp_int_0; // tək rəqəmlər, ikiqat rəqəmlər, üçlü rəqəmlər, dörddəbir rəqəm tamponu = get_LightLevel (); // analoqun nəticəsini rəqəmsal səviyyəyə çevirmək işıq səviyyəsini oxuyun temp_int_0 = tampon % 10000 /1000; // dörddəbirlik temp_int_1 = tampon % 1000/100; // üçrəqəmli temp_int_2 = tampon % 100/10; // iki rəqəmli temp_int_3 = tampon % 10; // tək rəqəmli if (temp_int_0> 0) // nəticə dörddəbirlik rəqəmdirsə {Display_Dig (temp_int_0, 32, 2); // işıq səviyyəsinin 1 rəqəmini göstər Display_Dig (temp_int_1, 41, 2); // işıq səviyyəsinin 2 rəqəmini göstər Display_Dig (temp_int_2, 50, 2); // işıq səviyyəsinin 3 rəqəmini göstər Display_Dig (temp_int_3, 59, 2); // işıq səviyyəsinin 4 rəqəmini göstər} başqa {if (temp_int_1> 0) // nəticə üç rəqəmli rəqəmdirsə {Off_Dig (32, 2); // Display_Dig (temp_int_1, 41, 2) rəqəminin 1 işarəsini silin; // işıq səviyyəsinin 1 rəqəmini göstər Display_Dig (temp_int_2, 50, 2); // işıq səviyyəsinin 2 rəqəmini göstər Display_Dig (temp_int_3, 59, 2); // işıq səviyyəsinin 3 rəqəmini göstərin} başqa {if (temp_int_2> 0) // nəticə iki rəqəmli rəqəmdirsə {Off_Dig (32, 2); // Off_Dig nömrəsinin 1 işarəsini silin (41, 2); // Display_Dig (temp_int_2, 50, 2) rəqəminin 2 işarəsini silin; // işıq səviyyəsinin 1 rəqəmini göstər Display_Dig (temp_int_3, 59, 2); // işıq səviyyəsinin 2 rəqəmini göstərin} başqa // nəticə təkrəqəmli bir rəqəm olarsa {Off_Dig (32, 2); // Off_Dig nömrəsinin 1 işarəsini silin (41, 2); // Off_Dig rəqəminin 2 işarəsini silin (50, 2); // Display_Dig rəqəminin 3 işarəsini silin (temp_int_3, 59, 2); // işıq səviyyəsinin 1 rəqəmini göstərin}}}}
// Temperatur boşluğunu göstərmək funksiyası Read_Temp () {unsigned int buffer; işarəsiz int temp_int_1, temp_int_2, temp_int_3; // tək rəqəmlər, ikiqat rəqəmlər, üç rəqəmlər, dörddəbir rəqəmlər işarəsiz char Temp_H, Temp_L, OK_Flag, temp_flag; DS18B20_init (); // DS18B20 write_18b20 (0xCC) başlanğıcı; // Sensor kodu yoxlama write_18b20 (0x44); // İstilik çevrilməsinə başlayın _delay_ms (1000); // Sensor yoxlama gecikməsi DS18B20_init (); // DS18B20 write_18b20 (0xCC) başlanğıcı; // Sensor kodu yoxlama write_18b20 (0xBE); // Sensor RAM -ın məzmununu oxumaq əmri Temp_L = read_18b20 (); // İlk iki baytı oxuyun Temp_H = read_18b20 (); temp_flag = 1; // 1-müsbət temperatur, 0-mənfi temperatur // Əgər mənfi temperatur alın (Temp_H & (1 << 3)) // İşarələmə Bitini yoxlayın (bit təyin olunarsa-mənfi temperatur) {imzalanmış int temp; temp_flag = 0; // bayraq 0 olaraq təyin olunur - mənfi temperatur tempi = (Temp_H << 8) | Temp_L; temp = -temp; // Əlavə kodu birbaşa Temp_L = tempə çevirin; Temp_H = temp >> 8; } tampon = ((Temp_H 4); temp_int_1 = tampon % 1000/100; // üçrəqəmli temp_int_2 = tampon % 100/10; // iki rəqəmli temp_int_3 = tampon % 10; // təkrəqəmli
// Əgər temperatur mənfi göstərici olarsa, başqa bir şey göstərin
if (temp_flag == 0) {Display_Neg (1);} else {Display_Neg (0);} if (temp_int_1> 0) // nəticə üç rəqəmli rəqəmdirsə {Display_Dig (temp_int_1, 45, 0); // temperaturun 1 rəqəmini göstər Display_Dig (temp_int_2, 54, 0); // temperaturun 2 rəqəmini göstər Display_Dig (temp_int_3, 63, 0); // temperaturun 3 rəqəmini göstərin} başqa {if (temp_int_2> 0) // nəticə iki rəqəmli rəqəmdirsə {Off_Dig (45, 0); // Display_Dig (temp_int_2, 54, 0) rəqəminin 1 işarəsini silin; // temperaturun 1 rəqəmini göstər Display_Dig (temp_int_3, 63, 0); // temperaturun 2 rəqəmini göstərin} başqa // nəticə təkrəqəmli bir rəqəmdirsə {Off_Dig (45, 0); // Off_Dig nömrəsinin 1 işarəsini silin (54, 0); // Display_Dig rəqəminin 2 işarəsini silin (temp_int_3, 63, 0); // temperaturun 1 rəqəmini göstərin}}}
// Müqayisə dəyəri (hər 1 saniyədə) ISR (TIMER1_COMPA_vect) ilə taymer sayına uyğun gələndə bu ISR atılır {// Oxu, temperaturun və işıq səviyyəsinin göstərilməsi Read_Temp (); Read_Lux (); }
// "TEMP" və "LUX" sözlərini göstərmək üçün funksiya Display_label () {// Word "TEMP" Display_SetXY (0, 0); // Göstərilən mövqenin ünvanını (yuxarı sıra) (int index = 0; index <105; index ++) üçün təyin edin {if (index == 40) {Display_SetXY (0, 1);} // Mövqe ünvanını təyin edin ekranda (alt sıra) if (indeks == 80) {Display_SetXY (72, 0);} // Ekrandakı mövqenin ünvanını təyin edin (yuxarı satır) əgər (indeks == 92) {Display_SetXY (72, 1); } // Ekrandakı mövqenin ünvanını təyin edin (alt sətir) SPDR = TEMP_1 [index]; // (! (SPSR & (1 << SPIF))); // ötürülmə tamamlanana qədər gözləyin _delay_ms (10); } // Word "LUX" Display_SetXY (0, 2); // Göstərilən mövqenin ünvanını (yuxarı sıra) (int index = 0; index <60; index ++) üçün təyin edin {if (index == 30) {Display_SetXY (0, 3);} // Mövqe ünvanını təyin edin ekranda (alt sıra) SPDR = TEMP_2 [indeks]; // (! (SPSR & (1 << SPIF))); // Göndərmə tamamlanana qədər gözləyin _delay_ms (10); }}
int main (boş)
{Port_Init (); // Limanın işə salınması ADC_init (); // ADC başlatma SPI_Init (); // SPI başlatma SPI_SS_Enable (); // Display Enable DS18B20_init (); // DS18B20 Display_init () başlanğıcı; // Ekran başlanğıc göstəricisi Display_Clear (); // Aydın göstər Display_label (); // "TEMP" və "LUX" TIMER1_init () sözlərini göstərin; // Zamanlayıcı1 Başlanğıc. Monitorinqə başlayın. Parametrləri hər saniyə əldə etmək. // Sonsuzluq döngəsi (1) {}}
Addım 3: Mikro nəzarətçiyə Flaş Proqramı yanır
HEX faylının mikro nəzarətçi flash yaddaşına yüklənməsi. Videoya mikro nəzarətçi flash yaddaşının yanmasının ətraflı təsviri ilə baxın: Mikro nəzarətçi flash yaddaşının yanması…
Addım 4: Monitorinq Cihazı Dövrə Montajı
Şematik sxemə uyğun olaraq komponentləri birləşdirin.
Gücü bağlayın və işləyir!
Tövsiyə:
DHT11 ilə ESP32 əsaslı M5Stack M5stick C Hava Monitoru - DHT11: 6 Addımlı M5stick-C-də Temperatur Nəmliyi və İstilik İndeksini izləyin
DHT11 ilə ESP32 əsaslı M5Stack M5stick C Hava Monitoru | DHT11 ilə M5stick-C-də Temperatur Rütubətini və İstilik İndeksini izləyin: Salam uşaqlar, bu təlimatlarda DHT11 temperatur sensoru ilə m5stick-C (m5stack tərəfindən hazırlanmış bir inkişaf lövhəsi) ilə əlaqə qurmağı və m5stick-C-nin ekranında göstərməyi öyrənəcəyik. Beləliklə, bu dərslikdə temperaturu, rütubəti & istilik mən
Arduino və Lcd Ekranlı İstilik və Nəmlik Sensoru: 4 addım
Arduino və Lcd Ekranlı İstilik və Nəmlik Sensoru: Salam uşaqlar, Artuinoya yenidən xoş gəldiniz. Gördüyünüz kimi bir InstructableToday başladım, bir Temperatur edəcəyik & DHT11 modulu ilə nəm ölçmə cihazı. Başlayaq PS. Abunə olmağı və videonu bəyənməyi düşünün
Arduino və Nokia 5110 LCD ilə PC Hardware Monitoru: 3 addım
Arduino və Nokia 5110 LCD ilə PC Hardware Monitoru: CPU temperaturu, yükü, saatı və istifadə olunan RAMCPU yük və ya saat dəyərlərini göstərən Arduino əsaslı PC monitoru da qrafik olaraq çəkilə bilər. Parçalar: Arduino Nano və ya USB ilə serial adapterə Nokia 5110 84x48 LCD
Siqnalizasiya ilə Uzun Menzil Simsiz Su Səviyyə Göstəricisi - 1 km -ə qədər məsafə - Yeddi Səviyyə: 7 addım
Siqnalizasiya ilə Uzun Menzil Simsiz Su Səviyyə Göstəricisi | 1 km -ə qədər məsafə | Yeddi Səviyyə: Youtube -da izləyin: https://youtu.be/vdq5BanVS0Y 100-200 metr aralığını təmin edəcək bir çox Simli və Simsiz Su Səviyyə Göstəricisi görmüş ola bilərsiniz. Ancaq bu təlimatda, uzun mənzilli simsiz su səviyyəsi Indi görəcəksən
Arduino və Nokia 5110 Ekranlı DIY Torpaq Nəmləndiricisi: 6 addım (şəkillərlə)
Arduino və Nokia 5110 Ekranlı DIY Torpaq Nəmliyi Monitoru: Bu Təlimat kitabında Arduino istifadə edərək böyük bir Nokia 5110 LCD ekranı ilə çox faydalı bir Torpaq Nəmlik Monitorunun necə qurulacağını görəcəyik. Arduino -dan bitkinin torpağının nəm səviyyəsini asanlıqla ölçün və maraqlı qurğular yaradın