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

Remote TV Arduino Kustom – Daya Baterai, Kotak Cetak 3D

Komponen dan perlengkapan

Remote TV Arduino Kustom – Daya Baterai, Kotak Cetak 3D
Arduino UNO
×1
Remote TV Arduino Kustom – Daya Baterai, Kotak Cetak 3D
Baterai 9V (generik)
×1
Remote TV Arduino Kustom – Daya Baterai, Kotak Cetak 3D
Konektor 9V ke Barrel Jack
×1
Pemancar IR (generik)
×1
Remote TV Arduino Kustom – Daya Baterai, Kotak Cetak 3D
Baut Mesin, M3
×4
Remote TV Arduino Kustom – Daya Baterai, Kotak Cetak 3D
Baut Mesin, M2.5
×3
Mur M3
×4
Mur M2.5
×3
Remote TV Arduino Kustom – Daya Baterai, Kotak Cetak 3D
Resistor Lubang Through, 47 ohm
×2
Papan Prototyping, 2.54 mm
×1
Tombol Tekan PCB
×6
Remote TV Arduino Kustom – Daya Baterai, Kotak Cetak 3D
Male-Header 36 Posisi 1 Baris- Panjang (0.1")
×1

Alat dan mesin yang diperlukan

Remote TV Arduino Kustom – Daya Baterai, Kotak Cetak 3D
Printer 3D (generik)
Remote TV Arduino Kustom – Daya Baterai, Kotak Cetak 3D
Pakuin (generik)
Remote TV Arduino Kustom – Daya Baterai, Kotak Cetak 3D
Kabel Solder, Bebas Timah
Filamen PLA, diameter 1.75 mm

Tentang proyek ini

Pengantar

Remote TV pacarku tidak berfungsi. Dia bisa membeli pengganti murah di toko terdekat, tetapi kemudian dia berpikir: kita keduanya insinyur, mari buat sendiri bersama!

Karena kami cukup melengkapi dalam keterampilan, ini adalah cara yang berbeda, tapi menyenangkan untuk menghabiskan waktu selama lockdown dan memberikan kesempatan untuk mempelajari sedikit tentang bagaimana teknologi sehari-hari ini bekerja.

Oh, dan memiliki printer 3D kecil di rumah juga memainkan peran.

Cara Kerja

Pertama-tama, karena kita ingin membuat desain sederhana yang bergantung pada Arduino UNO, kita mengevaluasi jumlah minimum perintah yang kita butuhkan untuk mengoperasikan TV kita. Kami menganggap 6 perintah cukup: ON/OFF toggle, Pemilihan Sumber, Ch+, Ch-, Vol+, Vol-.

Membaca Tombol

Untuk menghindari penggunaan resistor tambahan, desain ini bergantung pada resistor pull-up internal Arduino. Jika remote control tidak dalam mode tidur (lihat di bawah), status setiap tombol diproses dalam setiap siklus loop. Untuk menghindari menghitung beberapa kali klik, rutinitas debouncing sederhana diimplementasikan dengan memanfaatkan fungsi millis().

Mengirim Sinyal Inframerah

Komunikasi inframerah ditangani oleh perpustakaan IRremote.h (kudos kepada para coder!). Yang harus kita lakukan hanyalah menyiapkan protokol untuk TV kami (berbagai produsen telah mengembangkan protokol mereka sendiri) dan mencari di Google untuk kode HEX dari berbagai perintah yang ingin kita gunakan dan menghubungkannya ke tombol. Seperti yang terkait dengan desain rangkaian, untuk agar perintah dari perpustakaan secara efektif mengendalikan LED IR, ini harus terhubung ke pin3 Arduino UNO.

Saat ini, kode ditulis untuk tiga jenis TV yang berbeda, dapat dipilih dengan mengomentari/mengaktifkan direktif #define di bagian pertama kode.

Penghematan Baterai

Untuk mengurangi konsumsi daya, beberapa strategi diimplementasikan, memanfaatkan perintah dari perpustakaan avr/sleep.h dan avr/power.h.

Semua periferal dan antarmuka yang tidak digunakan (ADC, SPI, TWI, timer1, usart) dimatikan dalam rutinitas setup. LED bawaan pada pin PWM 13 juga dimatikan. Kami juga memutuskan untuk melepas solder LED daya Arduino UNO, yang sebaliknya selalu menyala, meskipun ini bukan operasi yang disarankan.

Selain itu, memanfaatkan millis(), jika tidak ada tombol yang ditekan selama 5 detik remote control masuk ke mode tidur, dari mana akan terbangun saat tombol On/Off ditekan lagi.

Cara Membuatnya

Pemasangan Elektronika

Seluruh rangkaian tertanam pada papan prototyping, dirancang untuk muat pada header Arduino UNO. Dengan menggunakan pakuin, tombol disolderkan mempertimbangkan posisi akhir pada remote. Pada bagian bawah, dua resistor 47ohm disolderkan paralel, untuk mencapai arus yang diinginkan melalui LED IR.

Menggunakan kabel solder, jejak dibuat pada papan prototyping untuk menghubungkan pin tombol dan LED IR ke pin header jantan.

Dengan cara ini, papan mirip dengan shield yang dipasang pada Arduino UNO menggunakan pin header, memastikan semua koneksi yang benar.

CAD dan CAM Kotak

Kotak dirancang untuk menampung baterai, rangkaian Arduino UNO + papan prototyping, mengekspos hanya tombol di atas dan LED IR di sisi depan.

Kotak terdiri dari dua bagian, dirancang menggunakan perangkat lunak CAD SolidWorks, diproses sebelumnya dengan perangkat lunak slicing Ultimaker Cura dan akhirnya dicetak 3D dalam PLA menggunakan printer 3D Anycubic Mega Zero.

Arduino UNO dijamin ke dasar dengan menggunakan 3 baut M2.5, yang muat dalam lubang penyelarasan yang diekstrus dari dalam dasar. Setelah Arduino dijamin, LED IR akan melengkung keluar dari papan prototyping, untuk menyelaraskannya dengan lubang yang dibuat khusus dan untuk menjaga posisi saat merakit dua bagian kotak, tiga mini-post ditambahkan untuk menghindari gerakan lateral kawat LED. Baterai ditekan ke dalam ruang khusus.

Penutup dirancang untuk mengekspos hanya tombol dan di samping masing-masingnya, simbol diukir di penutup untuk menunjukkan fungsi setiap tombol.

Dasar dan penutup kotak dirakit menggunakan 4 baut M3.

Remote TV Arduino Kustom – Daya Baterai, Kotak Cetak 3D
Remote TV Arduino Kustom – Daya Baterai, Kotak Cetak 3D
Remote TV Arduino Kustom – Daya Baterai, Kotak Cetak 3D
Remote TV Arduino Kustom – Daya Baterai, Kotak Cetak 3D

Kode

  • TV_remote.ino
TV_remote.inoArduino
#include <IRremote.h> #include <avr/sleep.h> #include <avr/power.h> // Pin definition // An IR LED must be connected to Arduino PWM pin 3 #define OnOff 1 #define Source 0 #define CH_plus 4 #define CH_minus 5 #define Vol_plus 6 #define Vol_minus 7 #define Interrupt_Pin 2 //Only pin 2 or 3 on Arduino Uno // TV model definition //#define LG_TV //#define SAMSUNG_TV #define SONY_TV // Codes definition #ifdef LG_TV unsigned long on_off_code = 551489775; // HEX 20DF10EF unsigned long vol_plus_code = 551502015; //HEX 20DF40BF unsigned long vol_minus_code = 551534655; //HEX 20DFC03F unsigned long ch_plus_code = 551485695; //HEX 20DF00FF unsigned long ch_minus_code = 551518335; //HEX 20DF807F unsigned long source_code = 551538735; //HEX 20DFD02F #endif #ifdef SAMSUNG_TV unsigned long on_off_code = 3772793023; // HEX E0E040BF unsigned long vol_plus_code = 3772833823; //HEX E0E0E01F unsigned long vol_minus_code = 3772829743; //HEX E0E0D02F unsigned long ch_plus_code = 3772795063; //HEX E0E048B7 unsigned long ch_minus_code = 3772778743; //HEX E0E008F7 unsigned long source_code = 3772809343; //HEX E0E0807F #endif #ifdef SONY_TV unsigned long on_off_code = 2704; //HEX A90 unsigned long vol_plus_code = 1168; //HEX 490 unsigned long vol_minus_code = 3216; //HEX C90 unsigned long ch_plus_code = 144; //HEX 090 unsigned long ch_minus_code = 2192; //HEX 890 unsigned long source_code = 2640; //HEX A50 #endif //Enable Debug //#define DEBUG // IRsend irsend; //Create IR object unsigned long debounce_time; unsigned long last_time; void setup() { analogWrite(13,0); //turn of builtin led //noInterrupts(); //disable interrupts //CLKPR = _BV(CLKPCE); //enable clock prescaler settings //CLKPR = _BV(CLKPS0); //set clock prescaler = 2 --> 8 MHz //interrupts(); pinMode(OnOff,INPUT_PULLUP); pinMode(Source,INPUT_PULLUP); pinMode(CH_plus,INPUT_PULLUP); pinMode(CH_minus,INPUT_PULLUP); pinMode(Vol_plus,INPUT_PULLUP); pinMode(Vol_minus,INPUT_PULLUP); pinMode(Interrupt_Pin,INPUT_PULLUP); //power saving power_adc_disable(); //disable all ADCs power_spi_disable(); //disable SPI power_timer1_disable(); //disbale timer 1 (0 is for millis(), 2 is for irremote.h) power_usart0_disable(); //disable serial power_twi_disable(); //disable TWI #ifdef DEBUG Serial.begin(9600); #endif } void loop() { //check OnOff if (!digitalRead(OnOff)) { debounce_time = millis(); while (millis() - debounce_time < 40 ) { ; } if (!digitalRead(OnOff)) { #ifdef LG_TV irsend.sendNEC(on_off_code, 32); #endif #ifdef SAMSUNG_TV irsend.sendSAMSUNG(on_off_code, 32); #endif #ifdef SONY_TV irsend.sendSony(on_off_code, 12); #endif last_time = millis(); //last time a button was pressed #ifdef DEBUG Serial.println("OnOff"); #endif } } //check Source if (!digitalRead(Source)) { debounce_time = millis(); while (millis() - debounce_time < 40 ) { ; } if (!digitalRead(Source)) { #ifdef LG_TV irsend.sendNEC(source_code, 32); #endif #ifdef SAMSUNG_TV irsend.sendSAMSUNG(source_code, 32); #endif #ifdef SONY_TV irsend.sendSony(source_code, 12); #endif last_time = millis(); //last time a button was pressed #ifdef DEBUG Serial.println("Source"); #endif } } //check CH_plus if (!digitalRead(CH_plus)) { debounce_time = millis(); while (millis() - debounce_time < 40 ) { ; } if (!digitalRead(CH_plus)) { #ifdef LG_TV irsend.sendNEC(ch_plus_code, 32); #endif #ifdef SAMSUNG_TV irsend.sendSAMSUNG(ch_plus_code, 32); #endif #ifdef SONY_TV irsend.sendSony(ch_plus_code, 12); #endif last_time = millis(); //last time a button was pressed #ifdef DEBUG Serial.println("CH+"); #endif } } //check CH_minus if (!digitalRead(CH_minus)) { debounce_time = millis(); while (millis() - debounce_time < 40 ) { ; } if (!digitalRead(CH_minus)) { #ifdef LG_TV irsend.sendNEC(ch_minus_code, 32); #endif #ifdef SAMSUNG_TV irsend.sendSAMSUNG(ch_minus_code, 32); #endif #ifdef SONY_TV irsend.sendSony(ch_minus_code, 12); #endif last_time = millis(); //last time a button was pressed #ifdef DEBUG Serial.println("CH-"); #endif } } //check Vol_plus if (!digitalRead(Vol_plus)) { debounce_time = millis(); while (millis() - debounce_time < 40 ) { ; } if (!digitalRead(Vol_plus)) { #ifdef LG_TV irsend.sendNEC(vol_plus_code, 32); #endif #ifdef SAMSUNG_TV irsend.sendSAMSUNG(vol_plus_code, 32); #endif #ifdef SONY_TV irsend.sendSony(vol_plus_code, 12); #endif last_time = millis(); //last time a button was pressed #ifdef DEBUG Serial.println("Vol+"); #endif } } //check Vol_minus if (!digitalRead(Vol_minus)) { debounce_time = millis(); while (millis() - debounce_time < 40 ) { ; } if (!digitalRead(Vol_minus)) { #ifdef LG_TV irsend.sendNEC(vol_minus_code, 32); #endif #ifdef SAMSUNG_TV irsend.sendSAMSUNG(vol_minus_code, 32); #endif #ifdef SONY_TV irsend.sendSony(vol_minus_code, 12); #endif last_time = millis(); //last time a button was pressed #ifdef DEBUG Serial.println("Vol-"); #endif } } if (millis()-last_time > 5000) { //a button has not been pressed for 10 s #ifdef DEBUG Serial.println("Going to sleep..."); #endif going_to_sleep(); //enter sleep mode #ifdef DEBUG Serial.println("Waking up..."); #endif } } //Sleep Mode function void going_to_sleep() { sleep_enable(); //enable sleep mode attachInterrupt(digitalPinToInterrupt(Interrupt_Pin), wake_up, LOW); //interrupt for waking up --> configure Interrupt Pin as a WIRED NOR!!! set_sleep_mode(SLEEP_MODE_PWR_DOWN); //full sleep mode sleep_cpu(); //activate sleep mode } //Wake Up function void wake_up() { sleep_disable(); //disable sleep mode detachInterrupt(digitalPinToInterrupt(Interrupt_Pin)); //remove the interrupt } 

Bagian dan Kotak Khusus

Skematik

Remote TV Arduino Kustom – Daya Baterai, Kotak Cetak 3Dremote_sketch_r4f8a47oWX.fz

Proses manufaktur

  1. Sistem Kontrol Akses Terintegrasi QR, RFID, dan Verifikasi Suhu
  2. Menangkap Perintah Remote IR pada Raspberry Pi tanpa LIRC: Pendekatan Python UART
  3. PiCy: Buat Robot Kecil Anda Sendiri dengan Raspberry Pi
  4. Buat Game Gyroskop Real-Time dengan Arduino Nano & Sensor MPU-6050
  5. Kamera Keamanan Deteksi Gerak Berbasis ESP32 untuk Discord
  6. Bangun Tabung Pintar: Kendalikan Penerima Koin dengan Arduino Nano
  7. Unopad: Pengontrol MIDI Arduino yang Mulus untuk Ableton Live
  8. Kontrol LED melalui Bluetooth dengan Arduino – Panduan DIY Sederhana
  9. Mesin Bubut CNC Millport SmartLathez 1740 – Presisi & Daya
  10. 5 Manfaat Utama Kontrol Produksi Jarak Jauh untuk Industri Modern