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

Arduino Nano + Relay 4-Saluran: Kontrol Jendela & Motor AC

Komponen dan Perlengkapan

Alat dan Mesin yang Diperlukan

Aplikasi dan Layanan Online

Tentang Proyek Ini

Pendahuluan

Baru saja membeli rumah baru dan ingin mengotomatisasi segalanya, dimulai dari jendela. Proyek yang tampak mudah ternyata menjadi sedikit mimpi buruk: motor daya relatif tinggi (150W) merusak relai dan triak saya, komunikasi nirkabel dan pengontrol yang harus digunakan serta cara membuatnya bekerja tidak jelas, kebisingan di garis menyebabkan aktivasi jendela secara acak (menakutkan di tengah malam)... Akhirnya saya berhasil menyelesaikan semua masalah tersebut dengan komponen yang sangat murah dan semoga dapat membantu orang lain untuk menghindari sakit kepala ini dan banyak waktu.

Tidak suka memprogram, tapi suka solder? Baca tutorial ini terlepas dan di akhir Anda akan menemukan sirkuit diskrit yang melakukan hal yang sama, tetapi tanpa kecerdasan.

Penjelasan

Saat mengontrol motor, masalah penting adalah induktansi mereka, yang menyebabkan saat mencoba memutuskan sirkuit, arus insisten untuk terus mengalir melalui perangkat pemutus Anda, menyebabkan tegangan sangat tinggi. Jika Anda mencoba memutuskan sirkuit tanpa langkah pengaman dengan relai kecil, kontak mereka akan menempel bersama, dan jika Anda menggunakan triak (relai solid state) over-voltaase (dalam kasus saya saya mengukur puncak lebih dari 1600V) akan menghancurkan semikonduktor.

Saya menyadari dengan googling, bahwa orang lain juga mengalami masalah ini, tetapi mereka mengambil jalan yang mudah, mahal dan volumetrik, mereka hanya mendapatkan relai yang lebih besar, masih memerlukan relai murah hanya untuk mengaktifkan yang lebih besar, sementara kontak masih akan penderita dan mungkin gagal pada akhirnya. Sebagai insinyur saya tidak bisa membiarkan diri saya tidak mendapatkan solusi paling efisien. :) Dalam skema yang dilampirkan di bawah Anda memiliki solusi untuk menghindari relai besar ini hanya dengan menambahkan satu resistor, satu kapasitor dan satu varistor.

Varistor melindungi triak dari over-voltaase. Resistor ditambah kapasitor membentuk rangkaian RC Snubber yang menyerap energi selama komutasi pemutus.

[PS: karena saya menulis tutorial ini langsung dari kepala saya waktu lama setelah membuat proyek, ketika lain setelah melihat lebih dekat papan saya saya menyadari, bahwa dalam sirkuit sebenarnya saya meletakkan resistor dan kapasitor antara garis cokelat dan abu-abu (menurut warna skema) dari setiap motor daripada di kontak triak. Keduanya bekerja dalam kasus ini, namun keuntungan dari opsi kedua adalah Snubber tidak terpasang secara permanen ke jaringan listrik. ]

[PS2: SebDominguez juga membuat skema bagus dengan konfigurasi aktual:

Arduino Nano + Relay 4-Saluran: Kontrol Jendela & Motor AC

]

Alih-alih menggunakan satu pin untuk perintah naik dan satu lagi untuk turun untuk setiap jendela, sakal berbagi garis umum yang menunjukkan apakah jendela harus naik atau turun. Jadi kita menggunakan 5 input daripada 8. Tidak perlu filter, input di-debounce oleh perangkat lunak.

Pertama Arduino mengaktifkan modul relai untuk memilih arah motor, setelah jeda kecil, sehingga kontak relai sudah berada di tempat, itu mengaktifkan triak, memberi daya motor dengan 230 VAC melalui modul relai dan triak murah tanpa masalah. Untuk memutuskan sirkuit prosesnya berlawanan, pertama triak dan kemudian relai, sehingga relai tidak pernah menderita komutasi langsung.

Anda dapat menggunakan satu hingga empat motor, tanpa perlu memodifikasi kode, tidak akan merusak untuk memiliki logika untuk motor lain jika Anda tidak menggunakannya, kecuali jika Anda membutuhkan pin untuk sesuatu lain, jelasnya.

Di rumah kami ada dua lantai dan sehingga, dua sirkuit. Karena perintah jarak jauh harus unik, saya telah membuat kode untuk valid untuk salah satunya dengan mengomentari satu baris saat diunggah. Jika Anda hanya memasang satu sirkuit, Anda tidak perlu mengubah apa-apa, tetapi jika Anda akan membangun dua, di sana Anda sudah memiliki solusi secara gratis. Faktanya saya justru bohong pada Anda, kami memiliki tiga sirkuit, tetapi total 8 jendela, dalam satu sirkuit kita menempati semua empat motor, tetapi jendela lainnya terbagi menjadi dua dengan menggunakan tiga input pertama di satu Arduino dan hanya input nomor keempat di yang kedua. Sirkuit duplikat bereaksi pada perintah jarak jauh sama persis, tetapi di mana tidak ada yang terhubung, tidak ada yang diaktifkan. :) Jika Anda menggunakan versi MySensors dari kode, maka Anda dapat menghubungkan hingga 256 node dengan 4 jendela masing-masing tanpa mengubah satu baris pun dalam kode, cukup adil jika Anda tinggal di istana.

Sistem secara keseluruhan terlihat seperti ini:

Arduino Nano + Relay 4-Saluran: Kontrol Jendela & Motor AC

Maaf, itu tidak sangat mewah dan jelas, tetapi itu adalah instalasi nyata, dibuat waktu lalu, bukan sekadar sirkuit siap pakai untuk tutorial ini dan saya tidak dapat menunjukkan padanya yang disusun di meja. Seperti yang Anda lihat, itu muat dalam kotak dinding 22 x 15 x 5,2 cm, tapi cukup sempit. Cara saya membuatnya adalah dengan menaruh semua dalam kotak kayu terbuka menggunakan pistol lem panas: praktis, cepat dan mudah.

Jika Anda menggunakan web IDE untuk sketsa Arduino seharusnya menemukan otomatis semua perpustakaan yang dibutuhkan.

Kontrol Jarak Jauh (Opsional)

Tujuan tutorial ini adalah untuk menyelesaikan masalah induktansi, tetapi sebagai tambahan, ada juga kemampuan kontrol jarak jauh.

Kode yang disediakan mencakup dua cara kontrol jarak jauh melalui modul radio nrf24l01+: menggunakan MySensors (direkomendasikan), atau dengan mengirimkan integer dengan nomor jendela dan perintah 0 atau 1 untuk naik atau turun.

Dalam kedua kasus saya menggunakan RPi sebagai master dengan modul nRF24L01+ langsung terpasang padanya, dan pengontrol (Domoticz) yang diinstal.

Untuk opsi pertama, menggunakan MySensors, diperlukan untuk menginstal MySensors MQTT gateway. (https://www.mysensors.org/build/raspberry). Dalam implementasi saya mengonfigurasinya sebagai Ethernet di localhost. Ikuti langkah-langkah di tautan dan di sini Anda memiliki parameter konfigurasi saya yang mungkin membantu Anda (periksa apakah Anda membutuhkan yang sama):

sudo ./configure --my-gateway=mqtt --my-controller-ip-address=127.0.0.1 --my-mqtt-publish-topic-prefix=domoticz/in/MyMQTT --my-mqtt-subscribe-topic-prefix=domoticz/out/MyMQTT --my-mqtt-client-id=mygateway1 --my-transport=rf24 --my-port=1883 --my-rf24-irq-pin=15

Setelah selesai integrasinya di Domoticz sangat mudah: tambahkan gateway MySensors MQTT, hidupkan node dan dalam setup perangkat keras baru Anda akan menemukannya langsung.

Untuk opsi kedua, menggunakan aplikasi kustom langsung, bukan MySensors, saklar virtual mengeksekusi perintah konsol:

 ./remote -m XY 

(X: nomor jendela, Y: aksi).

Di header skrip Arduino Anda dapat menemukan lebih banyak detail.

Kode untuk perintah jarak jauh ini dijelaskan di https://hack.lenotta.com/arduino-raspberry-pi-switching-light-with-nrf24l01/ Lupakan bagian Node.js dan sketsa Arduino, kita tidak memerlukannya dan sketsa itu sebenarnya memiliki bug. Yang kita butuhkan dari sini hanya bagian “The Lamp Switch Application” saja. Bagian perangkat keras juga dapat berguna untuk koneksi radio. Dan selalu pasang kapasitor 10 uF pada pin daya modul radio. Juga pertimbangkan untuk mendapatkan modul radio dengan antena eksternal jika Anda memiliki ruang. Di dalam ruangan, jangkauan antena PCB dapat sangat terbatas (kurang dari 10 m), terutama jika modul terpengkung di dinding seperti untuk proyek ini.

Ingatlah bahwa kode ini harus dimodifikasi sedikit, menyesuaikan parameter radio dengan Arduino dan juga, membuat kode mengirim perintah hanya sekali daripada mencoba ulang hingga 5 kali jika tidak ada respons yang diterima, jika tidak dalam kasus kehilangan umpan balik Arduino Anda akan melihat jendela Anda bergerak-berhenti-bergerak-berhenti-bergerak.

Kode akhir untuk Raspberry akan terlihat seperti ini:

#include <unistd.h> #include <string> #include <getopt.h> #include <cstdlib> #include <sstream> #include <iostream> #include <RF24/RF24.h> using namespace std; //RF24 radio("/dev/spidev0.0",8000000 , 25); //RF24 radio(RPI_V2_GPIO_P1_15, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ); RF24 radio(RPI_V2_GPIO_P1_22, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ); //const int role_pin = 7; const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL }; //const uint8_t pipes[][6] = {"1Node","2Node"}; // hack to avoid SEG FAULT, issue #46 on RF24 github https://github.com/TMRh20/RF24.git unsigned long got_message; void setup(void){ //Prepare the radio module printf("\nPreparing interface\n"); radio.begin(); radio.setRetries( 15, 15); radio.setChannel(0x70); radio.setDataRate(RF24_250KBPS); radio.setPALevel(RF24_PA_MAX); radio.printDetails(); radio.openWritingPipe(pipes[0]); radio.openReadingPipe(1,pipes[1]); // radio.startListening(); } bool sendMessage(int action){ //This function send a message, the 'action', to the arduino and wait for answer //Returns true if ACK package is received //Stop listening radio.stopListening(); unsigned long message = action; printf("Now sending %lu...", message); //Send the message bool ok = radio.write( &message, sizeof(unsigned long) ); if (!ok){ printf("failed...\n\r"); }else{ printf("ok!\n\r"); } //Listen for ACK radio.startListening(); //Let's take the time while we listen unsigned long started_waiting_at = millis(); bool timeout = false; while ( ! radio.available() && ! timeout ) { //printf("%d", !radio.available()); if (millis() - started_waiting_at > 1000 ){ timeout = true; } } if( timeout ){ //If we waited too long the transmission failed printf("Puta mierda, no me responde nadie...\n\r"); return false; }else{ //If we received the message in time, let's read it and print it radio.read( &got_message, sizeof(unsigned long) ); printf("Yeah, me han respondido > %lu.\n\r",got_message); return true; } } int main( int argc, char ** argv){ char choice; setup(); bool switched = false; int counter = 0; //Define the options while(( choice = getopt( argc, argv, "m:")) != -1){ if (choice == 'm'){ printf("\n Talking with my NRF24l01+ friends out there....\n"); while(switched == false && counter < 1){ //Number of attemps to send the message switched = sendMessage(atoi(optarg)); counter ++; sleep(1); } }else{ // A little help: printf("\n\rIt's time to make some choices...\n"); printf("\n\rTIP: Use -m idAction for the message to send. "); printf("\n\rExample (id number 12, action number 1): "); printf("\nsudo ./remote -m 121\n"); } //return 0 if everything went good, 2 otherwise if (counter < 5) return 0; else return 2; } } 

Karena diperlukan untuk dikompilasi dan sebagainya, saya telah memudahkan hal bagi Anda dan menempatkan semua yang Anda butuhkan (hanya untuk sisi Raspberry, sketsa Arduino di bawah) dalam file zip dengan kode sumber yang dimodifikasi, perpustakaan dan kode yang dikompilasi untuk Raspberry Pi 3:

https://goo.gl/ocCwk3

Jika Anda mengekstrak ini ke RPi Anda, Anda seharusnya dapat menjalankan perintah remote.

Hasil

Di sini Anda dapat melihat bagaimana saya mengimplementasikan semuanya.

Arduino Nano + Relay 4-Saluran: Kontrol Jendela & Motor AC

Tiga pasang saklar di dinding mengontrol tiga jendela. Tablet di dinding menunjukkan antarmuka Domoticz dengan saklar virtual. Di belakang tablet ada Raspberry, di mana pengontrol terinstal, di antaranya. Arduino tidak di sini, ia berada dekat jendela dalam gambar yang ditunjukkan sebelumnya; RPi dan Arduino terhubung secara nirkabel melalui modul radio.

Arduino Nano + Relay 4-Saluran: Kontrol Jendela & Motor AC

Di sini Anda juga dapat melihat Google Home, yang dengan menggunakan IFTTT dengan layanan Webhooks dan Domoticz membantu saya untuk membuat perintah suara apapun mungkin, seperti “Hey Google, jendela turun.” Jika Anda telah mencapai titik ini, pasti Anda tidak akan memiliki masalah untuk membuat perintah suara bekerja.

Di sini Anda memiliki video yang sangat cepat yang menunjukkan hasilnya.

Beritahu saya apakah tutorial ini membantu Anda!

Salam hangat,

gomecin

P.S. Sebagai tambahan untuk rasa ingin tahu, atau karena Anda benar-benar membenci komputer, pemrograman atau apa pun, pertama saya mencoba membuat solusi secara diskrit tanpa kecerdasan sama sekali. Ini adalah hasilnya:

Arduino Nano + Relay 4-Saluran: Kontrol Jendela & Motor AC

Saya bahkan telah membangunnya, dan sirkuit melakukan pekerjaannya, tetapi saya melakukannya sebelum familiar dengan platform Arduino, yang lebih fleksibel dan sepenuhnya andal, oleh karena itu saya tidak akan menjelaskannya. Jika ini berguna bagi Anda, maka bagus, tetapi ini bukan cakupan tutorial ini, dan saya akan menyarankan untuk tidak menggunakannya.

Kode

Sketsa Arduino

Skema

Arduino mengontrol 4 motor jendelaArduino Nano + Relay 4-Saluran: Kontrol Jendela & Motor AC

Proses manufaktur

  1. Rangkaian Permisif dan Interlock dalam Sistem Kontrol Industri
  2. Rangkaian Kontrol Motor Lanjutan: Teknik Latching, Stop, dan Tunda Waktu
  3. Menghitung Disipasi Daya dalam Rangkaian Resistif
  4. Teknologi Bulldozer: Desain, Manufaktur, dan Inovasi Masa Depan
  5. Edge AI dan Hardware Dayah Daya Menggerakkan Pengendalian Suara
  6. Infineon Memperkenalkan Seri TLE985x Embedded Power untuk Kontrol Motor Automotive
  7. Kontrol Kualitas: Sumbu Utama Keandalan Motor
  8. Panel Kontrol Listrik: Esensi Desain untuk Keamanan dan ROI
  9. Sewa Listrik dan HVAC Terpercaya untuk Kontrol Iklim yang Mulus
  10. Mengontrol Kecepatan Motor Hidrolik dengan PWM & Kontrol Jarak Jauh: Panduan Praktis