Isi kandungan:

Warna-pi: 9 Langkah
Warna-pi: 9 Langkah

Video: Warna-pi: 9 Langkah

Video: Warna-pi: 9 Langkah
Video: Problem Catur 9 langkah putih menang, Ayo Pikirkan !!! 2024, November
Anonim
Warna-pi
Warna-pi

Instruksional ini menunjukkan cara menggunakan Raspberry Pi untuk mengawal suara jalur LED RGB, melalui laman web, menggunakan Antaramuka API Ucapan Web untuk Ucapan Pengenalan dan Sintesis Ucapan.

Contoh ini menunjukkan cara untuk

  • Buat laman web asas menggunakan Node.js melalui
  • Gunakan Antaramuka API Speech Web untuk SpeechRecognition dan SpeechSynthesis.
  • Gunakan rangka Cylon.js untuk mengawal jalur LED RGB pada Raspberry Pi
  • Berkomunikasi melalui WSS (soket Web Selamat) dari laman web ke Cylon.js untuk mengawal warna untuk LED

Catatan

  • Anda memerlukan pembesar suara atau fon kepala untuk mendengar synthesizer ucapan
  • Anda perlu memberi akses ke mikrofon anda agar pengecaman suara berfungsi
  • Kerana mengakses mikrofon anda, laman web ini perlu dijalankan di bawah
  • Perpustakaan cylon-api-socketio tidak menyokong https pada masa ini. Saya mempunyai permintaan tarik yang menunggu untuk digabungkan, tetapi sehingga anda perlu mengganti /node_modules/cylon-api-socketio/lib/api.js dengan fail di repositori ini
  • pi-blaster diperlukan untuk membuat kerja ini.

Langkah 1: Peralatan

  1. Raspberry Pi - Saya menggunakan Raspberry Pi 2B yang saya gunakan, tetapi anda boleh mendapatkan Kit Permulaan Raspberry Pi 3 dengan harga sekitar CAD 100
  2. RGB LED Strip Light - Saya bermain dengan Minger LED Strip Light 32.8ft / 10M 600leds RGB SMD 5050. Ini dilengkapi dengan alat kawalan dan bekalan kuasa dengan harga kira-kira CAD 40
  3. Barrel Jack Connector - Saya membelinya dari kedai elektronik tempatan, seperti ini. Pastikan jika sesuai dengan bekalan kuasa anda
  4. Penyambung / Kawat Jumper - Saya mempunyai beberapa kabel penyambung Perempuan ke Lelaki dan beberapa wayar penyambung 22 Gauge Solid yang terletak di sekitar
  5. Breadboard Solderless Prototype PCB Board - sesuatu seperti ini
  6. Perintang 3 x 10kΩ
  7. 3 x N-channel MOSFET untuk mengawal LED - Saya membeli beberapa IRL3303 dari kedai elektronik tempatan saya. Penting bahawa voltan ambang pintu adalah maksimum. 3.3V sehingga dapat didorong oleh pin RPi; biasanya dilambangkan dengan 'L' (Logic-Level) dalam nama.

Langkah 2: Menyiapkan Raspberry Pi

Sistem operasi

Saya biasanya menggunakan binaan Raspbian terkini. Muat turun gambar dan tuliskan ke Kad SD. Sekiranya anda menggunakan komputer Windows, anda boleh menggunakan Win32 Disk Imager untuk menulis gambar ke Kad SD.

Node.js

Pasang versi terbaru Node.js. Pada masa penulisan saya menggunakan 8.9.1

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

sudo apt-get pasang nodejs

Pasang Git

sudo apt-get install git

Langkah 3: Pi-blaster

Pi-blaster
Pi-blaster

pi-blaster membolehkan PWM pada pin GPIO yang anda minta dari Raspberry Pi. Teknik yang digunakan sangat efisien: tidak menggunakan CPU dan memberikan denyutan yang sangat stabil.

Modulasi Lebar Nadi ini membolehkan Raspberry Pi mengawal seberapa terang setiap saluran Merah, Hijau dan Biru untuk jalur LED.

Pertama, klon repositori

cd / pilih /

sudo git clone https://github.com/sarfata/pi-blaster.git sudo chown -R pi: pi pi-blaster

Kemudian, bina dan pasang

cd / opt / pi-blaster./autogen.sh &&./configure && make && sudo buat pemasangan

Akhirnya, konfigurasikan pin mana yang ingin anda gunakan

Di bawah akaun root, atau menggunakan sudo, buat dan edit fail

/ etc / default / pi-blaster

Tambahkan baris berikut

DAEMON_OPTS = - gpio 23, 24, 25

Pin gpio ini perlu sepadan dengan pin yang anda sambungkan ke jalur LED anda.

CATATAN: Terdapat perbezaan antara GPIO dan nombor pin. Contoh ini menggunakan perkara berikut

LED - Biru, GPIO-23, Pin - 16

LED - Merah, GPIO-24, Pin - 18 LED - Hijau, GPIO-25, Pin - 22

Tweak tambahan

Mulakan pi-blaster

sudo service pi-blaster bermula

Mulakan semula pi-blaster

perkhidmatan sudo restart pi-blaster

Hentikan pi-blaster

perkhidmatan sudo pi-blaster stop

Mulakan pi-blaster secara automatik pada waktu boot

sudo systemctl mengaktifkan pi-blaster

Amaran dan peringatan lain

Pin yang digunakan oleh pi-blaster akan dikonfigurasi sebagai output. Jangan pasang sesuatu pada input atau anda mungkin menghancurkannya! Daemon ini menggunakan penjana PWM perkakasan dari raspberry pi untuk mendapatkan masa yang tepat. Ini mungkin mengganggu output kad suara anda.

Langkah 4: Menetapkan Contoh Kod

Klon kod contoh

1. Sediakan folder asas untuk dipasang

cd / pilih

sudo mkdir com.jonhaydock sudo chown pi: pi com.jonhaydockcd com.jonhaydock

2. Klon repositori git contoh

git klon

atau

git klon [email protected]: haydockjp / color-pi.git

3. Pasang tanggungan

cd warna-pi

pasang npm

Ini mungkin mengambil masa 2-3 minit

4. Projek ini perlu berkomunikasi melalui HTTPS dan WSS. Pada masa ini cylon-api-socketio tidak menyokong sambungan SSL. Terdapat permintaan tarik terbuka untuk menambahkan sokongan ini, tetapi sehingga digabungkan, ada fail tambalan di repositori ini. Jalankan arahan berikut selepas pemasangan npm

git checkout node_modules / cylon-api-socketio / lib / api.js

Langkah 5: Buat Sijil SSL yang Ditandatangani Sendiri

1. Buat fail kunci peribadi

cd /opt/com.jonhaydock/colour-pi/certs

openssl genrsa -out color-pi-key.pem 2048

2. Buat CSR (Permintaan Penandatanganan Sijil)

openssl req -new -key color-pi-key.pem -out color-pi-csr.pem

Pada ketika ini anda akan diminta untuk mendapatkan beberapa maklumat untuk permintaan sijil. Oleh kerana ini adalah sijil yang ditandatangani sendiri, terserah kepada anda seberapa tepat anda mengisi butirannya. Inilah contohnya

Nama Negara (kod 2 huruf) [AU]: CA

Nama Negeri atau Wilayah (nama penuh) [Beberapa-Negeri]: Nama Lokasi British Columbia (contohnya, bandar) : Nama Organisasi Vancouver (contohnya, syarikat) [Internet Widgits Pty Ltd]: Nama Unit Organisasi Warna Pi (contoh, bahagian) : Nama Biasa (mis. Server FQDN atau nama ANDA) : color-pi Alamat E-mel : [email protected]

Kata laluan cabaran :

Nama syarikat pilihan :

Dalam contoh ini, tekan kembali untuk mengosongkan kata laluan cabaran

3. Hasilkan perakuan

openssl x509 -req -days 1095 -in color-pi-csr.pem -signkey color-pi-key.pem -out color-pi-cert.pem

4. Untuk keselamatan tambahan kami juga akan membuat fail Diffie Hellman Parameters

openssl dhparam -out dh_2048.pem 2048

Ini boleh mengambil masa 15-20 minit

Langkah 6: Pendawaian Litar

Pendawaian Litar
Pendawaian Litar
Pendawaian Litar
Pendawaian Litar
Pendawaian Litar
Pendawaian Litar
Pendawaian Litar
Pendawaian Litar

Menghidupkan jalur LED

Jalur LED dikuasakan oleh 12 volt. Raspberry Pi hanya mampu mengeluarkan 3.3v atau 5v dan tidak mampu mengeluarkan di mana sahaja berdekatan dengan amp yang diperlukan untuk menggerakkan begitu banyak LED.

Penting untuk tidak menyambungkan bekalan kuasa 12 volt ke Raspberry Pi. Transistor M-NF saluran N digunakan untuk memisahkan 3.3v pada pin RPi dan 12v dari bekalan kuasa LED.

MOSFET mempunyai tiga pin Gate, Drain dan Source. Sekiranya anda tidak pasti tentang google mana lembaran data transistor yang anda gunakan, mis. IRL3303

Kami akan menghubungkan Pin Raspberry ke Gerbang, wayar LED ke Saliran dan landasan bersama ke Sumber. Apabila Pin naik tinggi, voltan antara Saliran dan Sumber akan mengaktifkan Pintu dan akan menghubungkan pintu ke Sumber.

Kami juga akan meletakkan Resistor 10kΩ di seberang Gerbang dan Sumber, sehingga ketika kita pin RPi tinggi, kita dapat melindungi pin dengan mengurangi arus yang melaluinya.

Lakukan langkah seterusnya dengan risiko anda sendiri. Saya tidak bertanggungjawab untuk apa-apa yang mungkin salah

Terdapat gambar fritzing dan foto litar sebenar di atas.

Saya akan mengesyorkan melakukan ini semasa kuasa mati untuk RPi dan jalur LED

Sediakan litar transistor, satu per saluran warna

  1. Masukkan salah satu transistor ke papan roti seperti yang ditunjukkan dalam rajah
  2. Masukkan salah satu Perintang 10kΩ melintasi longkang dan pin Sumber transistor. Ini adalah pin pertama dan terakhir
  3. Gunakan beberapa wayar untuk menyambungkan pin Sumber (pin terakhir) ke tanah di papan roti
  4. Ulangi langkah 1 - 3 dua kali lagi, sehingga anda mempunyai tiga set - satu per warna (Merah, Hijau dan Biru)

Sambungkan pin RPi ke papan

  1. Sambungkan Pin 16 ke Pin Pintu (pin pertama) transistor pertama - Ini akan menjadi saluran LED Biru
  2. Sambungkan Pin 18 ke Pin Pintu (pin pertama) transistor pertama - Ini akan menjadi saluran LED Merah
  3. Sambungkan Pin 20 ke salah satu garisan Ground di sisi papan roti
  4. Sambungkan Pin 22 ke Pin Pintu (pin pertama) transistor pertama - Ini akan menjadi saluran LED Hijau

Saya telah menggunakan warna wayar yang sepadan dengan LED: Biru, Merah dan Hijau. Saya telah menggunakan warna hitam untuk tanah

Sambungkan Barrel Jack

  1. Sambungkan wayar putih ke hujung + soket tong
  2. Sambungkan wayar hitam ke hujung bicu tong
  3. Sambungkan wayar hitam ke garis tanah yang sama di papan roti seperti yang disambungkan oleh RPi Pin 20
  4. Sambungkan wayar putih ke garisan + di papan roti

Menyambungkan jalur LED

Jalur LED saya dilengkapi dengan penyambung dengan ukuran yang cukup baik sehingga boleh dipasang sementara ke papan roti. Saya menolak penyambung di papan roti dan menyambungkannya ke ujian litar.

  1. Transistor pertama disambungkan ke Pin 16. Saya memasang wayar biru dari pin Drain (pin tengah) ke wayar biru pada penyambung jalur LED
  2. Transistor kedua disambungkan ke Pin 18. Saya memasang wayar merah dari

    Longkang

    pin (pin tengah) ke wayar merah pada penyambung jalur LED

  3. Transistor ketiga disambungkan ke Pin 22. Saya menjalankan wayar hijau dari

    Longkang

    pin (pin tengah) ke wayar hijau pada penyambung jalur LED

  4. Akhirnya, saya memasang wayar putih dari garisan + di papan roti yang disambungkan ke soket tong, ke wayar putih pada penyambung jalur LED.

Kuasa

Setelah memeriksa litar, anda seharusnya menghidupkan Raspberry Pi dan memasang bekalan 12v ke soket tong.

Langkah 7: Kod Sampingan Pelayan

Kod Sampingan Pelayan
Kod Sampingan Pelayan

Menjalankan kod sisi pelayan

cd /opt/com.jonhaydock/colour-pi

sudo npm bermula

Ini akan memulakan pelayan web dan mula mendengar permintaan HTTPS dan WSS.

CATATAN: Ingatlah untuk menjalankan pi-blaster terlebih dahulu

Pemboleh ubah Persekitaran

Port laman web lalai adalah 443, tetapi anda boleh mengatasinya dengan menetapkan pemboleh ubah persekitaran sebelum memulakan kod. Sebagai contoh

eksport COLOUR_PI_PORT = 2443

Port soket web lalai adalah 1443, tetapi anda boleh mengatasinya dengan menetapkan pemboleh ubah persekitaran sebelum memulakan kod. Sebagai contoh

eksport COLOUR_PI_WSS_PORT = 3443

Catatan: Oleh kerana soket web dikendalikan oleh cylon.js dan bukan laman web utama, ini mesti berada di port yang berbeza

Pin yang digunakan untuk Biru (pin 16), Hijau (pin 18) dan Merah (pin 22) juga boleh diganti. Sebagai contoh

eksport COLOUR_PI_PIN_BLUE = 36

eksport COLOUR_PI_PIN_RED = 38 eksport COLOUR_PI_PIN_GREEN = 40

Catatan: Ini mesti sepadan dengan pin fizikal yang anda gunakan. Sekiranya anda mengubahnya, anda juga perlu mengemas kini GPIO yang ditentukan dalam fail / etc / default / pi-blaster. Sebagai contoh

DAEMON_OPTS = - gpio 16, 20, 21

Kod pelayan utama boleh didapati di fail app.js. Fail ini memulakan pelayan web HTTPS dan juga, melalui kerangka kerja Cylon.js, menggunakan socket.io untuk mendengar permintaan soket web pada port yang terpisah.

Untuk mengakses laman web, anda harus membuka penyemak imbas web di komputer utama anda (saya hanya mengujinya di Chrome) dan menggunakan alamat IP Raspberry Pi, mis.

10.0.1.2/

Anda boleh mengetahui alamat IP anda dari baris arahan Raspberry Pi.

ifconfig

Pelayan web akan menyajikan kandungan apa pun di bawah folder awam. Secara lalai untuk memaparkan halaman index.html.

Cylon.js mencipta titik akhir yang anda boleh sambungkan Socket.io.

10.0.1.291443/api/robots/colour-pi

Anda boleh menghantar mesej set_colour melalui soket untuk menetapkan nilai Merah, Hijau dan Biru

device.emit ('set_colour', r, g, b)

Yang memanggil perintah set_colour, yang memanggil fungsi setColour di app.js. Fungsi ini menetapkan tahap kecerahan, untuk setiap nilai R, G dan B, antara 0 dan 255. Di mana 0 mati dan 255 dihidupkan sepenuhnya.

cth.

Merah r = 255, g = 0, b = 0

Hijau r = 0, g = 255, b = 0 Biru r = 0, g = 0, b = 255 Putih r = 255, g = 255, b = 255 Hitam / Mati r = 0, g = 0, b = 0

Langkah 8: Kod Laman Web

Kod Laman Web
Kod Laman Web

Am

Laman web menggunakan pengecaman suara untuk memilih warna dari senarai yang telah ditentukan. Untuk menambahkan warna ke dalam senarai, edit fail di pelayan: public / data / colours.json

cth.

"merah": "# FF0000", Apabila warna dijumpai, atau dipilih dari drop-down, kotak Output akan ditetapkan ke warna itu dan satu pesan akan dikirim melalui socket.io ke Raspnerry Pi, yang akan mengatur LED ke warna yang sama.

CATATAN: bergantung pada seberapa baik LED anda, anda mungkin atau mungkin tidak melihat warna yang serupa. Sebilangannya lebih senang digandakan daripada yang lain

Semasa memuatkan laman web pertama kali, kerana anda menggunakan sijil SSL yang ditandatangani sendiri, anda perlu mengakuinya dalam penyemak imbas. Anda harus melihat amaran keselamatan mengenai sijil.

Pengecaman Suara

Kotak ini mempunyai ikon mikrofon. Sekiranya anda mengklik ikon ketika berwarna hijau, ikon akan mula mendengar warna. Semasa mendengar, ia akan menjadi merah. Ia akan mendengar sebentar dan kemudian berhenti. Mengklik ikon mikrofon apabila berwarna merah juga akan menghentikannya daripada mendengar.

Oleh kerana laman web ini perlu mengakses mikrofon anda, anda perlu memberikan izin apabila diminta

CATATAN: Anda memerlukan mikrofon untuk bahagian ini. Saya menggunakan yang ada di kamera web saya.

Transkrip Interim

Kotak ini mengesan tekaan perkataan yang anda katakan, seperti yang anda katakan.

Transkrip Akhir

Kotak ini mengesan tekaan terakhir adalah apa yang anda katakan.

Warna yang Dikenali

Ini adalah senarai semua warna yang diketahui oleh halaman. Ia dibuat dari fail colours.json. Sekiranya anda memilih salah satu warna ini, halaman akan menyebutkan warna dan menetapkan warna output.

CATATAN: Anda memerlukan pembesar suara atau fon kepala untuk mendengar ucapannya

Warna yang dijumpai

Laman web ini pada masa ini hanya menyokong pencocokan warna. Sekiranya perkataan atau kata-kata yang anda ucapkan ke mikrofon sesuai dengan nama warna yang dikenali, atau anda memilih warna dari senarai Warna yang Diketahui, ia akan ditambahkan di sini sebagai log.

Pengeluaran

Warna yang dijumpai terakhir akan dipaparkan di sini. Nilai Warna Heks (mis. # 7cb9e8) dan nilai RGB (mis. 124, 185, 232) akan dipaparkan sebagai teks dan latar belakang kotak di tengah akan ditetapkan ke warna sebenarnya.

Warna ini juga dihantar ke Raspberry Pi dan anda akan melihat warna jalur LED berubah.

CATATAN: jika anda tidak melihat perubahan warna LED, cuba mulakan semula pi-blaster dan / atau aplikasi node.js

perkhidmatan sudo restart pi-blaster

sudo npm bermula

Suara yang Dikenali

Kotak ini memaparkan senarai "Suara yang Dikenal" dari speechSynthesis yang disokong. Memilih salah satu suara ini akan mengubah suara dan bahasa yang akan anda dengar, dan ia akan menyebut nama suara itu.

Ia juga akan mengubah bahasa SpeechRecognition menjadi sama dengan yang dipilih dalam senarai.

Langkah 9: Akhirnya

Image
Image

Berikut adalah contoh perkara yang mesti anda lihat.

Beritahu saya jika anda mempunyai masalah dan saya boleh mengemas kini mengikut keperluan.

Disyorkan: