- ADC0804 ve Raspberry Pi:
- LM35 Sıcaklık Sensörü:
- Gerekli Bileşenler:
- Devre ve Çalışma Açıklaması:
- Programlama Açıklaması:
Raspberry Pi Eğitim Serimizde çoğunlukla Raspberry Pi ile arayüz oluşturan tüm Temel Bileşenleri ele aldık. Raspberry Pi ile çalışmış olsun ya da olmasın herkes bu Seriden kolayca öğrenebilsin diye tüm Öğreticileri basit ve detaylı bir şekilde ele aldık. Ve tüm eğitimleri tamamladıktan sonra, Raspberry Pi kullanarak bazı Üst Düzey projeler inşa edebileceksiniz.
Bu yüzden burada, önceki eğitimlere dayanarak ilk uygulamayı tasarlıyoruz. İlk temel uygulama Raspberry Pi'nin sunduğu Okuma Odası Sıcaklığıdır. Ve Okumaları bilgisayardan izleyebilirsiniz.
Önceki eğitimlerde tartışıldığı gibi, Raspberry Pi'de dahili olarak sağlanan ADC kanalı yoktur. Dolayısıyla, herhangi bir analog sensörle arayüz oluşturmak istiyorsak, bir ADC dönüştürme ünitesine ihtiyacımız var. Ve eğitimlerimizden birinde analog bir değer okumak için ADC0804 yongasını Raspberry Pi'ye bağladık. Bu Oda Sıcaklığı Termometresini oluşturmadan önce gözden geçirin.
ADC0804 ve Raspberry Pi:
ADC0804, analog sinyali 8 bitlik dijital verilere dönüştürmek için tasarlanmış bir çiptir. Bu çip, popüler ADC serilerinden biridir. Bu 8 bitlik bir dönüştürme birimi, yani değerlerimiz veya 0 ila 255 değerimiz var. Bu çipin çözünürlüğü seçtiğimiz referans voltajına göre değişiyor, daha sonra bundan bahsedeceğiz. Aşağıda ise ADC0804 arasında Pin:
Şimdi burada bir diğer önemli şey, ADC0804'ün 5V'de çalışması ve bu nedenle 5V lojik sinyalde çıkış sağlamasıdır. 8 pin çıkışında (8 biti temsil eder), her pin lojik'1'i temsil etmek için + 5V çıkış sağlar. Yani sorun şu ki PI mantığı + 3.3v'dir, bu nedenle PI'nin + 3.3V GPIO pinine + 5V mantığı veremezsiniz. Herhangi bir PI GPIO pinine + 5V verirseniz kart zarar görür.
Dolayısıyla, + 5V'den mantık seviyesini düşürmek için voltaj bölücü devresi kullanacağız. Gerilim Bölücü Devresini daha önce tartıştık, daha fazla açıklama için ona baktık. Yapacağımız şey, + 5V mantığını 2 * 2.5V mantığına bölmek için iki direnç kullanacağız. Böylelikle bölünmeden sonra PI'ye + 2.5v mantığı vereceğiz. Dolayısıyla, ADC0804 tarafından '1' mantığı sunulduğunda, PI GPIO Pininde + 5V yerine + 2.5V göreceğiz.
LM35 Sıcaklık Sensörü:
Şimdi Oda Sıcaklığını Okumak için bir sensöre ihtiyacımız var. Burada LM35 Sıcaklık Sensörünü kullanacağız. Sıcaklık genellikle "Santigrat" veya "Fahrenhayt" olarak ölçülür. “LM35” sensörü Santigrat derece olarak çıktı sağlar.
Şekilde gösterildiği gibi, LM35 üç pinli transistör benzeri bir cihazdır. Pimler şu şekilde numaralandırılmıştır:
PIN1 = Vcc - Güç (+ 5V'ye Bağlı)
PIN2 = Sinyal veya Çıkış (ADC çipine bağlı)
PIN3 = Toprak (Toprağa bağlı)
Bu sensör, sıcaklığa bağlı olarak çıkışta değişken voltaj sağlar. Sıcaklıktaki her +1 santigrat artış için çıkış pininde + 10mV daha yüksek voltaj olacaktır. Yani sıcaklık 0◦ santigrat ise sensör çıkışı 0V, sıcaklık 10◦ santigrat ise sensör çıkışı + 100mV, sıcaklık 25◦ santigrat ise sensör çıkışı + 250mV olacaktır.
Gerekli Bileşenler:
Burada Raspbian Jessie OS ile Raspberry Pi 2 Model B kullanıyoruz. Tüm temel Donanım ve Yazılım gereksinimleri daha önce tartışılmıştır, ihtiyaç duyduğumuz dışında bunları Raspberry Pi Giriş bölümünde bulabilirsiniz:
- Bağlantı pimleri
- 1KΩ direnç (17 adet)
- 10.000 saksı
- 0.1µF kapasitör
- 100µF kapasitör
- 1000µF kapasitör
- ADC0804 IC
- LM35 Sıcaklık Sensörü
- Ekmek Tahtası
Devre ve Çalışma Açıklaması:
Ahududuyu ADC0804 ve LM35'e bağlamak için yapılan bağlantılar aşağıdaki devre şemasında gösterilmiştir.
LM35 çıkışında çok fazla voltaj dalgalanması var; bu nedenle, şekilde gösterildiği gibi çıkışı yumuşatmak için 100 uF kapasitör kullanılır.
ADC'de her zaman çok fazla gürültü vardır, bu gürültü performansı büyük ölçüde etkileyebilir, bu nedenle Gürültü Filtrasyonu için 0.1 uF kapasitör kullanıyoruz. Bu olmadan, çıktıda çok fazla dalgalanma olacaktır.
Çip, RC (Direnç-Kapasitör) osilatör saatinde çalışır. Devre şemasında gösterildiği gibi , C2 ve R20 bir Saat oluşturur. Burada hatırlanması gereken önemli şey, C2 kapasitörünün daha yüksek ADC dönüşümü oranı için daha düşük bir değere değiştirilebilmesidir. Ancak daha yüksek hızda doğrulukta azalma olacaktır. Bu nedenle, uygulama daha yüksek doğruluk gerektiriyorsa, daha yüksek değerli kondansatörü seçin ve daha yüksek hız için daha düşük değerli kondansatörü seçin.
Daha önce de belirtildiği gibi, LM35 her santigrat için + 10mV sağlar. LM35 tarafından ölçülebilen maksimum sıcaklık 150º santigrattır. Bu yüzden LM35 çıkış terminalinde maksimum 1.5V'umuz olacak. Ancak ADC0804'ün varsayılan referans voltajı + 5V'tur. Dolayısıyla, bu referans değerini kullanırsak, çıktının çözünürlüğü düşük olacaktır çünkü dijital çıkış aralığının maksimum (5 / 1.5)% 34'ünü kullanırız.
Neyse ki ADC0804, yukarıdaki Pin Şemasında gösterildiği gibi ayarlanabilir bir Vref pimine (PIN9) sahiptir. Bu yüzden çipin Vref değerini + 2V olarak ayarlayacağız. Vref + 2V'yi ayarlamak için PIN9'da + 1V (VREF / 2) voltaj sağlamamız gerekir. Burada PIN9'daki voltajı + 1V'a ayarlamak için 10K pot kullanıyoruz. Doğru voltajı elde etmek için voltmetreyi kullanın.
Daha önce Arduino ve AVR Mikrodenetleyici ile Oda sıcaklığını okumak için LM35 Sıcaklık Sensörünü kullandık. Ayrıca Arduino kullanarak Nem ve Sıcaklık Ölçümü'nü kontrol edin
Programlama Açıklaması:
Her şey devre şemasına göre bağlandıktan sonra, programı PYHTON'da yazmak için PI'yi AÇIK hale getirebiliriz.
PYHTON programında kullanacağımız birkaç komuttan bahsedeceğiz, Kütüphaneden GPIO dosyasını içe aktaracağız, aşağıdaki fonksiyon PI'nın GPIO pinlerini programlamamızı sağlar. Ayrıca "GPIO" yu "IO" olarak yeniden adlandırıyoruz, bu nedenle programda GPIO pinlerine başvurmak istediğimizde "IO" kelimesini kullanacağız.
RPi.GPIO'yu IO olarak içe aktar
Bazen kullanmaya çalıştığımız GPIO pinleri başka işlevler yapıyor olabilir. Bu durumda programı çalıştırırken uyarılar alacağız. Aşağıdaki komut PI'ya uyarıları dikkate almamasını ve programa devam etmesini söyler.
IO.setwarnings (False)
PI'nın GPIO pinlerini, kart üzerindeki pin numarasına veya fonksiyon numaralarına göre yönlendirebiliriz. Tahtadaki 'PIN 29' gibi 'GPIO5'. Yani burada ya buradaki pimi '29' veya '5' ile temsil edeceğimizi söylüyoruz.
IO.setmode (IO.BCM)
Giriş pinleri olarak 8 pin ayarlıyoruz. Bu pinlerle 8 bitlik ADC verisi tespit edeceğiz.
IO.setup (4, IO.IN) IO.setup (17, IO.IN) IO.setup (27, IO.IN) IO.setup (22, IO.IN) IO.setup (5, IO.IN) IO.setup (6, IO.IN) IO.setup (13, IO.IN) IO.setup (19, IO.IN)
Küme parantezlerindeki koşul doğru ise, döngü içindeki ifadeler bir kez çalıştırılacaktır. Dolayısıyla, GPIO pini 19 yükselirse, IF döngüsünün içindeki ifadeler bir kez çalıştırılacaktır. GPIO pini 19 yükselmezse, IF döngüsünün içindeki ifadeler yürütülmeyecektir.
(IO.input (19) == Doğru) ise:
Aşağıdaki komut sonsuz döngü olarak kullanılır, bu komutla bu döngü içindeki ifadeler sürekli olarak çalıştırılır.
1 iken:
Daha Fazla Kod Açıklaması aşağıdaki Kod Bölümünde verilmiştir.
Programı yazdıktan sonra, çalıştırma zamanı. Programı çalıştırmadan önce, devrede neler olup bittiğini Özet olarak konuşalım. İlk LM35 sensörü, oda sıcaklığını algılar ve çıkışında analog bir voltaj sağlar. Bu değişken voltaj, sıcaklığı doğrusal olarak ºC başına + 10mV ile temsil eder. Bu sinyal ADC0804 yongasına beslenir, bu yonga Analog değeri 10mv başına 255/200 = 1.275 sayım veya 1 derece için 1.275 sayı ile dijital değere dönüştürür. Bu sayı, PI GPIO tarafından alınır. Program, sayımı sıcaklık değerine çevirerek ekranda gösterir. PI tarafından okunan tipik sıcaklık aşağıda gösterilmiştir.
Dolayısıyla biz bu Raspberry Pi sıcaklık monitörüyüz.