Mündəricat:

Attiny85 ilə Mini Hava İstasyonu 85: 6 Addım (Şəkillərlə)
Attiny85 ilə Mini Hava İstasyonu 85: 6 Addım (Şəkillərlə)

Video: Attiny85 ilə Mini Hava İstasyonu 85: 6 Addım (Şəkillərlə)

Video: Attiny85 ilə Mini Hava İstasyonu 85: 6 Addım (Şəkillərlə)
Video: Duman Jenaratörü Nasıl Yapılır 2024, Noyabr
Anonim
Attiny85 ilə Mini Hava İstasyonu
Attiny85 ilə Mini Hava İstasyonu
Attiny85 ilə Mini Hava İstasyonu
Attiny85 ilə Mini Hava İstasyonu
Attiny85 ilə Mini Hava İstasyonu
Attiny85 ilə Mini Hava İstasyonu

Son bir təlimatda Indigod0g, iki Arduino istifadə edərək olduqca yaxşı işləyən bir mini hava stansiyasını təsvir etdi. Bəlkə də hamı rütubət və temperatur göstəricilərini əldə etmək üçün 2 Arduino qurban vermək istəmir və mən iki Attiny85 ilə oxşar bir funksiyanı yerinə yetirmək mümkün olduğunu şərh etdim. Deyəsən danışmaq asandır, buna görə pulumu ağzımın olduğu yerə qoysam yaxşı olar.

Əslində, əvvəlki iki təlimatı birləşdirsəm, yazmışam:

Arduino və ya Attiny üçün 2-Telli LCD interfeysi və Attiny85 (Arduino IDE 1.06) arasında məlumatların qəbulu və göndərilməsi, onda işlərin çoxu artıq tamamlanmışdır. Yalnız proqramı bir az uyğunlaşdırmaq lazımdır.

I2C LCD -dən çox, keçid registri olan iki telli bir LCD həllini seçdim, çünki Attiny -də keçid qeydini I2C avtobusundan daha asan yerinə yetirmək daha asandır. Ancaq … məsələn, BMP180 və ya BMP085 təzyiq sensoru oxumaq istəyirsinizsə, bunun üçün I2C -yə ehtiyacınız var, buna görə də bir I2C LCD istifadə edə bilərsiniz. TinyWireM, Attiny -də I2C üçün yaxşı bir kitabxanadır (lakin əlavə yer tələb edir).

BOM ötürücü: DHT11 Attiny85 10 k müqavimət 433MHz ötürücü modulu

Alıcı Attiny85 10k müqavimət 433 MHz alıcı modulu

Ekran 74LS164 keçid reyestri 1N4148 diod 2x1k rezistor 1x1k dəyişən müqavimət LCD displey 2x16

Addım 1: Attiny85 ilə Mini Hava İstasyonu: Verici

Attiny85 ilə Mini Hava İstasyonu: Verici
Attiny85 ilə Mini Hava İstasyonu: Verici
Attiny85 ilə Mini Hava İstasyonu: Verici
Attiny85 ilə Mini Hava İstasyonu: Verici
Attiny85 ilə Mini Hava İstasyonu: Verici
Attiny85 ilə Mini Hava İstasyonu: Verici
Attiny85 ilə Mini Hava İstasyonu: Verici
Attiny85 ilə Mini Hava İstasyonu: Verici

Verici, sıfırlama xəttində çəkmə müqavimətinə malik olan Attiny85 -in çox sadə bir konfiqurasiyasıdır. Verici modulu '0' rəqəmsal pininə və DHT11 məlumat pininin rəqəmsal pinə 4. Anten olaraq 17.2 sm tel bağlayın. (daha yaxşı anten üçün addım 5 -ə baxın). Proqram aşağıdakı kimidir:

// Attiny üzərində işləyəcək // RF433 = D0 pin 5

// DHT11 = D4 pin 3 // kitabxanalar #daxil edin // Rob Tillaart'dan #DHT11 daxil edin; #define DHT11PIN 4 #dexin TX_PIN 0 // ötürücünüzün bağlı olduğu pin // dəyişənlər float h = 0; float t = 0; int transmit_t = 0; int transmit_h = 0; int transmit_data = 0; void setup () {pinMode (1, INPUT); man.setupTransmit (TX_PIN, MAN_1200); } void loop () {int chk = DHT11.read11 (DHT11PIN); h = DHT11. rütubət; t = DHT11. temperatur; // Bilirəm, burada 3 tamsayı dəyişəndən istifadə edirəm // burada 1 -dən istifadə edə bilərəm // ancaq bu, transmit_h = 100* (int) h -ni izləmək daha asandır. transmit_t = (int) t; transmit_data = transmit_h+transmit_t; man.transmit (transmit_data); gecikmə (500); }

Proqram, məlumatları göndərmək üçün Manchester kodundan istifadə edir. DHT11 oxuyur və temperatur və rütubəti 2 ayrı şamandırada saxlayır. Manchester kodu üzgüçülük göndərmədiyi üçün bir tamsayı olduğu üçün bir neçə seçimim var: 1- üzənləri hər biri iki tamsayıya bölün və bunları göndərin2- hər bir üzgüçünü tamsayı olaraq göndərin3- iki üzgüçünü bir tamsayı olaraq göndərin Seçim 1 ilə birləşdirməliyəm tam ədədlər qəbuledicidə yenidən üzür və mən hansı tam ədədin olduğunu müəyyən etməliyəm, kodu uzun müddət yuvarlaqlaşdırıram Seçim 2 ilə hələ də hansı tam ədədin rütubət, hansının temperatur olduğunu müəyyənləşdirməliyəm. Bir tam ədədin ötürülməsində itirildiyi təqdirdə təkbaşına gedə bilmərəm, buna görə tam ədədə əlavə edilmiş bir identifikator göndərməliyəm. 3 -cü seçimlə yalnız bir tam ədəd göndərə bilərəm. Aydındır ki, bu oxunuşları bir az daha dəqiq edir - 1 dərəcə ərzində - və sıfırın altından temperatur göndərə bilməzsiniz, ancaq bu sadə bir koddur və bunun yolları var. Hələlik bu, yalnız prinsipdir. Yəni etdiyim şey, üzənləri tam ədədlərə çevirirəm və rütubəti 100 ilə artırıram. Sonra rütubətin heç vaxt 100% olmayacağını nəzərə alaraq temperaturu əlavə edirəm. alacağım maksimum nömrə 9900 -dür. İstiliyin də 100 dərəcədən yuxarı olmayacağını nəzərə alsaq, maksimum sayı 99 olacaq, buna görə də göndərəcəyim ən yüksək nömrə 9999 -dur və bunu alıcı tərəfdən ayırmaq asandır. 3 tamsayı istifadə etdiyim hesablama, 1 dəyişənlə asanlıqla edilə biləcəyi üçün həddindən artıq çoxdur. Yalnız kodu izləməyi asanlaşdırmaq istədim. Kod indi aşağıdakı kimi tərtib edilir:

İkili eskiz ölçüsü: 2, 836 bayt (maksimum 8, 192 bayt), belə ki, istifadə etdiyim bir dht.h kitabxanası Rob Tillaart -dan biridir. Bu kitabxana DHT22 üçün də uyğundur. 1.08 versiyasından istifadə edirəm. Bununla birlikdə Attiny85, kitabxananın aşağı versiyaları olan bir DHT22 oxumaqda problem yaşaya bilər. Mənə təsdiq olundu ki, 1.08 və 1.14, adi bir Arduino üzərində işləsə də, Attiny85 -də DHT22 oxumaqda çətinlik çəkir. Attiny85 -də DHT22 istifadə etmək istəyirsinizsə, bu kitabxananın 1.20 versiyasını istifadə edin. Hamısı vaxtla bağlıdır. Kitabxananın 1.20 versiyası daha sürətli oxunuşa malikdir. (Jeroen istifadəçi təcrübəsi üçün təşəkkürlər)

Addım 2: Attiny85 ilə Mini Hava İstasyonu: Alıcı

Attiny85 ilə Mini Hava İstasyonu: Alıcı
Attiny85 ilə Mini Hava İstasyonu: Alıcı

Yenə Attiny85, 10 k müqavimətlə yuxarı çəkilmiş Sıfırlama pimi ilə əsas konfiqurasiyada istifadə olunur. Alıcı modulu rəqəmsal pin 1 -ə (çipdəki pin 6) bağlanır. LCD 0 və iki rəqəmsal pinlərə bağlanır. Anten olaraq 17.2 sm tel bağlayın. Kod aşağıdakı kimidir:

#daxil edin

#LiquidCrystal_SR lcd (0, 2, TWO_WIRE) daxil edin; #define RX_PIN 1 // = fiziki pin 6 boşluq qurulması () {lcd.begin (16, 2); lcd.home (); man.setupReceive (RX_PIN, MAN_1200); man.beginReceive (); } void loop () {if (man.receiveComplete ()) {uint16_t m = man.getMessage (); man.beginReceive (); lcd.print ("Nəmli:"); lcd çap (m/100); lcd.setCursor (0, 1); lcd.print ("Temp"); lcd çap (m%100); }}

Kod olduqca sadədir: ötürülən tam ədəd 'm' dəyişənində qəbul edilir və saxlanılır. Rütubəti vermək üçün 100 -ə bölünür və 100 -ün modulu istiliyi verir. Beləliklə, alınan tam ədədin 33253325/100 = 333325 % 100 olduğunu düşünün = 25Bu kod 3380 bayt olaraq tərtib edilir və buna görə də 45 ilə deyil, yalnız attiny85 ilə istifadə edilə bilər.

Addım 3: Attiny85/45 ilə Mini Hava İstasyonu: Ekran

Attiny85/45 ilə Mini Hava İstasyonu: Ekran
Attiny85/45 ilə Mini Hava İstasyonu: Ekran
Attiny85/45 ilə Mini Hava İstasyonu: Ekran
Attiny85/45 ilə Mini Hava İstasyonu: Ekran

Ekran üçün iki telli ekranda göstəriş verdiyimə müraciət etməyim ən yaxşısıdır. Bir sözlə, 16x2 ölçülü bir ekran, iki rəqəmsal pinlə işləyə bilər. Mümkündür, amma sonra Attiny -də bir I2C protokolu tətbiq etməlisiniz. Tinywire protokolu bunu edə bilər. Bəzi mənbələr bunun 1 Mhz saat gözlədiyini söyləsələr də, 8Mhz -də istifadə etmək üçün heç bir problemim olmadı (başqa bir layihədə) Hər halda burada narahat olmuram və bir keçid qeydindən istifadə edirəm.

Addım 4: Attiny85/45 ilə Mini Hava İstasyonu: İmkanlar/Nəticələr

Attiny85/45 ilə Mini Hava İstasyonu: İmkanlar/Nəticələr
Attiny85/45 ilə Mini Hava İstasyonu: İmkanlar/Nəticələr
Attiny85/45 ilə Mini Hava İstasyonu: İmkanlar/Nəticələr
Attiny85/45 ilə Mini Hava İstasyonu: İmkanlar/Nəticələr
Attiny85/45 ilə Mini Hava İstasyonu: İmkanlar/Nəticələr
Attiny85/45 ilə Mini Hava İstasyonu: İmkanlar/Nəticələr

Dediyim kimi, iki attiny85 (hətta bir attiny85+ 1 attiny45 ilə) olan mini hava stansiyası qura biləcəyimi göstərmək üçün bunu göstəriş verdim. Yalnız DHT11 istifadə edərək rütubət və temperatur göndərir., 6 hətta bəzi hiylə ilə. Buna görə də daha çox sensordan məlumat göndərmək mümkündür. Layihəmdə- lövhədə və peşəkar bir PCB-də (OSHPark) göründüyü kimi- DHT11-dən, LDR-dən və PIR-dən məlumatları göndərirəm/alıram. Attiny85 -in alıcı kimi istifadə edilməsində məhdudiyyət, məlumatların parlaq bir üslubda təqdim edilməsidir. Yaddaş məhdud olduğu üçün: 'Temperatur, Rütubət, işıq səviyyəsi, mövzuya yaxınlaşma' kimi mətnlər qiymətli yaddaş sahəsini olduqca tez dolduracaq. Buna baxmayaraq, iki Arduino -dan yalnız temperatur və rütubət göndərmək/almaq üçün istifadə etmək üçün heç bir səbəb yoxdur. Vericinin yuxuya getməsini və yalnız hər 10 dəqiqədə bir məlumat göndərmək üçün oyanmasını və buna görə də bir düymə hüceyrəsindən qidalanmasını təmin etmək üçün. Aydındır ki, nəinki temperatur və rütubət məlumatları göndərilə bilər, həm də bir sıra kiçik ötürücülər göndərilə bilər. torpağın nəmini də oxuyun və ya anemometr və ya yağış sayğacı əlavə edin

Addım 5: Mini Hava İstasyonu: Anten

Mini Hava İstasyonu: Anten
Mini Hava İstasyonu: Anten

Anten, hər hansı bir 433Mhz qurulmasının vacib bir hissəsidir. Standart 17.2 sm 'çubuq' antenini sınamışam və coil antenası ilə qısa bir flirtim var, Ən yaxşı işləyən kimi görünən, bobini yüklü bir antendir. Dizayn Ben Schuelerdəndir və görünür 'Elektor' jurnalında nəşr edilmişdir. Bu 'Hava ilə soyudulan 433 MHz Anten' təsviri olan bir PDF izləmək asandır. (Link yox oldu, bura baxın)

Addım 6: BMP180 əlavə edin

BMP180 əlavə edin
BMP180 əlavə edin

BMP180 kimi barometrik təzyiq sensoru əlavə etmək istəyirsiniz? bu barədə mənim digər göstərişlərimi yoxlayın.

Tövsiyə: