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

Menggunakan Ulang Remote Control Lama

Komponen dan persediaan

Arduino Nano R3
× 1
LED 5 mm:Merah
Satu merah untuk LED status, setelah itu, warnanya tidak terlalu penting - hanya perlu dapat mengidentifikasi mana yang aktif.
× 3
LED 5 mm:Hijau
Warna tidak terlalu penting - hanya perlu dapat mengidentifikasi mana yang aktif
× 1
LED 5 mm:Kuning
Warna tidak terlalu penting - hanya perlu dapat mengidentifikasi mana yang aktif
× 1
LED Biru
Warna tidak terlalu penting - hanya perlu dapat mengidentifikasi mana yang aktif
× 2
Ukuran Penuh Papan Tempat Memotong Roti Tanpa Solder
× 1
Kabel jumper (generik)
× 1
Toggle Switch, (Off)-On
Switch toggle SPST apa pun akan berfungsi
× 1
Stik Catu Daya Papan Tempat Memotong Roti SparkFun 5V/3.3V
Opsional jika Anda dapat memasok 5 volt dari sumber lain atau jika Anda menggunakannya dari koneksi USB komputer Anda ,
× 1
Penerima IR (generik)
Saya menggunakan Penerima Sensor IR Inframerah KY-022 37.9KHz yang saya peroleh dari Amazon
× 1

Tentang proyek ini

Proyek ini memungkinkan Anda untuk menggunakan kembali kelebihan kendali jarak jauh dari VCR lama, TV, pemutar DVD, dll.

Anda dapat menggunakan remote untuk menyalakan perangkat seperti lampu, pemanas, dll. Dengan relai, transistor daya, atau apa pun yang dapat dikontrol oleh sinyal 5 volt. Seperti yang ditunjukkan di sini, itu hanya mengaktifkan hingga 6 LED. Idenya adalah untuk menyediakan sketsa dan tata letak papan tempat memotong roti sehingga sinyal yang dikirim ke LED dapat dikirim secara paralel ke apa pun yang dibayangkan pengguna!

Seperti yang dirancang, ia membaca 6 kode IR dari remote control mana pun dan "menghafalnya". Saya suka menggunakan dights 1, 2, 3, 4, 5, 6 -- tetapi enam tombol apa pun akan berfungsi. Perhatikan bahwa tombol lain dengan kode IR selain dari 6 kode yang diketahui bertindak sebagai reset dan menonaktifkan semua output. Saya mencapai ini dengan menulis kode sebagai bilangan bulat panjang ke memori EEPROM pada papan Ardunio. Masing-masing membutuhkan 4 byte, tetapi karena UNO dan NANO masing-masing memiliki 1024 byte memori EEPROM, ada banyak ruang. Memori ini bertahan melalui reset dan power-off, seperti yang diharapkan. Semuanya akan muat di satu papan tempat memotong roti, kecuali sakelar sakelar. Pin dapat disolder ke sakelar ini untuk memasukkannya ke papan tempat memotong roti. Saya malas dan menggunakan selotip untuk menahannya di meja saya selama pengembangan.

Saya sudah mencobanya dengan lima surplus lama yang berbeda, dan mereka semua melakukan hal yang sama. "Gotcha" yang saya perjuangkan adalah sinyal cahaya atau sinyal yang lebih lemah dari beberapa remote. Untuk mengatasi ini, saya dengan hati-hati membengkokkan penerima "LED" ke bawah hingga sekitar 45 derajat, dan saya meletakkan sedikit karton buatan sendiri dan kotak selotip di atasnya, dengan salah satu ujungnya terbuka. Tampaknya menangkap kode secara konsisten dan dari jarak 5-8 kaki atau lebih. Saya tidak pernah melewatkan lebih dari lima hari pengujian dan penyesuaian program.

Untuk memprogramnya, gunakan posisi "belajar". Anda beralih dari mode "jalankan" ke mode "belajar" dengan menekan tombol sakelar. Pengalih ini menyalakan LED indikator mode merah, yang menunjukkan bahwa itu siap untuk mendengarkan. Ini berkedip LED 1, dan Anda menekan tombol pada remote Anda. LED berkedip 1 diprogram untuk bereaksi terhadap kode itu. Segera setelah ia mengenali kode, ia dengan cepat mengedipkan LED indikator mode selama satu atau dua detik (begitu cepat hingga terlihat seperti bergetar!) dan beralih ke LED berikutnya. Ini berlanjut sampai keenamnya diprogram. Kemudian LED indikator mode berkedip perlahan pada interval satu detik yang menunjukkan bahwa sistem harus dialihkan ke mode berjalan.

Saya menemukan ketika memprogramnya bahwa kesalahan paling umum adalah lupa memindahkan jari Anda ke digit berikutnya pada remote. Dengan demikian mudah untuk memprogram dua output dengan kode yang sama. Setiap kali dimulai, ia mencari duplikat seperti itu. Jika ditemukan, ia akan mengedipkan LED "menyinggung" beberapa kali untuk menyarankan pemrograman ulang mungkin diperlukan. Namun, seseorang mungkin ingin beberapa kunci melakukan hal yang sama, sehingga tidak memaksa pemrograman ulang.

Status mode, kesalahan, dll. ditunjukkan oleh kecepatan kilat LED status MERAH. Semua informasi yang ditunjukkan oleh LED yang berkedip, dll., dikirim ke monitor serial. Saya mengaturnya untuk menggunakan rangkaian lampu kilat LED sehingga pengguna dapat mengaturnya tanpa komputer. Pesan yang dikirim ke monitor serial lebih mudah diikuti daripada mengingat arti LED berkedip pada berbagai kecepatan. Karena ini biasanya hanya diprogram beberapa kali, mungkin lebih wajar untuk menghubungkannya ke PC Anda dan menonton teks di monitor serial.

Ada banyak checks and balances dalam kode sketsa. Mereka didokumentasikan dengan baik (saya harap!), Jadi saya tidak akan memberikan detailnya di sini. Pengguna yang akrab dengan C, C++ dan Arduino IDE seharusnya dapat dengan mudah mengikuti kode dan melakukan modifikasi jika diinginkan.

Tambahan: Saya telah menguji ini dengan 5 relai secara paralel dengan LED 1 hingga 5 dan berfungsi seperti yang diharapkan. Mereka semua menyalakan lampu meja 120 VAC, sehingga rangkaian bekerja seperti yang diharapkan. Saya kehabisan relay, jadi kita harus berasumsi bahwa sinyal ke-6 akan bekerja dengan baik. Perhatikan ini hanya bukti konsep. Saya harus membalikkan sinyal dari empat output pertama dengan gerbang quad NAND CD4011 karena mereka menutup pada 0 volt sebagai lawan dari 5 volt. Relai tunggal bekerja pada sinyal + 5-volt, jadi tidak diperlukan inversi sinyal. Harap berhati-hati dalam mengganti tegangan listrik. Mereka bertegangan tinggi dan berpotensi memberikan kejutan buruk atau bahkan membunuh!

Ingat, ini hanya contoh. Gunakan imajinasi Anda tentang perangkat apa yang akan dihubungkan ke 6 output. Selamat menikmati!

Kode

  • Sketsa pembuatan ulang IR Jarak jauh
IR Remote repurposing sketsaArduino
/* Beralih 6 LED menggunakan remote IR untuk mengilustrasikan cara menggunakan kembali remote surpulus sehingga dapat digunakan untuk mengontrol hampir semua perangkat. Sketsa ini mempelajari kode pabrikan untuk tombol 1,2,3,4,5,6 dan 0 pada remote IR mana pun saat sakelar sakelar dalam posisi "Belajar" atau program. Nilai-nilai ini disimpan dalam EEPROM Arduino Nano. Saat sakelar sakelar dimasukkan ke mode "Jalankan", nilai-nilai ini digunakan untuk menentukan tombol mana yang ditekan. 6 LED terkait kemudian dinyalakan dan dimatikan oleh remote. Ini untuk mendemonstrasikan cara mempelajari dan menggunakan kode apa pun jenis remote IR. Selain LED, output dapat diperluas untuk menghidupkan atau mematikan perangkat dengan relai, transistor daya tinggi, dll. Paul M Dunphy VE1DX Maret 2020 */ // Sertakan Perpustakaan Jarak Jauh IR yang dikembangkan oleh Ken Shirriff#include // Berikan kemampuan untuk membaca/menulis hingga 1024 byte EEPROM#include long unsigned int intIRCode;int saveIRCodes lama yang tidak ditandatangani[6];int dupeCheck panjang yang tidak ditandatangani[6]; // Tentukan pin untuk sensor IR int Recv_Pin =2; // Tentukan konstanta pin untuk mengaktifkan LEDsconst int PinOne =12; const int PinTwo =11;const int PinTiga =10; const int PinFour =9;const int PinFive =8; const int PinSix =7;// Tentukan konstanta pin untuk membaca dan menunjukkan// status Run/Learn toggle switch.const int switchPin =4; const int statusPin =5; const unsigned long int repeatKeyPress =0xFFFFFFFF;Mode belajar boolean; // Digunakan untuk melacak mode // mana kita berada sesuai dengan toggle switch.boolean first_iteration; // Tentukan bilangan bulat untuk mengingat status peralihan dari setiap LEDint togglestate1;int togglestate2;int togglestate3;int togglestate4;int togglestate5;int togglestate6;int current_remote_code;int remote_code_1;int remote_code_2;int remote_code_3;int remote_code_4;int remote_code_5;int remote_code_6; // Tentukan Penerima IR dan Objek HasilIRrecv irrecv(Recv_Pin);hasil decode_results;void EEPROMWritelong(int address, long value)// Tulis bilangan bulat panjang 4 byte (32bit) ke EEPROM// Karena panjangnya 4 byte, mereka disimpan di // address to address + 3 { // Mendekomposisi long integer menjadi 4 byte dengan menggunakan bitshift. // Satu =Paling signifikan -> Empat =byte paling tidak signifikan byte empat =(nilai &0xFF); byte tiga =((nilai>> 8) &0xFF); byte dua =((nilai>> 16) &0xFF); byte satu =((nilai>> 24) &0xFF); EEPROM.write(alamat, empat); EEPROM.write(alamat + 1, tiga); EEPROM.write(alamat + 2, dua); EEPROM.write(alamat + 3, satu); }long EEPROMReadlong(long address)// Baca bilangan bulat panjang 4 byte (32bit) dari EEPROM.// Karena panjangnya 4 byte, mereka disimpan di // address to address + 3 { long four =EEPROM.read( alamat); panjang tiga =EEPROM.read(alamat + 1); panjang dua =EEPROM.read(alamat + 2); panjang =EEPROM.read(alamat + 3); // Susun byte menjadi bilangan bulat panjang dan kembalikan ((empat <<0) &0xFF) + ((tiga <<8) &0xFFFF) + ((dua <<16) &0xFFFFFF) + ((satu <<24) &ulangiKeyPress); }int Flip_LED(int led, int toggle_state) { if(toggle_state==0) { digitalWrite(led, HIGH); toggle_state=1; } else { digitalWrite(led, RENDAH); toggle_state=0; } kembalikan toggle_state; }void Reset() { // Matikan semua LED dan atur sakelar // flag ke off (0) digitalWrite(PinOne, LOW); digitalWrite(PinTwo, RENDAH); digitalWrite(PinThree, RENDAH); digitalWrite(PinFour, RENDAH); digitalWrite(PinFive, RENDAH); digitalWrite(PinSix, RENDAH); togglestate1 =0; togglestate2 =0; togglestate3 =0; togglestate4 =0; togglestate5 =0; togglestate6 =0; }void guessType() { Serial.print("Remote tampaknya adalah "); switch (results.decode_type){ kasus NEC:Serial.println("NEC "); merusak; kasus SONY:Serial.println("SONY"); merusak; kasus RC5:Serial.println("RC5"); merusak; kasus RC6:Serial.println("RC6"); merusak; kasus DISH:Serial.println("DISH"); merusak; kasus SHARP:Serial.println("SHARP"); merusak; kasus JVC:Serial.println("JVC"); merusak; kasus SANYO:Serial.println("SANYO"); merusak; kasus MITSUBISHI:Serial.println("MITSUBISHI "); merusak; kasus SAMSUNG:Serial.println("SAMSUNG"); merusak; kasus LG:Serial.println("LG"); merusak; kasus MENGAPA:Serial.println("MENGAPA "); merusak; kasus AIWA_RC_T501:Serial.println("AIWA_RC_T501"); merusak; kasus PANASONIC:Serial.println("PANASONIC"); merusak; kasus DENON:Serial.println("DENON"); merusak; default:case UNKNOWN:Serial.println("UNKNOWN"); merusak; } } int learnCodeRead(int pinCode) { if (irrecv.decode(&results)) { pinCode =hasil.nilai; } mengembalikan kode pin; } void Konfirmasi() { int i; for(i=0; i<=20; i++) { digitalWrite(StatusPin, TINGGI); penundaan (50); digitalWrite(statusPin, RENDAH); penundaan (50); } digitalWrite(StatusPin, TINGGI); // Biarkan LED "Belajar" tinggi } void learn_Mode() { boolean goodCode; int saya, j; lokasi int; int pin[6] ={12,11,10,9,8,7}; // Mulai mendengarkan masing-masing secara berurutan if (first_iteration) { Serial.println(); Serial.println("Masuk mode belajar"); Serial.println(); } intIRCode =0; lokasi =0; goodCode =benar; j =0; while ((GoodCode=true) dan (j<=5)) { for(i=0; i<=25; i++) { digitalWrite(pin[j], HIGH); penundaan (200); intIRCode =learnCodeRead(intIRCode); digitalWrite(pin[j], RENDAH); penundaan (200); intIRCode =learnCodeRead(intIRCode); goodCode =((intIRCode !=repeatKeyPress) dan (intIRCode !=0)); if (kode yang baik) { i=30; // Trik untuk keluar dari loop karena 'break' // tidak bekerja pada loop } irrecv.resume(); // Mulai mendengarkan lagi } goodCode =(intIRCode !=repeatKeyPress dan intIRCode !=0); if (Kode baik) { if (j==0) { tebakTipe(); } Serial.print("Menulis ke Lokasi EEPROM ");Serial.print(lokasi); Serial.print(" Kode IR =");Serial.println(intIRCode,HEX); EEPROMWritelong(lokasi, intIRCode); lokasi =lokasi + 4; j++; Mengonfirmasi(); intIRCode =0; irrecv.resume(); // Mulai mendengarkan lagi } } Serial.println(); Serial.println("Kembalikan Arduino ke mode run."); while (digitalRead(switchPin) ==HIGH) { digitalWrite(statusPin, HIGH); penundaan (1000); digitalWrite(statusPin, RENDAH); penundaan (1000); } Serial.println(); Serial.println("Kembali ke mode run."); // Mungkin tidak perlu terlalu drastis di sini, tapi // Ini adalah "reset" untuk memastikan kita keluar dari mode belajar // dan restart dengan benar. Ini *kemungkinan* OK untuk // menghapus 4 baris berikut. penundaan (50); Serial.flush(); penundaan (50); asm volatil("jmp 0"); } void run_Mode() { if (first_iteration) { Serial.println("Memasuki mode run"); } if (irrecv.decode(&results)) { if (results.value!=repeatKeyPress) { current_remote_code =results.value; Serial.print("Tekan tombol terdeteksi, kode IR ="); Serial.println(current_remote_code,HEX); if (current_remote_code ==remote_code_1) { togglestate1 =Flip_LED(PinOne,togglestate1); } else if (current_remote_code ==remote_code_2) { togglestate2 =Flip_LED(PinTwo,togglestate2); } else if (current_remote_code ==remote_code_3) { togglestate3 =Flip_LED(PinThree,togglestate3); } else if (current_remote_code ==remote_code_4) { togglestate4 =Flip_LED(PinFour,togglestate4); } else if (current_remote_code ==remote_code_5) { togglestate5 =Flip_LED(PinFive,togglestate5); } else if (current_remote_code ==remote_code_6) { togglestate6 =Flip_LED(PinSix,togglestate6); } else { Atur Ulang(); } } penundaan(500); // Digunakan untuk menghindari rangkaian data yang cepat // jika sebuah tombol ditekan. Memperlambat waktu respons // dengan memperkenalkan jeda dalam loop. irrecv.resume(); // Mulai mendengarkan lagi } } void setup() { first_iteration =true; int i,j,k; lokasi int; int dupeFlash[6] ={12,11,10,9,8,7}; // Pin nomor ke flash // jika duplikat ditemukan Serial.begin(9600); irrecv.enableIRIn(); // Aktifkan Penerima IR /* Bagian kode berikut tidak perlu mengatur ulang EEPROM. * Namun, beberapa NANO baru yang "tidak ada" muncul dengan EEPROM yang disetel * ke FFFFFFFF. Ini adalah kode yang dikirim oleh banyak IR Remote ketika * sebuah tombol ditekan. Sketsa ini memeriksa kode itu di beberapa tempat * dan itu tidak akan berfungsi dengan baik jika "kunci" diberi hex FFFFFFFF. Untuk * mencegah gotcha ini, kami memeriksa FFFFFFFF dan jika kami menemukannya, kami menetapkan * 6 lokasi utama ke kode Sony RM-YD104. Jika ini terjadi, kecuali Anda * menggunakan remote tertentu, Anda harus menjalankan sketsa dalam mode "belajar" * untuk menginisialisasinya. */// =============Mulai Arduino Baru =================boolean defaultToSony =false; long unsigned int IRCode =0; lokasi =0; for(i=0; i<=5; i++) { IRCode =EEPROMReadlong(lokasi); if (IRCode==repeatKeyPress) { defaultToSony =true; } lokasi =lokasi + 4; } if (defaultToSony) { Serial.println("HEX FFFFFFFF ditemukan di memori EEPROM. Kode pengaturan"); Serial.println("untuk remote Sony RM-YD104. Menjalankan mode 'belajar' sekarang"); Serial.println("disarankan kecuali itu remote yang Anda miliki."); EEPROMTulis panjang(0, 0x10); penundaan (50); EEPROMWritelong(4, 0x810); penundaan (50); EEPROMTulis panjang(8, 0x410); penundaan (50); EEPROMWritelong(12, 0xC10); penundaan (50); EEPROMTulis panjang(16, 0x210); penundaan (50); EEPROMWritelong(20, 0xA10); penundaan (50); } // =============Akhiri Arduino Baru ==================// Atur pin LED sebagai output pinMode(PinOne, OUTPUT); pinMode(PinDua, OUTPUT); pinMode(PinThree, OUTPUT); pinMode(PinFour, OUTPUT); pinMode(PinFive, OUTPUT); pinMode(PinSix, OUTPUT); Mengatur ulang(); // Mulailah dengan semuanya pinMode(statusPin, OUTPUT); pinMode(switchPin, INPUT); //Dapatkan kode dari Serial.println jarak jauh yang terakhir digunakan(); Serial.println("Membaca kode remote IR yang tersimpan . . . "); lokasi =0; for(j=0; j<=5; j++) { saveIRCodes[j] =EEPROMReadlong(lokasi); Serial.print("Membaca dari Lokasi EEPROM ");Serial.print(lokasi); Serial.print(" Kode IR =");Serial.println(savedIRCodes[j],HEX); lokasi =lokasi + 4; dupeCheck[j]=savedIRCodes[j]; // Simpan salinan untuk pemeriksaan duplikat } // Cari kode duplikat berurutan yang ditetapkan ke // keluaran. Kami tidak mencari duplikat keseluruhan karena // tidak mungkin terjadi. Pengalaman menunjukkan bahwa // selama pemrograman, kesalahan yang paling mungkin adalah menekan // tombol yang sama dua kali pada LED bacl-to-back. Jika duplikat // ditemukan, tunjukkan ini dengan mem-flash LED yang dicurigai. // Hanya ada 6 LED, jadi hanya perlu 21 perbandingan // untuk menemukan duplikat (6 + 5 + 4 + 3 + 2 + 1 =21). Bagian // ini dapat ditingkatkan untuk mencari duplikat dengan // mengurutkan array terlebih dahulu, dll. for (i =0; i <5 - 1; i++) { for (j =i + 1; j <6; j++ ) { if (dupeCheck[i] ==dupeCheck[j]) { Serial.println("Kode duplikat ditemukan. Sarankan untuk menjalankan kembali mode belajar"); for(k=0; k<=5; k++) { digitalWrite(dupeFlash[i],TINGGI); digitalWrite(dupeFlash[j],TINGGI); penundaan (1000); digitalWrite(dupeFlash[i],RENDAH); digitalWrite(dupeFlash[j],RENDAH); penundaan (1000); } } } } remote_code_1 =saveIRCodes[0]; remote_code_2 =saveIRCodes[1]; remote_code_3 =saveIRCodes[2]; remote_code_4 =saveIRCodes[3]; remote_code_5 =saveIRCodes[4]; remote_code_6 =saveIRCodes[5]; penundaan (1000); Serial.println("Kode yang disimpan dibaca."); Serial.println(); } void loop() { // Periksa apakah sakelar hidup atau mati. Jika aktif (dalam mode belajar) // switchPin HIGH:learnMode =(digitalRead(switchPin) ==HIGH); if (learnMode) { first_iteration =true; Mengatur ulang(); digitalWrite(statusPin, TINGGI); // Nyalakan LED mode belajar:learn_Mode(); Mengatur ulang(); first_iteration =salah; } else { digitalWrite(statusPin, RENDAH); // Matikan LED mode belajar:run_Mode(); first_iteration =salah; } }

Skema


Proses manufaktur

  1. Light-Emitting Diode (LED)
  2. Pemantauan Cuaca Jarak Jauh Menggunakan Raspberry Pi
  3. Raspberry Pi Universal Remote
  4. Monitor Detak Jantung Jarak Jauh
  5. Coffin Dance Melody
  6. Mengubah Ponsel Lama Anda menjadi Remote Switch
  7. Membuat Gambar Menggunakan Satu LED
  8. 8x Pencahayaan LED dengan Suara
  9. 5 Faktor Teratas untuk Memilih Platform Kontrol
  10. Cara Membuang Mesin Lama dengan Aman