- Gerekli Materyal:
- ADC0804 Tek Kanallı 8-bit ADC modülü:
- Devre Şeması ve Açıklaması:
- Raspberry Pi'yi Programlamak:
- Raspberry Pi kullanarak LCD'de Flex Sensör değeri gösteriliyor:
Raspberry Pi, elektronik mühendisleri ve hobiler için tasarlanmış ARM mimarisi işlemci tabanlı bir karttır. PI, şu anda piyasadaki en güvenilir proje geliştirme platformlarından biridir. Daha yüksek işlemci hızı ve 1 GB RAM ile PI, Görüntü işleme ve Nesnelerin İnterneti gibi birçok yüksek profilli proje için kullanılabilir. Bir PI ile yapılabilecek birçok harika şey var, ancak üzücü bir özellik, dahili bir ADC modülüne sahip olmamasıdır.
Sadece, Raspberry Pi sensörlerle arayüz oluşturabilirse, gerçek dünya parametreleri hakkında bilgi sahibi olabilir ve onunla etkileşim kurabilir. Dışarıdaki sensörlerin çoğu analog sensördür ve bu nedenle bu sensörlerle arayüz oluşturmak için Raspberry Pi ile harici bir ADC modülü IC kullanmayı öğrenmeliyiz. Bu projede Raspberry Pi ile Flex Sensör Arayüzünü ve Değerlerini LCD Ekranda Göstermeyi öğreneceğiz.
Gerekli Materyal:
- Raspberry Pi (Herhangi Bir Model)
- ADC0804 IC
- 16 * 2 LCD ekran
- Flex Sensör
- Dirençler ve kapasitörler
- Breadboard veya performans tahtası.
ADC0804 Tek Kanallı 8-bit ADC modülü:
Daha fazla ilerlemeden önce, bu ADC0804 IC'yi ve bunu ahududu pi ile nasıl kullanacağımızı öğrenelim. ADC0804, tek kanallı 8 bitlik bir IC'dir, yani tek bir ADC değerini okuyabilir ve onu 8 bitlik dijital veriyle eşleyebilir. Bu 8 bitlik dijital veriler Raspberry Pi tarafından okunabilir, bu nedenle 2 ^ 8 256 olduğundan değer 0-255 olacaktır. Aşağıdaki IC'nin pin çıkışlarında gösterildiği gibi, DB0 ila DB7 pinleri bu dijitalleri okumak için kullanılır. değerler.
Ş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, '1' mantığını 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 Raspberry 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. ADC hakkında daha fazla bilgiyi burada bulabilirsiniz: ADC0804'e Giriş.
Aşağıda, Perf Board üzerinde oluşturduğumuz ADC0804 kullanan ADC Modülünün resmi bulunmaktadır:
Devre Şeması ve Açıklaması:
Flex Sensor ile Raspberry Pi arasında arayüz oluşturmak için eksiksiz devre şeması aşağıda gösterilmiştir. Aynısının açıklaması aşağıdaki gibidir.
Bu ahududu pi esnek sensör devresi, çok sayıda kabloyla biraz karmaşık görünebilir, ancak daha yakından bakarsanız, kabloların çoğu doğrudan LCD'den ve 8 bit veri pininden Raspberry pi'ye bağlanır. Aşağıdaki tablo bağlantıları kurarken ve doğrularken size yardımcı olacaktır.
Pin adı |
Ahududu PIN numarası |
Raspberry Pi GPIO adı |
LCD Vss |
Pin 4 |
Zemin |
LCD Vdd |
Toplu iğne 6 |
Vcc (+ 5V) |
LCD Vee |
Pin 4 |
Zemin |
LCD Rs |
Toplu iğne 38 |
GPIO 20 |
LCD RW |
Toplu iğne 39 |
Zemin |
LCD E |
Toplu iğne 40 |
GPIO 21 |
LCD D4 |
Toplu iğne 3 |
GPIO 2 |
LCD D5 |
Toplu iğne 5 |
GPIO 3 |
LCD D6 |
Toplu iğne 7 |
GPIO 4 |
LCD D7 |
Toplu iğne 11 |
GPIO 17 |
ADC0804 Vcc |
PIN 2 |
Vcc (+ 5V) |
ADC0804 B0 |
Pin 19 (5.1K ile) |
GPIO 10 |
ADC0804 B1 |
Pin 21 (5.1K ile) |
GPIO 9 |
ADC0804 B2 |
Pin 23 (5.1K ile) |
GPIO 11 |
ADC0804 B3 |
Pin 29 (5.1K ile) |
GPIO 5 |
ADC0804 B4 |
Pin 31 (5.1K ile) |
GPIO 6 |
ADC0804 B5 |
Pin 33 (5.1K ile) |
GPIO 13 |
ADC0804 B6 |
Pin 35 (5.1K ile) |
GPIO 19 |
ADC0804 B7 |
Pin 37 (5.1K ile) |
GPIO 26 |
ADC0804 WR / INTR |
Toplu iğne 15 |
GPIO 22 |
O zamandan beri Raspberry üzerindeki pin numaralarını belirlemek için aşağıdaki resmi kullanabilirsiniz.
Tüm ADC modülleri gibi, ADC0804 IC de çalışması için bir saat sinyali gerektirir, neyse ki bu IC dahili bir saat kaynağına sahiptir, bu yüzden RC devresini devrede gösterildiği gibi CLK girişine ve CLK R pinlerine eklememiz gerekir. 10K ve 105pf değerini kullandık, ancak 1uf, 0.1uf, 0.01uf gibi herhangi bir değeri de kullanabiliriz.
Daha sonra Flex sensörünü bağlamak için 100K direnç kullanarak bir potansiyel bölücü devre kullandık. Flex sensörü büküldüğünde, direnç değişecek ve direnç boyunca potansiyel düşecektir. Bu düşüş ADC0804 IC ile ölçülür ve 8 bitlik veriler buna göre oluşturulur.
Flex Sensor ile ilgili diğer projeleri kontrol edin:
- AVR Mikrodenetleyici ile Flex Sensör Arayüzü
- Flex Sensor kullanan Arduino tabanlı Angry Bird Oyun Denetleyicisi
- Flex Sensör ile Servo Motor Kontrolü
- Arduino Kullanarak Parmaklara Dokunarak Ton Oluşturma
Raspberry Pi'yi Programlamak:
Bağlantıları bitirdikten sonra Raspberry Pi kullanarak bu 8 bitlerin durumunu okumalı ve onlardan yararlanabilmemiz için Ondalık'a çevirmeliyiz. Aynısını yapmak ve elde edilen değerleri LCD ekranda görüntülemek için program bu sayfanın sonunda verilmiştir. Ayrıca, kod aşağıda küçük önemsiz ayrıntılarla açıklanmıştır.
LCD'yi Pi ile arayüzlemek için bir LCD kitaplığına ihtiyacımız var. Bunun için shubham tarafından geliştirilen ve 16 * 2 LCD ekranı bir Pi ile dört tel modunda arayüzlememize yardımcı olacak kitaplığı kullanıyoruz. Ayrıca zaman ve Pi GPIO pinlerinden yararlanmak için kitaplıklara ihtiyacımız var.
Not : lcd.py buradan indirilmeli ve bu programın kaydedildiği dizine yerleştirilmelidir. Ancak o zaman kod derlenecektir.
lcd'yi içe aktar # LCD kitaplığını [email protected] ile içe aktarın içe aktarım zamanı # İçe aktarma zamanı RPi.GPIO'yu GPIO olarak içe aktar #GPIO yalnızca GPIO olarak gönderilecek
LCD pimi tanımları aşağıda gösterildiği gibi değişkenlere atanır. Bu numaraların GPIO pin numaraları olduğunu ve gerçek pin numaraları olmadığını unutmayın. GPIO numaralarını pin numaraları ile karşılaştırmak için yukarıdaki tabloyu kullanabilirsiniz. İkili dizi, tüm veri pin numaralarını içerecek ve dizi bitleri, tüm GPIO pinlerinin sonuç değerini depolayacaktır.
#LCD pin tanımları D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 ikili = (10,9,11,5,6,13,19,26) # Pin numaraları dizisi DB0'a bağlanır DB7 bitleri = # 8 bitlik verilerin sonuç değerleri
Şimdi giriş ve çıkış pinlerini tanımlamamız gerekiyor. Yedi veri pini giriş pini olacak ve tetik pimi (RST ve INTR) çıkış pini olacaktır. Veri sayfasına göre belirli bir süre için çıkış pinini yüksek tetiklersek giriş pininden 8 bitlik veri değerlerini okuyabiliriz. İkili pinleri ikili dizide tanımladığımızdan, aşağıda gösterildiği gibi bildirim için bir for döngüsü kullanabiliriz.
ikili sistemlerde ikili için: GPIO.setup (ikili, GPIO.IN) # Tüm ikili pinler giriş pinleridir #Trigger pin GPIO.setup (22, GPIO.OUT) #WR ve INTR pinleri çıktı
Şimdi, LCD kitaplık komutlarını kullanarak, LCD modülünü başlatabilir ve aşağıda gösterildiği gibi küçük bir giriş mesajı gösterebiliriz.
mylcd = lcd.lcd () mylcd.begin (D4, D5, D6, D7, RS, EN) #Intro Message mylcd.Print ("Flex Sensor with") mylcd.setCursor (2,1) mylcd.Print ("Raspberry Pi ") time.sleep (2) mylcd.clear ()
Sonsuz while döngüsünün içinde, ikili değerleri ondalık sayıya çevirip sonucu LCD'de güncellemeye başlarız. Daha önce ADC değerlerini okumadan önce söylediğimiz gibi , ADC dönüşümünü etkinleştirmek için tetik pimini belirli bir süre yüksek tutmalıyız. Bu, aşağıdaki satırlar kullanılarak yapılır.
GPIO.output (22, 1) # Açma Tetikleme süresi. Uyku (0.1) GPIO.output (22, 0) # Kapatma Tetikleme
Şimdi 8 veri pinini okuyup bit dizisindeki sonucu güncellemeliyiz. Bunu yapmak için , her bir giriş pinini True ve False ile karşılaştırmak için bir for döngüsü kullanıyoruz. Doğruysa, ilgili bit dizisi 1 olarak yapılacaktır, aksi takdirde 0 yapılacaktır. Bu, tüm 8 bitlik veriler, okunan değerlere göre 0 ve 1 yapılacaktır.
# (8) aralığındaki i için giriş pinlerini okuyun ve sonucu bit dizisinde güncelleyin: if (GPIO.input (binarys) == True): bits = 1 if (GPIO.input (binarys) == False): bits = 0
Bit dizisini güncelledikten sonra, bu diziyi ondalık değere çevirmeliyiz. Bu, ikiliden ondalık sayıya dönüşümden başka bir şey değildir. 8 bitlik ikili veri için 2 ^ 8 256'dır. Dolayısıyla 0'dan 255'e ondalık veri alacağız. Python'da "**" operatörü herhangi bir değerin gücünü bulmak için kullanılır. Yana bit MSB ile başlar 2 ^ (7-konumu) ile çarpın biz. Bu şekilde tüm ikili değerleri ondalık verilere dönüştürebilir ve ardından LCD'de görüntüleyebiliriz.
# aralık (8) 'de i için bit dizisini kullanarak ondalık değeri hesaplayın: ondalık = ondalık + (bit * (2 ** (7-i)))
Ondalık değeri bildiğimizde , voltaj değerini hesaplamak kolaydır. Sadece 19.63 ile çarpmamız gerekiyor. Çünkü 8 bitlik bir 5VADC için her bit 19,3 mili volt analojisidir. Ortaya çıkan voltaj değeri, ADC0804 IC'nin Vin + ve Vin- pinlerinde görünen voltaj değeridir.
# voltaj değerini hesapla Voltaj = ondalık * 19.63 * 0.001 # bir birim 19.3mV'dir
Voltaj değerini kullanarak, esnek sensörün nasıl ve hangi yönde büküldüğünü belirleyebiliriz. Aşağıdaki satırlarda , Flex sensörünün LCD ekran üzerindeki konumunu belirtmek için, okunan voltaj değerlerini önceden belirlenmiş voltaj değerleri ile karşılaştırdım.
#Mylcd.setCursor (1,1) sensörünün voltajını ve ekran durumunu karşılaştır: eğer (Voltage> 3.8): mylcd.Print ("Bent Forward") elif (Voltage <3.5): mylcd.Print ("Bent Back") else: mylcd.Print ("Kararlı")
Benzer şekilde, Raspberry Pi'nin gerçekleştirmesini istediğiniz herhangi bir görevi gerçekleştirmek için voltaj değerini kullanabilirsiniz.
Raspberry Pi kullanarak LCD'de Flex Sensör değeri gösteriliyor:
Projenin çalışması çok basit. Ancak lcd.py başlık dosyasını indirdiğinizden ve mevcut programınızın bulunduğu dizine yerleştirdiğinizden emin olun. Daha sonra devre şemasında gösterilen bağlantıları bir breadboard veya perf board kullanarak yapın ve Pi'nizde aşağıdaki programı çalıştırın ve bir şeyler çalıştırmalısınız. Kurulumunuz aşağıdaki gibi bir şeye benzemelidir.
Gösterildiği gibi, LCD Ondalık değeri, voltaj değerini ve sensör konumunu gösterecektir. Sensörü öne veya arkaya doğru bükmeniz yeterlidir; voltajın ve ondalık değerin değiştiğini görebilmeniz gerekir, ayrıca bir durum metni görüntülenir. Herhangi bir sensörü bağlayabilir ve içindeki Voltajın değiştiğini fark edebilirsiniz.
Eğitimin tam çalışması aşağıda verilen videoda bulunabilir. Umarım projeyi anlamışsınızdır ve benzer bir şey yapmaktan zevk almışsınızdır. Herhangi bir şüpheniz varsa, onları yorum bölümünde veya forumlarda bırakın, ben de cevaplamak için elimden geleni yapacağım.