İçindekiler:
- Adım 1: Ekipman
- 2. Adım: Ahududu Pi'yi Ayarlama
- Adım 3: Pi-blaster
- Adım 4: Örnek Kodu Ayarlama
- Adım 5: Kendinden İmzalı SSL Sertifikası Oluşturun
- Adım 6: Devreyi Kablolama
- 7. Adım: Sunucu Tarafı Kodu
- 8. Adım: Web Sitesi Kodu
- 9. Adım: Sonunda
Video: Renkli-pi: 9 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:21
Bu talimat, SpeechRecognition ve SpeechSynthesis için Web Konuşma API Arayüzlerini kullanarak bir web sitesi aracılığıyla bir RGB LED şeridini sesle kontrol etmek için bir Raspberry Pi'nin nasıl kullanılacağını gösterir.
Bu örnek nasıl yapılacağını gösterir
- HTTPS üzerinden Node.js kullanarak temel bir web sitesi oluşturun
- SpeechRecognition ve SpeechSynthesis için Web Speech API Arayüzlerini kullanın.
- Raspberry Pi'deki RGB LED şeridini kontrol etmek için Cylon.js çerçevesini kullanın
- LED rengini kontrol etmek için web sayfasından Cylon.js ile WSS (Güvenli Web soketleri) üzerinden iletişim kurun
Not
- Konuşma sentezleyicisini duymak için hoparlörlere veya kulaklıklara ihtiyacınız olacak
- Ses tanımanın çalışması için mikrofonunuza erişim izni vermeniz gerekecek
- Bu, mikrofonunuza eriştiği için sitenin HTTPS altında çalıştırılması gerekir.
- Cylon-api-socketio kitaplığı şu anda https'yi desteklemiyor. Birleştirilmeyi bekleyen bir çekme isteğim var, ancak o zamana kadar /node_modules/cylon-api-socketio/lib/api.js dosyasını bu depodaki dosyayla değiştirmeniz gerekiyor
- Bu işi yapmak için pi-blaster gereklidir.
Adım 1: Ekipman
- Raspberry Pi - Ortada duran bir Raspberry Pi 2B kullandım, ancak yaklaşık 100 CAD karşılığında bir Raspberry Pi 3 Başlangıç Kiti alabilirsiniz.
- RGB LED Şerit Işığı - Minger LED Şerit Işığı 32.8ft/10M 600leds RGB SMD 5050 ile oynuyordum. Bu, yaklaşık CAD 40 için bir kontrolör ve bir güç kaynağı ile birlikte gelir
- Barrel Jack Connector - Yerel elektronik mağazamdan bir tane aldım, bunun gibi bir şey. Sadece güç kaynağınıza uyup uymadığından emin olun
- Jumper Konnektörler / Tel - Bazı Dişi-Erkek konektör kablolarım ve etrafta yatan bazı 22 Gauge Solid bağlantı telim vardı
- Breadboard Lehimsiz Prototip PCB Kartı - bunun gibi bir şey
- 3 x 10kΩ Dirençler
- LED'leri kontrol etmek için 3 x N-kanallı MOSFET - Yerel elektronik mağazamdan bazı IRL3303'ler satın aldım. Kapı eşik voltajının maks. olması önemlidir. 3.3V, böylece RPi pinleri tarafından sürülebilir; genellikle adında bir 'L' (Mantık Düzeyi) ile gösterilir.
2. Adım: Ahududu Pi'yi Ayarlama
İşletim sistemi
Normalde en son Raspbian yapısını kullanırım. Resmi indirin ve SD Karta yazın. Windows bilgisayar kullanıyorsanız, görüntüyü SD Karta yazmak için Win32 Disk Imager'ı kullanabilirsiniz.
Node.js
Node.js'nin en son sürümünü yükleyin. Yazarken 8.9.1 kullanıyorum
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get kurulum düğümü
Git'i yükleyin
sudo apt-get kurulum git
Adım 3: Pi-blaster
pi-blaster, bir Raspberry Pi'den talep ettiğiniz GPIO pinlerinde PWM'yi etkinleştirir. Kullanılan teknik son derece verimlidir: CPU kullanmaz ve çok kararlı darbeler verir.
Bu Darbe Genişliği Modülasyonu, Raspberry Pi'nin LED şerit için Kırmızı, Yeşil ve Mavi kanalların her birinin ne kadar parlak olduğunu kontrol etmesini sağlar.
İlk olarak, depoyu klonlayın
cd /opt/
sudo git klonu https://github.com/sarfata/pi-blaster.git sudo chown -R pi:pi pi-blaster
Ardından, oluşturun ve yükleyin
cd /opt/pi-blaster./autogen.sh &&./configure && make && make install
Son olarak, kullanmak istediğiniz pinleri yapılandırın
Kök hesap altında veya sudo kullanarak dosyayı oluşturun ve düzenleyin
/etc/default/pi-blaster
Aşağıdaki satırları ekleyin
DAEMON_OPTS=--gpio 23, 24, 25
Bu gpio pinlerinin, LED şeridinize bağladığınız pinlerle eşleşmesi gerekir.
NOT: GPIO ve pin numarası arasında fark vardır. Bu örnek aşağıdakileri kullanır
LED - Mavi, GPIO-23, Pin - 16
LED - Kırmızı, GPIO-24, Pin - 18 LED - Yeşil, GPIO-25, Pin - 22
Ekstra ince ayarlar
pi-blaster'ı başlat
sudo hizmeti pi-blaster başlangıcı
pi-blaster'ı yeniden başlatın
sudo hizmeti pi-blaster yeniden başlatma
pi-blaster'ı durdur
sudo hizmeti pi-blaster durdurma
Önyükleme zamanında pi-blaster'ı otomatik olarak başlat
sudo systemctl pi-blaster'ı etkinleştir
Uyarılar ve diğer uyarılar
Pi-blaster tarafından kullanılan pinler çıkış olarak konfigüre edilecektir. Bir girişe bir şey takmayın yoksa onu yok edebilirsiniz! Bu arka plan programı, kesin zamanlamalar elde etmek için ahududu pi'nin donanım PWM üretecini kullanır. Bu, ses kartınızın çıkışına müdahale edebilir.
Adım 4: Örnek Kodu Ayarlama
Örnek kodu klonlayın
1. Yüklemek için bir temel klasör oluşturun
cd /opt
sudo mkdir com.jonhaydock sudo chown pi:pi com.jonhaydockcd com.jonhaydock
2. Örnek git deposunu klonlayın
git klon
veya
git klon [email protected]:haydockjp/color-pi.git
3. Bağımlılıkları yükleyin
cd renk-pi
npm kurulumu
Bu 2-3 dakika sürebilir
4. Bu projenin HTTPS ve WSS üzerinden iletişim kurması gerekiyor. Şu anda cylon-api-socketio, SSL bağlantılarını desteklememektedir. Bu desteği eklemek için açık bir çekme talebi var, ancak bu birleştirilene kadar bu depoda bir yama dosyası var. npm kurulumundan sonra aşağıdaki komutu çalıştırın
git checkout node_modules/cylon-api-socketio/lib/api.js
Adım 5: Kendinden İmzalı SSL Sertifikası Oluşturun
1. Özel bir anahtar dosyası oluşturun
cd /opt/com.jonhaydock/color-pi/certs
openssl genrsa -out color-pi-key.pem 2048
2. Bir CSR (Sertifika İmzalama Talebi) oluşturun
openssl req -new -key color-pi-key.pem -out color-pi-csr.pem
Bu noktada sizden sertifika talebi için bazı bilgiler istenecektir. Bu kendinden imzalı bir sertifika olduğundan, ayrıntıları ne kadar doğru dolduracağınız size kalmış. İşte bir örnek
Ülke Adı (2 harfli kod) [AU]:CA
Eyalet veya İl Adı (tam ad) [Bazı Eyalet]:British Columbia Yerellik Adı (ör. şehir) :Vancouver Kuruluş Adı (ör. şirket) [Internet Widgits Pty Ltd]:Colour Pi Kuruluş Birimi Adı (ör. bölüm) : Ortak Ad (örn. sunucu FQDN'si veya SİZİN adınız) :colour-pi E-posta Adresi :[email protected]
Bir meydan okuma şifresi :
İsteğe bağlı bir şirket adı :
Bu örnekte, meydan okuma şifresini boş bırakmak için sadece geri tuşuna basın
3. Sertifikayı oluşturun
openssl x509 -req -days 1095 - color-pi-csr.pem -signkey color-pi-key.pem -out color-pi-cert.pem
4. Ekstra güvenlik için ayrıca bir Diffie Hellman Parameters dosyası oluşturacağız.
openssl dhparam -out dh_2048.pem 2048
Bu 15-20 dakika sürebilir
Adım 6: Devreyi Kablolama
LED şeridine güç verme
LED şerit 12 volt ile çalışır. Raspberry Pi, yalnızca 3.3v veya 5v çıkış verme kapasitesine sahiptir ve bu kadar çok LED'i çalıştırmak için gereken amfilerin yakınında herhangi bir yerde çıkış verme yeteneğine sahip değildir.
12 voltluk güç kaynağını Raspberry Pi'ye bağlamamak önemlidir. N-kanallı MOSFET transistörleri, RPi pinlerindeki 3.3v'yi ve LED güç kaynağının 12v'sini ayırmak için kullanılır.
MOSFET'in üç pimi Geçit, Boşaltma ve Kaynak vardır. Kullanmakta olduğunuz transistörün veri sayfası için hangi google olduğundan emin değilseniz, ör. IRL3303
Raspberry Pi Pin'i Gate'e, LED kabloyu Drain'e ve ortak bir zemini Source'a bağlayacağız. Pim yükseldiğinde, Dren ile Kaynak arasındaki voltaj Kapıyı aktif hale getirecek ve kapıyı Kaynağa bağlayacaktır.
Ayrıca Geçit ve Kaynağa 10kΩ Dirençler koyacağız, böylece RPi pimi yüksek olduğunda, içinden geçen akımı azaltarak pimi koruyabiliriz.
Sonraki adımları kendi sorumluluğunuzda gerçekleştirin. Yanlış gidebilecek hiçbir şey için sorumluluk kabul etmiyorum
Yukarıdaki gerçek devrenin bir fritzing görüntüsü ve bir fotoğrafı var.
Bunu, RPi ve LED şerit için güç kapalıyken yapmanızı tavsiye ederim.
Her renk kanalı için bir transistör devresi kurun
- Transistörlerden birini şemada gösterildiği gibi devre tahtasına yerleştirin
- 10kΩ Dirençlerden birini transistörün Drenaj ve Kaynak pinlerine yerleştirin. Bu ilk ve son pin
- Kaynak pimini (son pim) devre tahtasındaki zemine bağlamak için biraz kablo kullanın
- 1 - 3 arasındaki adımları iki kez daha tekrarlayın, böylece üç setiniz olur - her renk için bir tane (Kırmızı, Yeşil ve Mavi)
RPi pinlerini karta bağlayın
- Pin 16'yı ilk transistörün Gate Pin'ine (ilk pin) bağlayın - Bu, Mavi LED kanalı olacaktır
- Pin 18'i ilk transistörün Gate Pin'ine (ilk pin) bağlayın - Bu, Kırmızı LED kanalı olacaktır
- Pin 20'yi devre tahtasının yan tarafındaki Toprak hatlarından birine bağlayın
- Pin 22'yi ilk transistörün Gate Pin'ine (ilk pin) bağlayın - Bu Yeşil LED kanalı olacaktır
LED'lere uygun kablo renkleri kullandım: Mavi, Kırmızı ve Yeşil. zemin için siyah kullandım
Namlu Jakını Bağlayın
- Namlu jakının + ucuna beyaz bir kablo bağlayın
- Namlu jakının ucuna siyah bir kablo bağlayın
- Siyah kabloyu, RPi Pin 20'nin bağlı olduğu devre tahtasındaki aynı toprak hattına bağlayın.
- Beyaz kabloyu breadboard üzerindeki + hattına bağlayın
LED şeridin bağlanması
LED şeridim, geçici olarak devre tahtasına takılabilecek kadar iyi boyutta bir konektörle geldi. Breadboard'daki konektörü ittim ve devrenin testine bağladım.
- Pim 16'ya bağlanan ilk transistör. Drenaj piminden (orta pim) mavi kabloyu LED şerit konektöründeki mavi kabloya geçirdim
-
Pin 18'e bağlı ikinci transistör.
Boşaltmak
LED şerit konektöründeki kırmızı kabloya pim (orta pim)
-
Pin 22'ye bağlı üçüncü transistör.
Boşaltmak
LED şerit konektöründeki yeşil kabloya pim (orta pim)
- Son olarak, varil jakına bağlı olan breadboard üzerindeki + hattından beyaz bir kabloyu LED şerit konektöründeki beyaz kabloya geçirdim.
Güç
Devreyi kontrol ettikten sonra, Raspberry Pi'yi açmanız ve 12v beslemesini varil jakına takmanız iyi olacaktır.
7. Adım: Sunucu Tarafı Kodu
Sunucu tarafı kodunu çalıştırma
cd /opt/com.jonhaydock/color-pi
sudo npm başlangıcı
Bu, web sunucusunu başlatacak ve HTTPS ve WSS isteklerini dinlemeye başlayacaktır.
NOT: Önce pi-blaster'ı çalıştırmayı unutmayın
Ortam Değişkenleri
Varsayılan web sitesi bağlantı noktası 443'tür, ancak kodu başlatmadan önce bir ortam değişkeni ayarlayarak bunu geçersiz kılabilirsiniz. Örneğin
COLOUR_PI_PORT=2443 dışa aktar
Varsayılan web soket bağlantı noktası 1443'tür, ancak kodu başlatmadan önce bir ortam değişkeni ayarlayarak bunu geçersiz kılabilirsiniz. Örneğin
dışa aktar COLOUR_PI_WSS_PORT=3443
Not: Web soketi ana web sitesi değil cylon.js tarafından işlendiğinden, bunların farklı bağlantı noktalarında olması gerekir.
Mavi (pim 16), Green (pim 18) ve Red (pim 22) için kullanılan pimler de geçersiz kılınabilir. Örneğin
dışa aktar COLOUR_PI_PIN_BLUE=36
dışa aktar COLOUR_PI_PIN_RED=38 dışa aktar COLOUR_PI_PIN_GREEN=40
Not: Bunların, kullandığınız fiziksel pinlerle eşleşmesi gerekir. Bunları değiştirirseniz, /etc/default/pi-blaster dosyasında tanımlanan GPIO'ları da güncellemeniz gerekir. Örneğin
DAEMON_OPTS=--gpio 16, 20, 21
Ana sunucu kodu app.js dosyasında bulunabilir. Bu dosya HTTPS web sunucusunu başlatır ve ayrıca Cylon.js çerçevesi aracılığıyla ayrı bir bağlantı noktasındaki web soket isteklerini dinlemek için socket.io'yu kullanır.
Web sitesine erişmek için ana bilgisayarınızda bir web tarayıcısı açmalı (bunu yalnızca Chrome'da test ettim) ve Raspberry Pi'nin IP adresini kullanmalısınız, örn.
10.0.1.2/
Raspberry Pi komut satırından IP adresinizi öğrenebilirsiniz.
ifconfig
Web sunucusu, ortak klasör altındaki herhangi bir içeriği sunacaktır. index.html sayfasını görüntülemek için varsayılandır.
Cylon.js, Socket.io'yu bağlayabileceğiniz bir bitiş noktası oluşturur.
10.0.1.2:1443/api/robots/color-pi
Kırmızı, Yeşil ve Mavi değerlerini ayarlamak için soket üzerinden set_color mesajı gönderebilirsiniz.
device.emit('set_color', r, g, b)
Bu, app.js'de setColour işlevini çağıran set_color komutunu çağırır. Bu işlev, R, G ve B değerlerinin her biri için parlaklık seviyelerini 0 ile 255 arasında ayarlar. Burada 0 kapalı ve 255 tamamen açıktır.
Örneğin.
Kırmızı r=255, g=0, b=0
Yeşil r=0, g=255, b=0 Mavi r=0, g=0, b=255 Beyaz r=255, g=255, b=255 Siyah / Kapalı r=0, g=0, b=0
8. Adım: Web Sitesi Kodu
Genel
Web sitesi, önceden tanımlanmış bir listeden renk seçmek için ses tanıma özelliğini kullanır. Listeye bir renk eklemek için sunucudaki dosyayı düzenleyin: public/data/colors.json
Örneğin.
"kırmızı":"#FF0000",
Bir renk bulunduğunda veya açılır menüden seçildiğinde, Çıktı kutusu o renge ayarlanacak ve socket.io aracılığıyla Raspnerry Pi'ye LED'leri aynı renge ayarlayacak bir mesaj gönderilecek.
NOT: LED'lerinizin ne kadar iyi olduğuna bağlı olarak benzer bir renk görebilir veya görmeyebilirsiniz. Bazılarını çoğaltmak diğerlerinden daha kolaydır
Web sitesini ilk yüklediğinizde, kendinden imzalı bir SSL sertifikası kullandığınız için bunu tarayıcıda onaylamanız gerekecektir. Sertifika hakkında bir güvenlik uyarısı görmelisiniz.
Ses tanıma
Bu kutunun bir mikrofon simgesi vardır. Simge yeşilken tıklarsanız, renkleri dinlemeye başlayacaktır. Dinlerken kırmızıya döner. Kısa bir süre dinleyecek ve sonra duracaktır. Kırmızıyken mikrofon simgesine tıklamak da dinlemesini durduracaktır.
Bu sitenin mikrofonunuza erişmesi gerektiğinden, istendiğinde ona izin vermeniz gerekecektir.
NOT: Bu kısım için bir mikrofona ihtiyacınız vardır. Web kameramdakini kullanıyorum.
Geçici Transkript
Bu kutu, söylediğiniz kelimelerin tahminlerini, onları söylerken takip ediyor.
Nihai Transkript
Bu kutu, söylediklerinizin son tahminini izler.
Bilinen Renkler
Bu, sayfanın bildiği tüm renklerin bir listesidir. Colours.json dosyasından oluşturulur. Bu renklerden birini seçerseniz, sayfa rengi söyler ve çıktı rengini ayarlar.
NOT: Konuşmayı duymak için hoparlör veya kulaklığa ihtiyacınız vardır.
Bulunan Renkler
Bu web sayfası şu anda yalnızca renk eşleştirmeyi desteklemektedir. Mikrofona söylediğiniz kelime veya kelimeler bilinen bir rengin adıyla eşleşirse veya Bilinen Renk listesinden bir renk seçerseniz, buraya günlük olarak eklenecektir.
Çıktı
En son bulunan renk burada gösterilecektir. Color Hex değeri (ör. #7cb9e8) ve RGB değeri (ör. 124, 185, 232) metin olarak görüntülenecek ve ortadaki kutunun arka planı gerçek renge ayarlanacaktır.
Bu renk Raspberry Pi'ye de gönderiliyor ve LED şeridin renginin değiştiğini görmelisiniz.
NOT: LED renginin değiştiğini görmüyorsanız, pi-blaster'ı ve/veya node.js uygulamasını yeniden başlatmayı deneyin.
sudo hizmeti pi-blaster yeniden başlatma
sudo npm başlangıcı
Bilinen Sesler
Bu kutu, desteklenen konuşma Sentezinden "Bilinen Sesler" listesini görüntüler. Bu seslerden birini seçmek duyacağınız sesi ve dili değiştirecek ve sesin adını söyleyecektir.
Ayrıca, SpeechRecognition'ın dilini listede seçilenle aynı olacak şekilde değiştirecektir.
9. Adım: Sonunda
İşte görmeniz gerekenlere bir örnek.
Herhangi bir sorununuz varsa lütfen bana bildirin ve gerektiğinde güncelleyebilirim.
Önerilen:
CircuitPython ile Çift Renkli Çubuk Grafik: 5 Adım (Resimlerle)
CircuitPython ile Çift Renkli Çubuk Grafiği: Bu LED çubuk grafiğini Pimoroni sitesinde gördüm ve covid-19 karantinası uygularken bunun ucuz ve eğlenceli bir proje olabileceğini düşündüm. Her birinde kırmızı ve yeşil olmak üzere 24 LED içerir. 12 segment, yani teoride r'yi gösterebilmelisiniz
Attiny85 Eşzamanlı Programlama veya Çok Renkli Gözlü Kabak: 7 Adım
Attiny85 Eşzamanlı Programlama veya Çok Renkli Gözlü Kabak: Bu proje, iki adet 10 mm'lik üç renkli ortak anot LED'inin (Kabak Cadılar Bayramı Parıltısının çok renkli gözleri) Attiny85 yongasıyla nasıl kontrol edileceğini gösterir. Projenin amacı okuyucuyu eşzamanlı programlama sanatıyla tanıştırmak ve Adam D
Renkli Galaksi Gece Lambası: 7 Adım
Renkli Galaksi Gece Lambası: Merhaba Arkadaşlar, Bugün sizlere Mason kavanozdan muhteşem bir galaksi gece lambasının nasıl yapıldığını göstereceğim
Renkli LED Dekorasyon: 9 Adım (Resimlerle)
Renkli LED Dekorasyon: Bir süredir aklımda bu fikir vardı ama çok fazla boş zamanım ve gerçekleştirmek için gerekli tüm malzemelerim yoktu ama şimdi bitti, sıva ile çevrili renkli LED'lerle aydınlatılan kırık temperli camdan yapılmıştır
Çok Renkli Nokta Yazıcı: 6 Adım
Çok Renkli Nokta Yazıcı: Herkese merhaba. Bu talimat, Çok Renkli Noktalı Yazıcının tasarımı ve üretimi hakkındadır. Esas olarak, burada öğretilebilir olarak yayınlanmış olan benzer bir çalışmaya dayanıyordu. Bahsettiğim çalışma “Dotter: Huge Arduino Tabanlı Dot Matrix Pr