Mostrando entradas con la etiqueta remote. Mostrar todas las entradas
Mostrando entradas con la etiqueta remote. Mostrar todas las entradas

domingo, 17 de marzo de 2024

Coche remoto por Módulo 433MHz

Página principal

Coche remoto por
Módulo 433MHz


Continuando con mi anterior montaje, me dí cuenta que en algunas ocasiones cuando perdía contacto visual con el vehículo, también se perdía el contron.
Esto era normal al ser mediante IR, por lo que me puse a solucionarlo mediante módulos de RF de 433MHz.

Módulos RF



Emisor.



Receptor.

Al contrario que con los IR , la señal de RF llega bastante más lejos, traspasando paredes.
El utilizar RF , se producen interferencia entre los motores de los servos y la señal de RF, y lo mejor es utilizar diferente alimentación, pero eso sería estudio de otro artículo.
El mayor problema que he tenido, son las librerías.
Unas son incompatibles con otras, otras funcionan en algunas versiones de arduino y otras no.
Como ejemplo, la librería Servo es incompatible con la librería VirtualWire.
La solución es incluir las librerías modificadas que utilizo yo.

Programa Arduino.
Librerías utilizadas.

Video

En un artículo anterior había probado la cámara ESP-CAM , y se me ocurrió colocársela al vehículo para manejarlo a distancia.
Vuelve a ocurrir lo mismo con las interferencia de la alimentación, si la conecto directamente  a los 5V del arduino, algunas veces funciona y otras no.
Para eliminar problemas en las pruebas, la alimento mediante una Power-BANK.



Video cámara vehículo



Saludos.
Juan Galaz


Bibliografía:

14/05/2014 - Arduino - Reloj con medidor de temperatura y humedad externa.433MHz - MX-05V. arnote
07/05/2014 - Arduino - Receptor temperatura y humedad-433MHz-MX-05V.   ardurx
06/05/2014 - Arduino-Transmisor temperatura y humedad-433MHz-MX-FS-03V. ar433



 

sábado, 16 de marzo de 2024

Coche remoto por Infrarrojos

 

Página principal

Coche remoto por
Infrarrojos


El otro día me encontré en el Rastro un Freaduino . Es un arduino UNO con algunas buena modificaciones, junto con varios accesorios, un vehículo movido por servos modificados, y un conjunto de sensores.
https://forum.arduino.cc/t/review-de-freaduino-uno-placa-compatible-con-el-arduino-uno/168846

Si tienes un servo y quieres utilizarlo para giro continuo, existe numerosos tutoriales que te explican como hacerlo.
El resumen de la modificación que debes hacer es:
-Quitar el potenciómetro y sustituirlo por dos resistencias iguales (10K).
-Eliminar el tope que existe en uno de los rodamientos para que gire 360 º.
La prueba sencilla que se me ocurrió  fue hacer un coche teledirigido mediante un mando a distancia de televisión, en mi caso LG.

Lo primero es tener el receptor de IR, yo tengo muchos de reciclaje.



Las pruebas se hicieron en el nano, y como todo funcionaba bien lo pase al Freaduino.


El montaje en Freaduino.

El mayor problema que he tenido, son las librerías.
Unas son incompatibles con otras, otras funcionan en algunas versiones de arduino y otras no.
/*
You have to go into the .h and .cpp files and change "WProgram.h" to Arduino.h
WProgram.h: No such file or directory
*/
/*
Las librerías  "IRremote" y "RobotIRremote" son incompatibles
Tu tienes que instalar "IRremote" y desinstalar "RobotIRremote".
*/

La solución es incluir las librerías modificadas que utilizo yo.

Programa Arduino.
Librerías utilizadas.

Video


Saludos.
Juan Galaz


Bibliografía:


https://www.youtube.com/watch?app=desktop&v=Ux1nzNDKxoA
https://www.youtube.com/watch?v=4C8Y3caU4y0
Tren IR
Coche RC
SERVO

miércoles, 16 de octubre de 2019

Arduino - COPIADOR CÓDIGOS INFRARROJOS

Página principal

Arduino

COPIADOR CÓDIGOS INFRARROJOS


En el anteriores artículos había realizado un receptor y emisor de infrarrojos  icur.html .
En estos artículos había utilizado la librería Iremote. Para este montaje no utilizo ninguna librería.
En este montaje realizo una copia de la señal digital, sin entender el código a que pertenece.

Voy a intentar explicar el funcionamiento del circuito.
-Se pulsa la pulsador 16 (es la tecla de memoria).
-Parpadea el Led testigo (PIN 13) esperando que se pulse el pulsador a memorizar.
-Se queda fijo el Led testigo, esperando a la señal infrarroja de cualquier mando.
-Cuando se pulsa la tecla de un mando cualquiera, empieza a copiar los códigos a la memoria EEPROM del arduino.
-Terminada la copia del código, el Led testigo se apaga parpadeando rápidamente.
-Si queremos emitir el código memorizado en el pulsador, solo tenemos que pulsarlo.

Debido a la capacidad reducida de la memoria EEPROM del arduino (1K), tenemos restringido la cantidad de códigos copiados.
Si hubiésemos utilizado la librería Iremore, hubiésemos podido memorizar cientos de teclas, pero como copiamos las formas de las señales digitales, necesitamos mucha mas memoria.
Para el protocolo RC5 se necesitan alrededor de 66 bytes, por lo cual se podrían almacenar 15 memorias.
Para otros protocolos  como el NEC , he utilizado 100 bytes, por lo cual se podrían almacenar 10 memorias.
Si por alguna razón queríamos mas memoria, deberíamos emplear memoria externa en el bus I2C, como las memorias 24LCxx.


Esquema del circuito.


Forma de las señales que transmite el circuito.
Se puede observar la seña digital que tiene que almacenarse en la memoria EEPROM.
Señales obtenidas con el programa PulseView en Debian10 y el osciloscopio
Hantek6022BL  

Como tenemos restringido el tamaño de la memoria (100 bytes), debemos inventar algún método para almacenar 100 unsigned int (200 bytes) en 100 bytes.
No se si ya existe, pero sobre la marcha me he invente para almacenar un 
unsigned int  en un byte, perdiendo algo de precisión.
Cuando nos fijamos en el protocolo NEC existen mucha variación entre diferentes tiempo entre pulsos, desde 0.56 mS hasta los 110 mS.
Almacenar estos datos en un byte sería imposible, por lo cual empleamos un truco.
Utilizar los bits D7 y D6 como nivel de multiplicación de los restantes bits D5-D0.


Valores para un protocolo NEC.

El resultado es muy bueno, un error menor de un 5%, para un ahorro de datos de un 50%.
Desde luego es la parte del programa del que me siento mas orgulloso.

Para obtener una frecuencia de 40 KHz he utilizado el contador 2 de ATMEGA328 con los siguientes parámetros:

// Clear Timer on Compare Match (CTC) Mode
  bitWrite(TCCR2A, WGM20, 0);
  bitWrite(TCCR2A, WGM21, 1);
  bitWrite(TCCR2B, WGM22, 0);
  //  bitWrite(TCCR2B, WGM23, 0);

  // Toggle OC1A and OC1B on Compare Match.
  bitWrite(TCCR2A, COM2A0, 1);
  bitWrite(TCCR2A, COM2A1, 0);
  bitWrite(TCCR2A, COM2B0, 1);
  bitWrite(TCCR2A, COM2B1, 0);

  // No prescaling
  bitWrite(TCCR2B, CS20, 1);
  bitWrite(TCCR2B, CS21, 0);
  bitWrite(TCCR2B, CS22, 0);

  OCR2A = 199;
  OCR2B = 199;
El valor de 199 viene de la formula:

x=(8000000/40000)-1=199

La salida de la señal 40000KHz se efectúa por el pin D3 del arduino.

Como la medida tiempo no es demasiado critico en este montaje, a nivel de programación no me he esforzado mucho en la optimización del código.
Existen muchas forma de optimizar, como por ejemplo colocar frecuON(void) y frecuOFF(void) en forma de #define, lo hace mucho mas rápido.




Circuito montado.


Detalle del circuito montado.

Lo bueno de este montaje es que se pueden mezclar diferentes tipos de protocolos en diferentes teclas.
Por ejemplo, Philips (RC5) y LG (NEC).
Me ha sorprendido lo bien que funciona este copiador de códigos infrarrojos.


PROGRAMA


Espero que les guste este montaje.

Saludos.
Juan Galaz


Bibliografía:
icur.html
ar_irb.html        ar_ira.html        ar_ir.html
https://en.wikipedia.org/wiki/RC-5
https://naylampmechatronics.com/blog/36_Tutorial-Arduino-y-control-remoto-Infrarrojo.html
https://www.sbprojects.net/knowledge/ir/rc5.php
http://lirc-remotes.sourceforge.net/
http://www.hifi-remote.com/sony/Sony_tv.htm