Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Control remoto de TV a batería con carcasa impresa en 3D

Componentes y suministros

Arduino UNO
× 1
batería de 9V (genérica)
× 1
Conector de conector de barril de 9 V
× 1
Transmisor de infrarrojos (genérico)
× 1
Tornillo de máquina, M3
× 4
Tornillo de máquina, M2.5
× 3
Tuerca M3
× 4
Tuerca M2.5
× 3
Resistencia de orificio pasante, 47 ohm
× 2
Tablero de prototipos, 2,54 mm
× 1
Botón pulsador de PCB
× 6
Male-Header 36 Position 1 Row - Long (0.1 ")
× 1

Herramientas y máquinas necesarias

Impresora 3D (genérica)
Soldador (genérico)
Alambre de soldadura, sin plomo
Filamento PLA, diámetro 1,75 mm

Acerca de este proyecto

Introducción

El control remoto del televisor de mi novia dejó de funcionar. Podría haber comprado un reemplazo barato en una tienda cercana, pero luego pensó:los dos somos ingenieros, ¡hagamos el nuestro juntos!

Como somos bastante complementarios en nuestras habilidades, esta fue una forma diferente, pero divertida de pasar un tiempo durante el encierro y nos dio la oportunidad de aprender un poco sobre cómo funciona esta tecnología cotidiana.

Ah, y tener una pequeña impresora 3D en casa también influyó.

Cómo funciona

En primer lugar, como queríamos hacer un diseño simple confiando en el Arduino UNO, evaluamos la cantidad mínima de comandos que necesitábamos para operar nuestro televisor. Consideramos que 6 comandos eran suficientes:alternar ON / OFF, selección de fuente, Ch +, Ch-, Vol +, Vol-.

Lectura de botones

Para evitar el uso de resistencias adicionales, el diseño se basa en las resistencias pull-up internas del Arduino. Si el control remoto no está en modo de suspensión (ver más abajo), el estado de cada botón se consulta en cada ciclo de bucle. Para evitar contar múltiples aciertos, se implementa una rutina de eliminación de rebotes simple explotando el millis () función.

Envío de señales de infrarrojos

La comunicación por infrarrojos es gestionada por IRremote.h biblioteca (felicitaciones a los codificadores!). Todo lo que teníamos que hacer era configurar el protocolo para nuestro televisor (diferentes fabricantes han desarrollado sus propios protocolos) y buscar en Google los códigos en HEX de los diferentes comandos que queríamos usar y asociarlos a los botones. En lo que respecta al diseño del circuito, para que los comandos de la biblioteca controlen eficazmente el LED IR, este debe estar conectado al pin3 del Arduino UNO.

Actualmente, el código está escrito para tres tipos diferentes de TV, seleccionables comentando / descomentando un #define directiva en la primera parte del código.

Batería ahorrando

Para reducir el consumo de energía, se implementan algunas estrategias, aprovechando los comandos del avr / sleep.h y avr / power.h bibliotecas.

Todos los periféricos e interfaces no utilizados (ADC, SPI, TWI, timer1, usart) se apagan en la rutina de configuración. El LED incorporado en el pin 13 de PWM también está apagado. También decidimos desoldar el LED de encendido del Arduino UNO, que de lo contrario siempre está encendido, aunque no es una operación recomendada.

Además, explotando el millis () , si no se presiona ninguno de los botones durante 5 segundos, el control remoto ingresa en un modo de suspensión, desde el cual se despierta cuando se presiona nuevamente el botón de Encendido / Apagado.

Cómo está construido

Electrónica montaje

Todo el circuito está incrustado en una placa de creación de prototipos, diseñada para encajar en los encabezados Arduino UNO. Mediante el uso de un soldador, los botones se soldaron considerando la posición final en el control remoto. En la parte inferior se soldaron en paralelo las dos resistencias de 47ohm, con el fin de lograr la corriente deseada a través del LED IR.

Con el cable de soldadura, se hicieron trazos en la placa de creación de prototipos para conectar los pines de los botones y el LED de infrarrojos a los encabezados de los pines macho.

De esta manera, la placa se asemeja a un escudo que se coloca en el Arduino UNO utilizando los encabezados de los pines, asegurando todas las conexiones correctas.

Recinto CAD y CAM

El gabinete fue diseñado para contener la batería, el ensamblaje de la placa de prototipos Arduino UNO +, exponiendo solo los botones en la parte superior y el LED de infrarrojos en la parte frontal.

El gabinete consta de dos partes, diseñadas con el software SolidWorks CAD, preprocesadas con el software de corte Ultimaker Cura y finalmente impresas en 3D en PLA utilizando una impresora 3D Anycubic Mega Zero.

El Arduino UNO se fija a la base mediante el uso de 3 tornillos M2.5, que encajan en los orificios de alineación extruidos desde el interior de la base. Una vez que el Arduino está asegurado, el LED de infrarrojos sobresaldrá fuera de la placa de creación de prototipos, para alinearlo con el orificio construido a propósito y mantenerlo en posición mientras se ensamblan las dos partes del gabinete, se agregan tres mini postes para evitar movimientos laterales de los cables LED. La batería se coloca a presión en un espacio dedicado.

La tapa está diseñada para exponer solo los botones y además de cada uno de ellos, se graba un símbolo en la tapa para mostrar la función de cada botón.

La base y la tapa del armario se ensamblan mediante 4 tornillos M3.

Código

  • TV_remote.ino
TV_remote.ino Arduino
 #include  #include  #include  // Definición de pin // Se debe conectar un LED IR al pin 3 de Arduino PWM # definir 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 // Solo pin 2 o 3 en Arduino Uno // Definición del modelo de TV // # define LG_TV // # define SAMSUNG_TV # define SONY_TV // Definición de códigos # 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 // Habilitar depuración // # definir DEBUG // IRsend irsend; // Crear objeto IR unsigned long debounce_time; unsigned long last_time; void setup () {analogWrite (13,0); // giro del led incorporado // noInterrupts (); // deshabilitar interrupciones // CLKPR =_BV (CLKPCE); // habilitar la configuración del preescalador de reloj // CLKPR =_BV (CLKPS0); // establece el reloj prescaler =2 -> 8 MHz // interrumpe (); pinMode (OnOff, INPUT_PULLUP); pinMode (Fuente, 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); // ahorro de energía power_adc_disable (); // deshabilita todos los ADC power_spi_disable (); // deshabilita SPI power_timer1_disable (); // Disbale timer 1 (0 es para millis (), 2 es para irremote.h) power_usart0_disable (); // deshabilita el serial power_twi_disable (); // deshabilita TWI #ifdef DEBUG Serial.begin (9600); #endif} void loop () {// verifica 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 (); // la última vez que se presionó un botón #ifdef DEBUG Serial.println ("OnOff"); #endif}} // comprobar Fuente if (! digitalRead (Source)) {debounce_time =millis (); while (millis () - debounce_time <40) {; } if (! digitalRead (Fuente)) {#ifdef LG_TV irsend.sendNEC (código_fuente, 32); #endif #ifdef SAMSUNG_TV irsend.sendSAMSUNG (código_fuente, 32); #endif #ifdef SONY_TV irsend.sendSony (código_fuente, 12); #endif last_time =millis (); // la última vez que se presionó un botón #ifdef DEBUG Serial.println ("Fuente"); #endif}} // comprobar 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 (); // la última vez que se presionó un botón #ifdef DEBUG Serial.println ("CH +"); #endif}} // comprobar 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 (); // la última vez que se presionó un botón #ifdef DEBUG Serial.println ("CH-"); #endif}} // comprobar 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 (); // la última vez que se presionó un botón #ifdef DEBUG Serial.println ("Vol +"); #endif}} // comprobar 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 (); // la última vez que se presionó un botón #ifdef DEBUG Serial.println ("Vol-"); #endif}} if (millis () - last_time> 5000) {// no se ha presionado un botón durante 10 s #ifdef DEBUG Serial.println ("Yendo a dormir ..."); #endif going_to_sleep (); // entrar en modo de reposo #ifdef DEBUG Serial.println ("Despertar ..."); #endif}} // Función del modo de suspensión:evitar going_to_sleep () {sleep_enable (); // habilita el modo de suspensión attachInterrupt (digitalPinToInterrupt (Interrupt_Pin), wake_up, LOW); // interrumpe para despertar -> configure Interrupt Pin como WIRED NOR !!! set_sleep_mode (SLEEP_MODE_PWR_DOWN); // modo de reposo completo sleep_cpu (); // activar el modo de reposo} // Función de despertar void wake_up () {sleep_disable (); // deshabilita el modo de suspensión detachInterrupt (digitalPinToInterrupt (Interrupt_Pin)); // eliminar la interrupción} 

Piezas y carcasas personalizadas

Esquemas

remote_sketch_r4f8a47oWX.fz

Proceso de manufactura

  1. Control de acceso con QR, RFID y verificación de temperatura
  2. Uso del control remoto por infrarrojos con Raspberry Pi sin LIRC
  3. PiCy - ¡El diminuto robot con tecnología Raspberry Pi!
  4. Juego de giroscopio Arduino con MPU-6050
  5. Cámara de seguridad Discord con ESP32
  6. Controlar el aceptador de monedas con Arduino
  7. Unopad - Controlador MIDI Arduino con Ableton
  8. ¡Arduino con Bluetooth para controlar un LED!
  9. Sensor de obstáculos simple con Arduino
  10. Torno con CNC
  11. 5 ventajas del control remoto de la producción