İçindekiler:

Renkli-pi: 9 Adım
Renkli-pi: 9 Adım

Video: Renkli-pi: 9 Adım

Video: Renkli-pi: 9 Adım
Video: Gezegenler - Eğitici Çocuk Şarkıları 2024, Kasım
Anonim
Renk-pi
Renk-pi

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

  1. 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.
  2. 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
  3. 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
  4. Jumper Konnektörler / Tel - Bazı Dişi-Erkek konektör kablolarım ve etrafta yatan bazı 22 Gauge Solid bağlantı telim vardı
  5. Breadboard Lehimsiz Prototip PCB Kartı - bunun gibi bir şey
  6. 3 x 10kΩ Dirençler
  7. 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
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

Devreyi Kablolama
Devreyi Kablolama
Devreyi Kablolama
Devreyi Kablolama
Devreyi Kablolama
Devreyi Kablolama
Devreyi Kablolama
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

  1. Transistörlerden birini şemada gösterildiği gibi devre tahtasına yerleştirin
  2. 10kΩ Dirençlerden birini transistörün Drenaj ve Kaynak pinlerine yerleştirin. Bu ilk ve son pin
  3. Kaynak pimini (son pim) devre tahtasındaki zemine bağlamak için biraz kablo kullanın
  4. 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

  1. Pin 16'yı ilk transistörün Gate Pin'ine (ilk pin) bağlayın - Bu, Mavi LED kanalı olacaktır
  2. Pin 18'i ilk transistörün Gate Pin'ine (ilk pin) bağlayın - Bu, Kırmızı LED kanalı olacaktır
  3. Pin 20'yi devre tahtasının yan tarafındaki Toprak hatlarından birine bağlayın
  4. 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

  1. Namlu jakının + ucuna beyaz bir kablo bağlayın
  2. Namlu jakının ucuna siyah bir kablo bağlayın
  3. Siyah kabloyu, RPi Pin 20'nin bağlı olduğu devre tahtasındaki aynı toprak hattına bağlayın.
  4. 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.

  1. Pim 16'ya bağlanan ilk transistör. Drenaj piminden (orta pim) mavi kabloyu LED şerit konektöründeki mavi kabloya geçirdim
  2. Pin 18'e bağlı ikinci transistör.

    Boşaltmak

    LED şerit konektöründeki kırmızı kabloya pim (orta pim)

  3. Pin 22'ye bağlı üçüncü transistör.

    Boşaltmak

    LED şerit konektöründeki yeşil kabloya pim (orta pim)

  4. 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ı Kodu
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

Web Sitesi Kodu
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

Image
Image

İşte görmeniz gerekenlere bir örnek.

Herhangi bir sorununuz varsa lütfen bana bildirin ve gerektiğinde güncelleyebilirim.

Önerilen: