Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Komponen dan Perlengkapan

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
Arduino Yun
×1
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
ControlEverything.com 4-CHANNEL RELAY CONTROLLER FOR I2C
×1
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
Sensor Suhu & Kelembaban DHT11 (4 pin)
×1
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
Resistor 10k ohm
×2
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
SparkFun RedBot Buzzer
×1
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
Transistor NPN Tujuan Umum
×1
LM2596 DC to DC Buck Converter
×1
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
Amazon Alexa Echo Dot
×1
Arduino Proto Shield
×1
Usb WebCam
×1
Kotak Perpindahan Putih 200mmx155mmx80mm
×1

Alat dan Mesin yang Diperlukan

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
Paiol solder (umum)

Aplikasi dan Layanan Online

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
Arduino IDE
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
Amazon Alexa Alexa Skills Kit
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
Amazon Web Services AWS Lambda
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
PubNub Publish/Subscribe API

Tentang Proyek Ini

Ringkasan

Saat Amazon meluncur ke pasar Alexa dan perangkat seperti Amazon Echo Dot membuka sejumlah opsi tak terbatas untuk membuat Rumah Pintar yang hebat yang dikontrol oleh perintah suara menggunakan bahasa alami.

Proyek ini membuat Pengontrol Rumah Arduino yang dapat menghubungkan banyak sensor dan perangkat ke internet dan Anda dapat mengontrolnya menggunakan keterampilan Amazon Alexa.

Anda dapat menginstal dan mengaktifkan keterampilan saya "Arduino Home Controller" dengan langkah mudah, atau Anda dapat membuat keterampilan Anda sendiri dibimbing oleh tutorial ini.

Untuk saat ini kita akan mengontrol:

Anda dapat melihat Arduino Home Controller dalam aksi dalam video demo singkat ini. Untuk tujuan demo dan video saya menggunakan empat LED di prothoboard yang mensimulasikan lampu lampu di setiap kamar rumah.

Jika Anda ingin menggunakan modul jarak jauh untuk mengaktifkan lampu Anda, Anda dapat melihat proyek "Arduino Home Controller Remote Modules" saya di URL ini.

Diagram Blok

Dalam gambar diagram blok kita dapat melihat empat komponen utama proyek ini:

1.- Amazon Echo Dot untuk menerima perintah suara dan mengirimkannya ke AWS (Amazon Web Service).

2.- AWS dengan Amazon Skill dan Lambda Function untuk menafsirkan semua perintah.

Nama keterampilan adalah "Arduino Home Controller" yang dapat Anda aktifkan nanti.

3.- Sebuah MQTT Broker menggunakan cloud PubNub(c).

Broker ini akan menerima pesan kontrol di dua saluran, satu untuk menetapkan nilai dan yang lain untuk membaca nilai dari sensor.

Anda tidak perlu membuat akun di PubNub Anda dapat menggunakan akun saya untuk tujuan demo.

4.- Home Controller menggunakan Arduino Yun.

Kami akan menggunakan Arduino Yun karena memiliki ethernet shield di dalam dan memiliki mesin linux kecil tempat kami akan menjalankan python untuk menangani beberapa tindakan.

Ini mengontrol relay untuk lampu, membaca sensor suhu dan kelembaban, menyalakan buzzer untuk alarm dan memanipulasi webcam untuk mengambil foto keamanan.

Untuk modul jarak jauh, lihat proyek komplementer saya, "Arduino Home Controller Remote Modules" di URL ini.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Instal semua perangkat lunak yang diperlukan

Titik ini Anda dapat mengambil dua opsi satu untuk tujuan demo, gunakan keterampilan Alexa saya instal dan gunakan atau opsi dua Anda dapat membuat keterampilan pribadi Anda.

Jelajahi aplikasi Alexa dengan url ini, di sana pilih bagian Skills di menu, Cari Arduino dan dalam daftar Anda melihat keterampilan dengan nama "Arduino Home Controller", klik kartu keterampilan dan klik tombol "Enable" untuk menginstal.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Atau Anda perlu pergi ke Amazon Skill Store menggunakan link ini dan tekan tombol "Enable"

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Anda perlu menautkan akun Amazon Anda karena kami akan menggunakan alamat email Anda sebagai ID untuk semua perintah yang dikirim ke Arduino. Perhatikan kami tidak akan menggunakan alamat ini untuk mengirim email, hanya akan digunakan sebagai ID.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Keterampelan terinstal dan terhubung ke akun Amazon dan terhubung ke fungsi lambda saya di cloud AWS.

1.- Buat sebuah keterampilan

Anda perlu mendaftar dan membuat akun pengembang gratis di situs https://developer.amazon.com/home.html

1.1.- Setelah Login pergi ke opsi menu Alexa dan pilih di Alexa Skills Kit tombol "Get Started"

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

1.2.- Selanjutnya klik tombol "Add a New Skill" untuk membuat keterampilan baru.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

1.3.- Di bagian Create a New Alexa Skill Anda harus:

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Keterampilan baru telah dibuat dan Anda melihat bidang baru Application Id

amzn1.ask.skill.6e22e052-c32f-433c-8d39-dc94a77a4adb 

Ini digunakan untuk tautan antara keterampilan dan fungsi lambda, kami menggunakannya nanti di bagian tutorial 2.5.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

1.4.- Interaction Model di sini menentukan cara Anda berinteraksi dengan keterampilan berdasarkan definisi intents, slots, dan utterances.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Di opsi menu Interaction Model salin dan tempel skema Json ini di Intent Schema.

{ "intents": [ { "slots": [ { "name": "light", "type": "States" }, { "name": "which", "type": "HabRooms" } ], "intent": "LightIntent" }, { "slots": [ { "name": "alarm", "type": "States" } ], "intent": "AlarmIntent" }, { "intent": "TakePhotoIntent" }, { "intent": "GetTemperatureIntent" }, { "intent": "GetHumidityIntent" }, { "intent": "AboutIntent" }, { "intent": "AMAZON.HelpIntent" }, { "intent": "AMAZON.CancelIntent" }, { "intent": "AMAZON.StopIntent" } ] } 

Definisikan beberapa slot yang diperlukan seperti States dan HabRooms di Custom Slot Types.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Definisikan semua utterances seperti model percakapan di Sample Utterances, salin dan tempel daftar ini.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
LightIntent Turn {which} light {light} LightIntent Set {which} light {light} AlarmIntent Turn alarm {alarm} TakePhotoIntent Take a Photo TakePhotoIntent Take Security Photo GetTemperatureIntent Read Temperature GetHumidityIntent Read Humidity AboutIntent Tell me about AboutIntent About 

Sebelum melanjutkan ke bagian berikutnya, Configuration, kita perlu telah membuat Fungsi Lambda kami karena kita perlu menautkan baik keterampilan maupun fungsi lambda.

2.- Buat Fungsi Lambda

Anda perlu mendaftar dan membuat akun di AWS Console menggunakan url https://aws.amazon.com/console/

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

2.1.- Pilih Services in top menu dan Lambda di bilah kiri.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

2.2.- Pilih di bilah kiri Function dan klik tombol "Create function".

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

2.3.- Setel data ini:

Ini akan membuka jendela baru tempat Anda harus memilih nilai berikut:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "iot:UpdateThingShadow" ], "Resource": "*" } ] } 
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Untuk menyimpan tekan tombol "Add" dan kembali ke halaman Create Function dan pilih lambda_basic_execution di bidang Existing role.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

2.4.- Fungsi TestSkillLambda telah dibuat dan Anda melihat halaman desainnya.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

2.5.- Pilih dari bilah kiri Alexa Skills Kit dan tambahkan ke area add triggers.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Klik pada kotak Alexa Skills Kit dan gulir ke bawah ke opsi Configure triggers, pilih Enable dan di bidang Skill ID salin dan tempel nilai Application ID simpan nanti, lihat bagian tutorial nomor 1.3.

Pada saat ini kita menghubungkan fungsi lambda dengan keterampilan menggunakan Application ID atau Skill ID.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Tekan tombol "Save" dan Alexa Skills Kit disimpan dan fungsi lambda mengetahui keterampilan dan terhubung.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

2.6.- Gulir ke bawah ke bagian Function code dan atur bidang:

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Editor kode akan terbuka dan Anda akan melihat folder dan file yang diunggah.

Pilih file index.js yang berisi semua implementasi fungsi lambda.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Anda harus mengubah baris 23, salin dan tempel Application ID yang sama yang digunakan nanti di bagian tutorial nomor 1.3.

Tekan tombol "Save" dan fungsi lambda diaktifkan untuk menerima perintah keterampilan.

var APP_ID = amzn1.ask.skill.6e22e052-c32f-433c-8d39-dc94a77a4adb 

Di bagian atas halaman di atas tombol "Save" Anda akan melihat ARN (Amazon Resource Name) yang merupakan ID fungsi lambda yang akan Anda gunakan di bagian Configuration di halaman Keterampilan.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

3.- Kembali ke definisi Keterampilan

3.1.- Pilih bagian Configuration, di EndPoint pilih AWS Lambda ARN, salin dan tempel string ARN di atas di bidang Default. Ini adalah tindakan terakhir untuk menautkan keterampilan dan fungsi lambda, keterampilan mengetahui fungsi lambda dan terhubung.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

3.2.- Gulir ke bawah ke bagian Account Linking dan salin dua Redirect URLs pertama, Anda memerlukannya untuk mengonfigurasi profil keamanan.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Sebelum melanjutkan konfigurasi Keterampilan, kita perlu mendefinisikan profil keamanan yang digunakan untuk menautkan keterampilan dan akun Amazon di aplikasi Alexa.

4.- Buat Profil Keamanan

Di konsol pengembang yang sama yang digunakan untuk membuat keterampilan, pilih Apps & Services dan Login with Amazon dan tekan tombol "Create a New Security Profile"

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

4.1.- Halaman Security Profile Management memungkinkan Anda membuat profil dengan semua keamanan OAuth 2.0 untuk menautkan keterampilan dengan akun Amazon Anda.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

4.2.- Isi semua bidang dengan data ini:

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

4.3.- Setelah menyimpan semua data atau mengedit profil keamanan dua bidang baru muncul yang menunjukkan data penting, Client ID dan Client Secret. Anda memerlukannya untuk konfigurasi keterampilan akhir.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

4.4.- Definisikan whitelist urls, pilih tab Web Settings.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

5.- Selesaikan pembuatan keterampilan

5.1.- Kembali ke definisi keterampilan, pilih bagian Configuration dan gulir ke bawah ke Account Linking.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

5.2.- Lanjutkan dengan Account linking:

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

5.3.- Global Fields adalah bagian yang digunakan untuk mendokumentasikan keterampilan.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

5.4.- Bagian terakhir Privacy & Compliance

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

6.- Instal TestSkill di aplikasi Alexa

6.1- Setelah Anda menyimpan keterampilan Anda dapat pergi ke aplikasi Alexa di https://alexa.amazon.com/ pilih di bilah kiri menu opsi Skills, klik tombol di kanan atas "Your skills" dan filter Dev Skills Anda dapat melihat kartu TestSkill. Perhatikan pesan yang diperlukan untuk penautan akun.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

6.2.- Jika Anda mengklik kartu halaman deskripsi TestSkill menampilkan semua informasi tentang keterampilan, klik tombol "Enable".

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

6.3.- Karena definisi penautan akun yang diperlukan Anda akan diarahkan ke halaman kredensial login Amazon untuk menautkan keterampilan dengan akun Amazon Anda.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Jika informasi login divalidasi Anda melihat halaman ini yang menunjukkan bahwa keterampilan terhubung dengan akun Amazon Anda.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

6.4.- Keterampilan selesai, terinstal dan terhubung ke akun Amazon Anda dan terhubung ke fungsi Lambda.

Anda dapat mencoba dengan mengatakan "Alexa, ask Test Skill" dan Anda melihat selamat datang di Arduino Home Controller karena semua dialog sama.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Konfigurasikan Arduino Yun

Jika ini pertama kali Anda menggunakan Arduino Yun Anda perlu menyiapkannya sebelum mengunggah sketsa.

Saya sarankan melihat panduan Greg Baugues atau tutorial Getting started with the Arduino Yun – the Arduino with WiFi. Terima kasih kepada pengguna Hackster @BenEagen untuk menemukan panduan ini.

Untuk mengambil foto dan mengirim email dengannya kita perlu menginstal perangkat lunak tambahan. Kami juga akan menguji kamera USB untuk melihat apakah driver berfungsi dengan benar. Silakan hubungkan kamera web USB ke port USB Arduino Yun.

Untuk melakukannya hubungkan ke Arduino Yun dengan terminal:

ssh root@yourYunName.local 

Kata sandi default adalah arduino.

Jika koneksi baik Anda akan melihat prompt OpenWRT Linux:

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Instal perangkat lunak pembuatan gambar

Mulai dengan pembaruan manajer paket:

opkg update 

Instal driver UVC:

opkg install kmod-video-uvc 

Instal paket python-openssl:

opkg install python-openssl 

Kami juga memerlukan utilitas fswebcam yang akan kami gunakan untuk mengambil gambar dari terminal:

opkg install fswebcam 

Pastikan kartu SD terpasang di Arduino Yun, Anda dapat mengujinya dengan menjalankan perintah ini:

mount 
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Jika Anda melihat dalam daftar perangkat yang seperti /dev/sda1 on /mnt/sda1 type vfat kartu SD baik.

Untuk menguji kamera dan mengambil gambar, itu sangat mudah. Cukup ketik:

cd /mnt/sda1 fswebcam test.png 

Anda akan melihat beberapa informasi ditampilkan, bersama dengan beberapa kesalahan, tetapi jangan khawatir tentang itu. Hal penting adalah melihat baris-baris ini:

--- Opening /dev/video0... Trying source module v4l2... /dev/video0 opened. 

Untuk memeriksa apakah gambar berhasil diambil, keluarkan kartu SD dari Arduino Yun dan baca menggunakan komputer Anda. Anda akan melihat gambar muncul di root kartu SD "test.png".

Cukup buka untuk memastikan itu berhasil diambil dan tidak rusak.

Instal perangkat lunak pengiriman email

Dengan SD di komputer Anda salin file python AHC_SendEmail.py dan ubah email dan kata sandi Anda dari akun gmail pada baris 11, 12 dan 13, jika Anda memiliki penyedia email lain ubah informasi server pada baris 36.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Keluarkan SD dari komputer dan masukkan ke slot SD di Arduino Yun. Di terminal yang terhubung ke Arduino Yun, jalankan perintah:

cd /mnt/sda1 python /mnt/sda1/AHC_SendEmail.py /mnt/sda1/ test.png 

Jika semuanya baik Anda harus menerima email dengan foto Anda.

Hubungkan semua perangkat ke Arduino Yun

Berdasarkan skema elektronik hubungkan semua perangkat khususnya sensor DHT11 karena kita memerlukannya untuk membaca suhu dan kelembaban dan buzzer untuk menguji suara alarm.

Instal file sketsa ArduinoHomeMQTT.ino

Saya membuat file libraries.zip dengan semua perpustakaan yang diperlukan oleh file ini, Anda dapat mengunduhnya dari situs GitHub saya dan membuka arsipnya di direktori perpustakaan Arduino IDE.

Perpustakaan yang termasuk di dalam libraries.zip di dalam folder ArduinoHomeMQTT.

ArduinoJson --> used to manipulate Json content DHT_sensor_library --> used to handle DHT sensor pubsubclient-master --> used to connect, publish and subscribe to PubNub(c) 

Buka Arduino IDE 1.6.x, di tools pilih "Board: Arduino Yun".

Muat file ArduinoHomeMQTT.ino dan di IDE ubah baris 16 dengan email Amazon Anda yang digunakan saat menautkan akun di aplikasi keterampilan Amazon yang diaktifkan.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Opsi ini mengidentifikasi pengontrol Anda ketika AWS mengirim pesan MQTT ke broker.

Ubah baris 50 dengan uuid Anda untuk mengidentifikasi pengontrol Anda di PubNub(c), Anda dapat pergi ke situs ini dan salin dan tempel uuid yang dihasilkan online.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Sekarang simpan dan unggah sketsa dan saat Anda membuka jendela monitor Arduino IDE Anda dapat melihat Arduino Yun terhubung ke broker PubNub(c) dan sensor diinisialisasi.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Uji semua utterances dari Alexa Echo Dot

Keterampilan Alexa "Arduino Home Controller" menangani daftar utterances ini, Anda dapat melihatnya di bagian deskripsi keterampilan Alexa App. Anda dapat menguji semuanya dan melihat di serial monitor Arduino semua pesan yang diterima dan dikirim ke broker PubNub(c).

Kontrol lampu:

==> "Alexa, ask arduino home to turn room light on" ==> "Alexa, ask arduino home to turn room light off" ==> "Alexa, ask arduino home to turn kitchen light on" ==> "Alexa, ask arduino home to turn kitchen light off" ==> "Alexa, ask arduino home to turn garage light on" ==> "Alexa, ask arduino home to turn garage light off" ==> "Alexa, ask arduino home to turn living room light on" ==> "Alexa, ask arduino home to turn living room light off" 

Kontrol alarm:

==> "Alexa, ask arduino home to turn alarm on" ==> "Alexa, ask arduino home to turn alarm off" 

Pindai Suhu dan Kelembaban:

==> "Alexa, ask arduino home to read temperature" ==> "Alexa, ask arduino home to read humidity" 

Ambil foto keamanan:

==> "Alexa, ask arduino home to take a photo" 

Tentang dan Bantuan

==> "Alexa, ask arduino home about"==> "Alexa, ask arduino home help" 
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Detail perangkat lunak

Anda dapat mengunduh semua file untuk proyek ini dari situs Github saya.

Folder berisi penjelasan

ArduinoHomeMQTT --> file ino dan perpustakaan untuk Pengontrol Rumah Arduino Yun

lambda --> Fungsi Lambda di Node.js untuk diimplementasikan di AWS Lambda, termasuk semua node_modules yang diperlukan, lihat opsi 2 di bagian instal semua perangkat lunak.

python --> file python untuk mengirim email dengan lampiran foto.

schematic --> file skema elektronik Fritzing(c).

Arduino Home Controller Workflow menunjukkan Anda bagaimana file saling berinteraksi.

( 1 ) Amazon Echo Dot mengirim perintah suara dan diterima oleh keterampilan Arduino Home Controller.

( 2 ) Keterampilan memanggil file fungsi Lambda index.js.

( 3 ) File fungsi Lambda dikembangkan di Node.Js, menggunakan beberapa node modules dan dihosting di Amazon Web Service (AWS).

( 4 ) Fungsi lambda menafsirkan semua intents dan mengonversinya ke pesan Json MQTT dan mengirimnya ke broker PubNub(c). Pesan ini memiliki format:

{ "topic" : Topic_xxxx, "command" : on atau off, "id" : alamat email } 

Topik Topic_xxxx dapat menjadi:

Topic_room --> nyalakan/matikan lampu ruangan Topic_livingroom --> nyalakan/matikan lampu ruang tamu Topic_kitchen --> nyalakan/matikan lampu dapur Topic_garage --> nyalakan/matikan lampu garasi Topic_alarm --> nyalakan/matikan alarm Topic_temperature --> baca suhu Topic_humidity --> baca kelembaban Topic_photo --> ambil dan kirim foto melalui email 

Perintah dapat menjadi on atau off.

( 5 ) Pesan dikirim menggunakan saluran AHC_IOC_01. Saluran AHC_IOC_02 digunakan untuk menerima nilai suhu atau kelembaban.

( 6 ) Sketsa Arduino Yun ArduinoHomeMQTT.ino terhubung ke broker dan berlangganan atau menerbitkan ke saluran dan menerima atau mengirim pesan.

( 7 ) Menggunakan bridge sketsa arduino berkomunikasi dengan linux OpenWRT untuk koneksi wan atau lan dan untuk menjalankan beberapa perintah.

( 8 ) Jika arduino perlu mengirim email menggunakan file python AHC_SendEmail.py, jika perlu mengambil foto panggil program fswebcam yang terletak di dalam linux OpenWRT.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Detail hardware

Jantung hardware adalah Arduino Yun.

Ini menggunakan beberapa pin digital untuk mengontrol setiap perangkat:

Pin 2 : terhubung ke sensor DHT11 Pin 8 : mengaktifkan alarm buzzer dengan bantuan transistor NPN Pin 9 : mengontrol lampu ruangan Pin 10: mengontrol lampu dapur Pin 11: mengontrol lampu garasi Pin 12: mengontrol lampu ruang tamu 

Webcam terhubung ke port usb.

Untuk menyediakan daya ke semua perangkat pengontrol menggunakan daya Dc 12 volt dan mengonversi ke 5 volt menggunakan konverter daya Dc to Dc.

Saya membuat shield arduino menggunakan Arduino Proto Shield dengan semua konektor dan antarmuka elektronik ke sensor, alarm buzzer dan sumber daya. Ini memiliki ruang untuk sensor baru untuk memperluas pengontrol.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Letakkan Arduino Yun, Proto shield, Relays dan regulator daya di dalam kotak plastik dengan alarm, webcam dan sensor di luar, dan buat semua koneksi seperti yang disebutkan dalam skema elektronik.

Untuk tujuan demo dan video saya menggunakan empat LED di prothoboard yang mensimulasikan lampu lampu di setiap kamar rumah.

Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana
Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Terima kasih telah membaca panduan ini, saya menghargai waktu Anda, jika Anda memiliki saran silakan hubungi saya.

Saya membuat proyek ini untuk ingat kepada Ayah saya, ia meninggal tahun lalu, R.I.P Ayah.

Kode

ArduinoHomeMQTT.inoArduino
Perangkat lunak Arduino Yun untuk Home Controller
// // ArduinoHomeMQTT // v2.1 // // Copyright (C)2018 Jose Cruz. All right reserved // web: https://sites.google.com/view/raeiot/home // #include <YunClient.h> #include <PubSubClient.h> #include <ArduinoJson.h> #include <DHT.h> #include <Process.h> // Your Amazon email linked skill #define MyID "YOUR AMAZON EMAIL LINKED IN ALEXA APP" // DHT11 sensor data pin #define DHTPIN 2 // DHT 11 sensor type #define DHTTYPE DHT11 // Initialize DHT sensor DHT dht(DHTPIN, DHTTYPE); // Alarm control pin #define alarm 8 // Light control pins #define room_light 9 #define kitchen_light 10 #define garage_light 11 #define livingroom_light 12 // PubNub MQTT Server address and port int mqtt_server_port = 1883; const char* mqtt_server = "mqtt.pndsn.com"; // Suscribe topic const char* topic = "AHC_IOT_01"; // Publish topic const char* topic2 = "AHC_IOT_02"; // PubNub publisher ID // pub-c-e93def7f-95aa-475a-aa60-cc3cd32ee8a7/ // PubNub suscriber ID // sub-c-ec04dbbc-0893-11e8-8e75-cea83f8405bb/ // UUID generated onlyne https://www.uuidgenerator.net/ // // PubNub Client ID // clientId = pubID + subID + uuid; const char* clientId = "pub-c-e93def7f-95aa-475a-aa60-cc3cd32ee8a7/sub-c-ec04dbbc-0893-11e8-8e75-cea83f8405bb/YOUR UUID GENERATED"; // Define de Yun ethernet client YunClient ethClient; // Define PubNub pub and sub client PubSubClient client(ethClient); // Picture process Process picture; // Filename String filename; // Path for image file String path = "/mnt/sda1/"; // Create an image file and sent by email void TakePhoto() { // Generate filename with timestamp filename = ""; picture.runShellCommand("date +%s"); while (picture.running()); while (picture.available() > 0) { char c = picture.read(); filename += c; } filename.trim(); filename += ".jpg"; // Take picture picture.runShellCommand("/usr/bin/fswebcam -i 0 --jpeg 95 --no-banner --fps 1 -S 1 -r 352x288 --save " + path + filename); while (picture.running()); //Send it by email picture.runShellCommand("python /mnt/sda1/AHC_SendEmail.py " + path + " " + filename); while (picture.running()); } //*********************** // Send temperature //*********************** void SendTemperature() { char cstr[16]; // Read temperature as Celsius (the default) float t = dht.readTemperature(); // Serial.print("Temperature: "); // Serial.print(t); // Serial.println(" *C"); client.publish(topic2, itoa(t, cstr, 10)); //Serial.print("Temperature sent..."); //Serial.println(cstr); } //*********************** // Send humidity //*********************** void SendHumidity() { char cstr[16]; float h = dht.readHumidity(); //Serial.print("Humidity: "); //Serial.print((int)h); //Serial.print(" %\t"); client.publish(topic2, itoa(h, cstr, 10)); //Serial.print("Humidity sent..."); //Serial.println(cstr); } //Callback function for msg receive handle void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); StaticJsonBuffer<200> jsonBuffer; JsonObject& root = jsonBuffer.parseObject((char[])payload); String alexa_topic = root["topic"]; String alexa_command = root["command"]; String alexa_id = root["id"]; //Serial.println(alexa_topic); //Serial.println(alexa_command); if (alexa_id.equals(MyID)) { //Handle all received msgs topic from MQTT if (alexa_topic.endsWith("Topic_room")) { digitalWrite(room_light, (alexa_command.endsWith("on") ? LOW : HIGH)); } else if (alexa_topic.endsWith("Topic_kitchen")) { digitalWrite(kitchen_light, (alexa_command.endsWith("on") ? LOW : HIGH)); } else if (alexa_topic.endsWith("Topic_garage")) { digitalWrite(garage_light, (alexa_command.endsWith("on") ? LOW : HIGH )); } else if (alexa_topic.endsWith("Topic_living room")) { digitalWrite(livingroom_light, (alexa_command.endsWith("on") ? LOW : HIGH)); } else if (alexa_topic.endsWith("Topic_temperature")) { SendTemperature(); } else if (alexa_topic.endsWith("Topic_humidity")) { SendHumidity(); } else if (alexa_topic.endsWith("Topic_alarm")) { digitalWrite(alarm, (alexa_command.endsWith("on") ? HIGH : LOW)); } else if (alexa_topic.endsWith("Topic_photo")) { TakePhoto(); } } } //Reconnect to MQTT broker if lost connection void reconnect() { // Loop until we're reconnected while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Attempt to connect if (client.connect(clientId)) { Serial.println("MQTT broker connected"); client.subscribe(topic); } else { Serial.print("Failed, rc = "); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } } void setup() { Bridge.begin(); delay(2000); Serial.begin(115200); Serial.println("Init Arduino Home Controller v2.1..."); pinMode(alarm, OUTPUT); pinMode(room_light, OUTPUT); pinMode(kitchen_light, OUTPUT); pinMode(garage_light, OUTPUT); pinMode(livingroom_light, OUTPUT); digitalWrite(room_light, HIGH); digitalWrite(kitchen_light, HIGH); digitalWrite(garage_light, HIGH ); digitalWrite(livingroom_light, HIGH); // Define PubNub MQTT broker client.setServer(mqtt_server, mqtt_server_port); client.setCallback(callback); client.connect(clientId); Serial.println("Connected to PubNub MQTT broker OK ..."); client.subscribe(topic); Serial.println("Suscribe to topic at MQTT broker Ok ..."); dht.begin(); //Wait for sensor initialize delay(4000); Serial.println("DHT sensor Ok ..."); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); } 
AHC_SendEmail.pyPython
File to be installed in Arduino Yun OpenWRT linux to help send email with attached photo
import smtplib import sys import time from email.MIMEMultipart import MIMEMultipart from email.MIMEText import MIMEText from email.MIMEBase import MIMEBase from email import encoders fromaddr = "joseacruzp@gmail.com" toaddr = "joseacruzp@gmail.com" emailpassword = "YOUR PASSWORD" subject = "Arduino Home Controller by Alexa Skill" body = "Photo taken in " + time.strftime('%a, %d %b %Y %H:%M:%S %Z(%z)') filedir =sys.argv[1] filename = sys.argv[2] msg = MIMEMultipart() msg['From'] = fromaddr msg['To'] = toaddr msg['Subject'] = subject msg.attach(MIMEText(body, 'plain')) attachment = open(filedir + filename, "rb") part = MIMEBase('application', 'octet-stream') part.set_payload((attachment).read()) encoders.encode_base64(part) part.add_header('Content-Disposition', "attachment; filename= %s" % filename) msg.attach(part) server = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() server.login(fromaddr, emailpassword) text = msg.as_string() server.sendmail(fromaddr, toaddr, text) server.quit() 
index.jsJavaScript
AWS Lambda Function if you select option 2, build your own skill
// Alexa SDK for Arduino Home Controller // Copyright (c) 2014-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. Use is subject to license terms. // Jose Cruz https://sites.google.com/view/jriot // Define connection to PubNub var PubNub = require("pubnub"); var pubnub = new PubNub({ ssl: true, publish_key: "pub-c-e93def7f-95aa-475a-aa60-cc3cd32ee8a7", subscribe_key: "sub-c-ec04dbbc-0893-11e8-8e75-cea83f8405bb", uuid: "YOUR UUID" }); // Define the PubNub channel var channel = 'AHC_IOT_01';; // Used to receive some values (temperature, humidity) var channel2 = 'AHC_IOT_02';; // Define slot states for light and alarm turn on/off var slotStates = ['on', 'off']; // App ID for the skill var APP_ID = 'YOUR APP ID FOR THE SKILL'; // The AlexaSkill prototype and helper functions var AlexaSkill = require('./AlexaSkill'); var ArduinoHomeSkill = function() { AlexaSkill.call(this, APP_ID); }; //Listener for suscribe and receive temperature and humidity var mqttListener; var access_token; var url; var https = require("https"); function SendMessage(topicname, commandvalue, speechOutput, iresponse) { https.get(url, res => { res.setEncoding("utf8"); let body = ""; res.on("data", data => { body += data; }); res.on("end", () => { pubnub.publish({ //Publishes the turn message to my PubHub Device. channel: channel, message: { "topic": topicname, "command": commandvalue, "id": JSON.parse(body).email } }).then((response) => { console.log("message Published w/ timetoken", response.timetoken); if (speechOutput) iresponse.tell(speechOutput); }).catch((error) => { console.log("publishing failed w/ status: ", error); iresponse.ask("Sorry, I didn't catch what you said"); }); }); }); } /// Extend AlexaSkill ArduinoHomeSkill.prototype = Object.create(AlexaSkill.prototype); ArduinoHomeSkill.prototype.constructor = ArduinoHomeSkill; ArduinoHomeSkill.prototype.eventHandlers.onSessionStarted = function(sessionStartedRequest, session) { // SetUserID(); console.log("ArduinoHomeSkill onSessionStarted requestId: " + sessionStartedRequest.requestId + ", sessionId: " + session.sessionId); // console.log("Init..."); //Delete all listeners and suscribes defined pubnub.removeListener(mqttListener); pubnub.unsubscribeAll(); // console.log("Init...Ok"); }; //-------->This is invoked by invocation word "Arduino Home" ArduinoHomeSkill.prototype.eventHandlers.onLaunch = function(launchRequest, session, response) { console.log("ArduinoHomeSkill onLaunch requestId: " + launchRequest.requestId + ", sessionId: " + session.sessionId); //if no amazon token, return a LinkAccount card if (session.user.accessToken == undefined) { response.tellWithCardLink('To start using this skill, please use the companion app to authenticate on Amazon.'); return; } var speechOutput = "Welcome to Arduino Home Controller. What would you like to do?"; var repromptText = "I am ready"; response.ask(speechOutput, repromptText); }; ArduinoHomeSkill.prototype.eventHandlers.onSessionEnded = function(sessionEndedRequest, session) { console.log("ArduinoHomeSkill onSessionEnded requestId: " + sessionEndedRequest.requestId + ", sessionId: " + session.sessionId); console.log("End..."); }; //*** Define all intent handlers ArduinoHomeSkill.prototype.intentHandlers = { //*** AboutIntent handler "AboutIntent": function(intent, session, response) { var myText; console.log("in about"); myText = "Arduino Home Controller skil let you control internet connected devices. It controls Lights at room, kitchen, garage or living room), read a temperature sensor to scan home temperature, read Humidity sensor to scan home humidity, uses webcam to take a home security photo and sent it by email and activate an alarm to alert some events. It uses PubNub site to manipulate all messages send by Alexa with Lambda function. Please check information at skill page for more details. What would you like to do?"; response.ask(myText); return; }, //*** LightIntent handler "LightIntent": function(intent, session, response) { var slotHabRooms = ['room', 'kitchen', 'garage', 'living room']; var lightSlot = intent.slots.light; var lightSlotValue = lightSlot ? lightSlot.value : ""; var whichSlot = intent.slots.which; var whichSlotValue = whichSlot ? whichSlot.value : ""; if (lightSlotValue && whichSlotValue && slotStates.indexOf(lightSlotValue.toLowerCase()) > -1 && slotHabRooms.indexOf(whichSlotValue.toLowerCase()) > -1) { SendMessage('Topic_' + whichSlotValue, lightSlotValue, "The light is now " + lightSlotValue, response); } else { response.ask("Sorry, I didn't catch what you said"); } }, //*** AlarmIntent handler "AlarmIntent": function(intent, session, response) { var alarmSlot = intent.slots.alarm; var alarmSlotValue = alarmSlot ? alarmSlot.value : ""; if (alarmSlotValue && slotStates.indexOf(alarmSlotValue.toLowerCase()) > -1) { SendMessage('Topic_alarm', alarmSlotValue, "The alarm is now " + alarmSlotValue, response); } else { response.ask("Sorry, I didn't catch what you said"); } }, //*** TakePhotoIntent handler "TakePhotoIntent": function(intent, session, response) { SendMessage('Topic_photo', 'take', "Taken home photo ", response); }, //*** GetTemperatureIntent handler "GetTemperatureIntent": function(intent, session, response) { mqttListener = { status: function(statusEvent) {}, message: function(message) { // handle message console.log("Receive=", message); var myText = "Inside Temperature is " + message.message + " degrees C"; response.tell(myText); }, presence: function(presenceEvent) { // handle presence } }; pubnub.addListener(mqttListener); pubnub.subscribe({ channels: [channel2] }); SendMessage('Topic_temperature', 'Ok', null, response) }, //*** GetTemperatureIntent handler "GetHumidityIntent": function(intent, session, response) { mqttListener = { status: function(statusEvent) {}, message: function(message) { // handle message console.log("Receive=", message); var myText = "Inside Humidity is " + message.message + " %"; response.tell(myText); }, presence: function(presenceEvent) { // handle presence } }; pubnub.addListener(mqttListener); pubnub.subscribe({ channels: [channel2] }); SendMessage('Topic_humidity', 'Ok', null, response) }, //*** HelpIntent handler "AMAZON.HelpIntent": function(intent, session, response) { response.ask("With Arduino Home Controller skill and Alexa you can control internet connected devices using an Arduino Yun or Arduino with Ethernet Shield. Please check information at skill page for more details. What would you like to do?"); }, //*** StopIntent handler "AMAZON.StopIntent": function(intent, session, response) { response.tell("Thanks for using Arduino Home Controller. Bye see you later"); }, //*** StopIntent handler "AMAZON.CancelIntent": function(intent, session, response) { response.tell("Thanks for using Arduino Home Controller. Bye see you later"); }, default: function(intent, session, response) { response.ask("Try again"); }, }; // Create the handler that responds to the Alexa Request. exports.handler = function(event, context) { try { access_token = event['context']['System']['user']['accessToken']; url = 'https://api.amazon.com/user/profile?access_token=' + access_token; //console.log("Access Token:", access_token); } catch (error) { console.log(error); } // Create an instance of Arduino Home Skill var ArduinoHomeControl = new ArduinoHomeSkill(); ArduinoHomeControl.execute(event, context); //console.log('AWSrequestID =', context.awsRequestId); }; 
Github
https://github.com/jcruzp/ArduinoHomeController

Skema

Papan utama dengan relay, sensor suhu dan kelembaban, alarm buzzer dan webcam.Pengontrol Rumah Pintar Arduino dengan Alexa: Otomasi Rumah yang Sederhana

Proses manufaktur

  1. Sistem Pencahayaan DMX Dikonrol Web – Kontroler Master Arduino
  2. Proyek Dadu Digital Arduino: Buat Generator Angka Acak berbasis LCD
  3. Pengontrol USB Game Arduino DIY – Buat Gamepad Tinggi Performa Sendiri
  4. Pixel Chaser: Game LED Interaktif Satu Ketukan dengan Arduino Nano
  5. Sistem Penyiraman Tanaman Rumah Pintar Ditenagai oleh Arduino Nano
  6. Levitasi Magnetik Repulsif Berbasis Arduino: Rangkaian Sederhana & Panduan DIY
  7. Kit Pengontrol Tampilan VFD Berbasis Arduino
  8. Bangun Robot Asisten Rumah Otonom: Daftar Lengkap Komponen & Panduan Pengaturan
  9. Pong Matriks NeoPixel pada Arduino Nano: Buat Game Pong Neon
  10. Kit Pengujian dan Pengontrol Arduino DMX-512 – Kit Lengkap Bagian untuk Kontrol Penerangan yang Andalan