İçindekiler:

Attiny85 ile Mini Hava İstasyonu: 6 Adım (Resimlerle)
Attiny85 ile Mini Hava İstasyonu: 6 Adım (Resimlerle)

Video: Attiny85 ile Mini Hava İstasyonu: 6 Adım (Resimlerle)

Video: Attiny85 ile Mini Hava İstasyonu: 6 Adım (Resimlerle)
Video: ATMEGA ÇİPLERE HEX DOSYASI NASIL YÜKLENİR SÜRPRİZ PROJE 2024, Temmuz
Anonim
Attiny85 ile Mini Hava İstasyonu
Attiny85 ile Mini Hava İstasyonu
Attiny85 ile Mini Hava İstasyonu
Attiny85 ile Mini Hava İstasyonu
Attiny85 ile Mini Hava İstasyonu
Attiny85 ile Mini Hava İstasyonu

Yakın tarihli bir talimatta Indigod0g, iki Arduino kullanarak oldukça iyi çalışan bir mini hava istasyonunu tanımladı. Belki herkes nem ve sıcaklık okumaları için 2 Arduino'yu feda etmek istemiyor ve ben de iki Attiny85 ile benzer bir işlevi yapmanın mümkün olması gerektiğini yorumladım. Sanırım konuşmak kolay, bu yüzden paramı ağzımın olduğu yere koysam iyi olur.

Aslında, daha önce yazdığım iki talimatı birleştirirsem:

Arduino veya Attiny için 2 Telli LCD arayüzü ve Attiny85 (Arduino IDE 1.06) arasında veri alıp gönderme, ardından işin çoğu zaten yapılır. Sadece yazılımı biraz uyarlamanız gerekiyor.

Attiny'de kaydırma yazmacının uygulanması I2C veriyolundan daha kolay olduğu için I2C LCD yerine kaydırma kaydına sahip iki telli bir lcd çözümü seçtim. Ancak… örneğin bir BMP180 veya BMP085 basınç sensörünü okumak istiyorsanız, bunun için yine de I2C'ye ihtiyacınız var, böylece bir I2C LCD de kullanabilirsiniz. TinyWireM, Attiny'de I2C için iyi bir kitaplıktır (ancak fazladan alan gerektirir).

BOM Verici: DHT11 Attiny85 10 k direnç 433MHz verici modülü

Alıcı Attiny85 10k direnç 433 MHz alıcı modülü

Ekran 74LS164 kaydırma yazmacı 1N4148 diyot 2x1k direnç 1x1k değişken direnç bir LCD ekran 2x16

Adım 1: Attiny85 ile Mini Hava İstasyonu: Verici

Attiny85 ile Mini Hava İstasyonu: Verici
Attiny85 ile Mini Hava İstasyonu: Verici
Attiny85 ile Mini Hava İstasyonu: Verici
Attiny85 ile Mini Hava İstasyonu: Verici
Attiny85 ile Mini Hava İstasyonu: Verici
Attiny85 ile Mini Hava İstasyonu: Verici
Attiny85 ile Mini Hava İstasyonu: Verici
Attiny85 ile Mini Hava İstasyonu: Verici

Verici, Attiny85'in sıfırlama hattında yukarı çekme direnci olan çok temel bir konfigürasyonudur. Dijital pim '0'a bir verici modülü takılır ve DHT11 veri pimi dijital pim 4'e bağlanır. Anten olarak 17,2 cm'lik bir kablo bağlayın (çok daha iyi bir anten için 5. adıma bakın.) Yazılım aşağıdaki gibidir:

//Atiny üzerinde çalışacak//RF433=D0 pin 5

//DHT11=D4 pin 3 // kitaplıklar #include //Rob Tillaart'tan #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 //vericinizin bağlı olduğu yeri sabitleyin //değişkenler kayan nokta h=0; yüzer t=0; int iletim_t = 0; int iletim_h = 0; int iletim_verileri = 0; geçersiz kurulum() { pinMode(1, INPUT); man.setupTransmit(TX_PIN, MAN_1200); } geçersiz döngü() { int chk = DHT11.read11(DHT11PIN); h=DHT11.nem; t=DHT11.sıcaklık; // Biliyorum, burada 3 tamsayı değişkeni kullanıyorum // burada 1 kullanabilirdim // ancak bu yüzden takip etmek daha kolay iletim_h=100* (int) h; iletim_t=(int) t; iletim_verileri=transmit_h+transmit_t; man.transmit(transmit_data); gecikme(500); }

Yazılım, verileri göndermek için Manchester kodunu kullanır. DHT11'i okur ve sıcaklık ve nemi 2 ayrı şamandırada saklar. Manchester kodu kayan nokta değil bir tam sayı gönderdiği için birkaç seçeneğim var:1- kayan noktaları her birini iki tam sayıya bölün ve bunları gönderin2- her kayan noktayı bir tamsayı olarak gönderin3- iki kayan noktayı bir tamsayı olarak gönderin Seçenek 1 ile birleştirmem gerekiyor tamsayılar alıcıda tekrar yüzer ve hangi tamsayının ne olduğunu tanımlamam gerekir, kodu uzun süre sarmalı Seçenek 2 ile hala hangi tamsayının nem için hangisinin sıcaklık için olduğunu belirlemem gerekir. İletimde bir tam sayının kaybolması durumunda tek başına sıra ile gidemem, bu yüzden tamsayıya eklenmiş bir tanımlayıcı göndermem gerekecek. Seçenek 3 ile sadece bir tamsayı gönderebilirim. Açıkçası bu, okumaları biraz daha az doğru yapar - 1 derece içinde - ve sıfırın altında sıcaklıklar gönderilemez, ancak bu sadece basit bir koddur ve bunun etrafında yollar vardır. Şimdilik sadece prensiple ilgili. Yani yaptığım şey, yüzenleri tam sayılara çevirip nemi 100 ile çarpıyorum. Daha sonra çarpılan neme sıcaklığı ekliyorum. Nemin asla %100 olmayacağı gerçeğini göz önünde bulundurarak. Alacağım maksimum sayı 9900. Sıcaklığın da 100 dereceyi geçmeyeceği gerçeği göz önüne alındığında maksimum sayı 99 olacak, bu nedenle göndereceğim en yüksek sayı 9999 ve alıcı tarafında ayrılması kolay. 3 tamsayı kullandığım hesaplamam, 1 değişkenle kolayca yapılabileceği için aşırıya kaçıyor. Ben sadece kodu takip etmeyi kolaylaştırmak istedim. Kod artık şu şekilde derleniyor:

İkili çizim boyutu: 2, 836 bayt (maksimum 8, 192 bayttan), böylece bir Attiny 45 veya 85NOTE'a sığar, kullandığım dht.h kitaplığı Rob Tillaart'tandır. Bu kütüphane aynı zamanda bir DHT22 için de uygundur. 1.08 sürümünü kullanıyorum. Ancak Attiny85, kitaplığın daha düşük sürümleriyle bir DHT22'yi okurken sorun yaşayabilir. 1.08 ve 1.14'ün - normal bir Arduino üzerinde çalışmasına rağmen - Attiny85'te bir DHT22 okumada sorun yaşadığı bana doğrulandı. Attiny85'te bir DHT22 kullanmak istiyorsanız, bu kitaplığın 1.20 sürümünü kullanın. Her şey zamanlama ile ilgili. Kütüphanenin 1.20 versiyonu daha hızlı okunmaktadır. (Bu kullanıcı deneyimi için teşekkürler Jeroen)

Adım 2: Attiny85 ile Mini Hava İstasyonu: Alıcı

Attiny85 ile Mini Hava İstasyonu: Alıcı
Attiny85 ile Mini Hava İstasyonu: Alıcı

Yine Attiny85, Reset pininin 10 k'lık bir dirençle yükseğe çekildiği temel bir konfigürasyonda kullanılır. Alıcı modülü, dijital pim 1'e (çip üzerindeki pim 6'ya) bağlıdır. LCD, 0 ve 2 numaralı dijital pinlere bağlıdır. Anten olarak 17,2 cm'lik bir kablo takın. Kod aşağıdaki gibidir:

#Dahil etmek

#include LiquidCrystal_SR lcd(0, 2, TWO_WIRE); #define RX_PIN 1 //= fiziksel pin 6 void setup() { 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("Nemli: "); lcd.baskı(m/100); lcd.setCursor(0, 1); lcd.print("Sıcaklık"); lcd.print(m%100); } }

Kod oldukça basittir: iletilen tamsayı 'm' değişkeninde alınır ve saklanır. Nemi vermek için 100'e bölünür ve 100'ün modülü sıcaklığı verir. Öyleyse alınan tamsayının 33253325/100=333325 % 100 olduğunu varsayalım. =25Bu kod 3380 bayt olarak derlenir ve bu nedenle 45 ile değil, yalnızca bir attiny85 ile kullanılabilir

Adım 3: Attiny85/45 ile Mini Hava İstasyonu: Ekran

Attiny85/45 ile Mini Hava İstasyonu: Ekran
Attiny85/45 ile Mini Hava İstasyonu: Ekran
Attiny85/45 ile Mini Hava İstasyonu: Ekran
Attiny85/45 ile Mini Hava İstasyonu: Ekran

Ekran için en iyisi iki kablolu ekrandaki talimatlarıma başvurmam. Kısacası, ortak bir 16x2 ekran, iki dijital pin ile çalışabilmesi için bir shiftregister kullanır. Tabii ki I2C hazır bir ekran kullanmayı tercih ederseniz, yani mümkün, ancak o zaman Attiny'de bir I2C protokolü uygulamanız gerekir. Tinywire protokolü bunu yapabilir. Bazı kaynaklar bunun 1 Mhz'lik bir saat beklediğini söylese de, (başka bir projede) 8MhzAnyway'de kullanmakta herhangi bir sıkıntı yaşamadım, burada hiç uğraşmadım ve shift register kullandım.

Adım 4: Attiny85/45 ile Mini Hava İstasyonu: Olasılıklar/Sonuçlar

Attiny85/45 ile Mini Hava İstasyonu: Olasılıklar/Sonuçlar
Attiny85/45 ile Mini Hava İstasyonu: Olasılıklar/Sonuçlar
Attiny85/45 ile Mini Hava İstasyonu: Olasılıklar/Sonuçlar
Attiny85/45 ile Mini Hava İstasyonu: Olasılıklar/Sonuçlar
Attiny85/45 ile Mini Hava İstasyonu: Olasılıklar/Sonuçlar
Attiny85/45 ile Mini Hava İstasyonu: Olasılıklar/Sonuçlar

Dediğim gibi, bunu iki attiny85'li bir mini meteoroloji istasyonu yapılabileceğini göstermek için yaptım (bir attiny85+1 attiny45 ile bile). DHT11 kullanarak sadece nem ve sıcaklık gönderir. Ancak, Attiny'nin kullanmak için 5 dijital pini vardır., 6 biraz hile ile bile. Bu nedenle daha fazla sensörden veri göndermek mümkündür. Projemde - stripboard ve profesyonel bir PCB (OSHPark) üzerindeki resimlerde görüldüğü gibi - DHT11'den, LDR'den ve PIR'den veri gönderiyorum/alıyorum, hepsini kullanarak iki attiny85's Bir attiny85'i alıcı olarak kullanmanın sınırlaması, verilerin gösterişli bir tarzda sunulmasıdır. Hafıza sınırlı olduğu için: 'Sıcaklık, Nem, ışık seviyesi, nesne yaklaşıyor' gibi metinler değerli hafıza alanını oldukça hızlı dolduracaktır. Bununla birlikte, sadece sıcaklık ve nem göndermek/almak için iki Arduino kullanmaya gerek yok. Ayrıca, mümkündür. vericinin uyku moduna geçmesini ve sadece her 10 dakikada bir veri göndermesi ve böylece bir düğme hücresinden beslemesi için uyanmasını sağlamak. Açıkçası, yalnızca sıcaklık veya nem verileri gönderilemez, aynı zamanda bir dizi küçük verici gönderilebilir. toprak nemi okumaları da yapın veya bir anemometre veya yağmur ölçer ekleyin

Adım 5: Mini Hava İstasyonu: Anten

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

Anten, herhangi bir 433Mhz kurulumunun önemli bir parçasıdır. Standart 17,2 cm 'çubuk' antenle denemeler yaptım ve bobin antenle kısa bir flört ettim. En iyi işe yarayan, yapılması kolay bobin yüklü bir anten. Tasarım Ben Schueler'den ve görünüşe göre 'Elektor' dergisinde yayınlandı. Bu 'Hava soğutmalı 433 MHz Anten'in açıklamasını içeren bir PDF'yi takip etmek kolaydır. (Link kayboldu, burayı kontrol edin)

Adım 6: Bir BMP180 Ekleme

BMP180 ekleme
BMP180 ekleme

BMP180 gibi barometrik basınç sensörü eklemek ister misiniz? Bununla ilgili diğer talimatımı kontrol et.

Önerilen: