miércoles, 28 de febrero de 2018

Mando a distancia para puerta III. Modo dialogo con lista.



Mando a distancia para puerta
III
Modo dialogo con lista
Arduino



En los dos anteriores montajes había realizado un mando a distancia con diferente modos de programa.
El primero mandaba los códigos directamente, en el segundo realizaba una negociación entre llave y puerta basada en una formula.
Para este montaje utilizo el mismo circuito, pero ahora negocia los códigos mediante una lista almacenada tanto en la llave y la puerta.
La lista  debe ser la misma tanto en la llave como en la puerta.


Esquema de puerta y mando.


Circuito de la puerta y de la llave.


Diagrama del dialogo entre llave y puerta.

La lista de códigos está almacenada en 2 arrays.
Como no me quería complicar mucho, solo he utilizado 2 arrays de 16 números.
Para hacerlo algo más seguro deberíamos haber creado las arrays  de 256 números.
    byte LISTAcodigo0[15]={12,9,5,11,8,6,13,4,1,0,7,2,14,3,10};
    byte LISTAcodigo1[15]={13,0,5,2,11,9,4,12,6,1,8,10,7,14,3};

El numero de orden en el array  se sacan del tiempo de funcionamiento del arduino.
     time = millis();
    x=time & 0x0F;
    y= 0x0F & (time>>8);

La variable CODIGO2 se saca de los micro-interruptores , como es normal deberá ser el mismo en la llave y en la puerta.
Esta variable es utilizada para modificar el numero de orden.
      x=(x+CODIGO2) & 0x0F;   
      x=LISTAcodigo0[x];
     
      y=(y+CODIGO2) & 0x0F;
      y=LISTAcodigo1[y];

Información de la llave
=======================

Información de la puerta
========================

___LLAVE Lista___12
Pulsado Boton de Apertura
Respuesta a la pregunta
Pulsado Boton de Apertura
Respuesta a la pregunta
___LLAVE Lista___4
Pulsado Boton de Apertura
Respuesta a la pregunta
___LLAVE Lista___12
Pulsado Boton de Apertura
Respuesta a la pregunta

____Puerta Lista____12
Peticion de apertura
CORRECTO
Peticion de apertura
CORRECTO
Peticion de apertura
ERROR
Peticion de apertura
CORRECTO



Tampoco me he metido mucho en asegurar la seguridad ante la fuerza bruta, solo he metido retardos para hacerlo más difícil.
En lo personal prefiero el modo de códigos por fórmula, pero este método es otro mas, y debía realizarlo.

En todo los montajes se podría realizar un registro de entrada y de salida, y horas. Pero eso es otra historia...

PROGRAMA

Hasta pronto.
Juan Galaz

Mando a distancia para puerta II . Modo dialogo con formula .



Mando a distancia para puerta
II
Modo dialogo con formula
Arduino



En el anterior montaje Mando a distancia para puerta , había realizado un mando a distancia en el cual se mandaba los códigos sin ninguna seguridad.
Cualquier que se dedique a escuchar en el canal en el que transmite el mando, podrá descubrir el código.
En este montaje utilizamos el mismo circuito a nivel de llave y de puerta que el anterior, pero el programa se cambia radicalmente.
Ahora se produce un diálogo entre la llave y la puerta, impidiendo que la escucha pueda descubrir el código, los códigos se cambian en cada petición.



Esquema de puerta y mando.


Diagrama del dialogo entre llave y puerta.

Los códigos de pregunta en la puerta se sacan del tiempo de funcionamiento del arduino.
     time = millis();
    x=time & 0xFF;
    y= 0xFF & (time>>8);

Los códigos de respuesta se sacan de una fórmula.
      codigo=x*y*CODIGO2+CODIGO2;
     x= codigo & 0xFF;
     y= codigo>>8 & 0xFF;
La formula se puede cambiar a gusto del programador para hacerla aún más segura.
Esta formula debe ser la misma en la llave y en la puerta.
La variable CODIGO2 se saca de los micro-interruptores , como es normal deberá ser el mismo en la llave y en la puerta.

Información de la llave
=======================

Información de la puerta
========================

__LLAVE Código___
4
Pulsado Botón de Apertura
Respuesta a la pregunta
___LLAVE Código___
12
Pulsado Botón de Apertura
Respuesta a la pregunta

Petición de apertura
Código pregunta 173  47
Respuesta 16  127
Respuesta solicitada 48  125
ERROR
Petición de apertura
Bodigo pregunta 64  98
Respuesta 12  38
Respuesta solicitada 12  38
CORRECTO

Como podemos ver este modo es mucho más seguro que el mandar el código simplemente.
Aseguramos de que si hay alguien escuchando en el canal, no le servirá de nada.
Tampoco me he metido mucho en asegurar la seguridad por fuerza bruta, solo he metido retardos para hacerlo más difícil.

PROGRAMA

Hasta pronto.
Juan Galaz

martes, 27 de febrero de 2018

Mando a distancia para puerta . Modo Simple.



Mando a distancia para puerta 1
Modo Simple
Arduino



Aprovechando que tenía montado el módulo nRF24L01 junto con el arduino, he decidido hacer un mando a distancia para abrir una puerta.
Voy a realizar 3 modelos de mando, dependiendo la seguridad. Para este montaje he elegido el modo Simple.
En el modo simple se manda el código sin ninguna seguridad. Cualquier que se dedique a escuchar en el canal en el que transmite el mando, podrá descubrir el código. Aunque parezca que es poco seguro, la mayoría de los mandos de cualquier garaje funciona de este modo.
La mayoría de los mando de garaje trabajan sobre una frecuencia de 433MHz, los mas nuevos sobre 900MHz. En nuestro caso el nRF24L01 funciona a 2.4MHz.
Es fácil duplicar los mandos, solo cambiando los microinterruptores  conseguimos tener otro mando para otro coche.
Es lo bueno y lo malo que tienen, bueno el poder ser baratos y fáciles de configurar, y malo al ser poco seguros.


Esquema del mando.


Circuito del mando.


Esquema de la puerta.


Circuito de la puerta.

El circuito funciona de la siguiente manera:
  • El circuito de la puerta se encuentra en modo escucha en todo momento.
  • La llave emite en el canal 50 (donde está escuchado el circuito de la puerta)  los código de absceso. En nuestro caso dos bytes  7 y 215 , además de un tercer byte que se codifica en los 4 microinterruptores.
  • El circuito de la puerta compara los códigos que emite la llave con los códigos almacenados. Si coinciden los códigos, se  activa el pin 2 del arduino durante 2 segundos (relé de la puerta).
El circuito es simple y sencillo, fácil de realizar y funciona bastante bien.
Como podemos observar en el circuito no utilizo microinterruptores, utilizo puentes con cables que se conectan a Vcc para 1, y a GND para 0.


PROGRAMA

Hasta pronto.
Juan Galaz

viernes, 23 de febrero de 2018

Sensores de temperatura de 2 módulos ds18B20 y nRF24L01

Página principal

Sensor de temperatura
2 módulos
ds18B20
Arduino y nRF24L01

xsetaseta@gmail.com

Hasta ahora solo había utilizado el nRF24L01 como emisor en un módulo y receptor en otro módulo.
En este montaje el mismo módulo nRF24L01 hace de emisor y receptor, gestionándose automáticamente.
Para probar el cambio de emisor/receptor se me ocurrió hacer dos circuitos detectores de temperatura que emiten a una base de sensores.
Los sensores de temperatura solo responde a petición de la base de sensores.
El funcionamiento es el siguiente:
  • -La base de sensores emite una petición de temperatura a un sensor determinado (en este caso solo hay 2 sensores, se pueden implementar hasta 255).
  • -La base de sensores se pone en escucha esperando la respuesta del sensor.
  • -Todos los sensores escuchan la petición de la base, pero solo el numero de sensor al que ha llamado responde.
  • -El sensor al que ha preguntado se pone en modo emisión, y manda la temperatura a la base.
  • -La base escucha al sensor que emite la temperatura y nos lo manda a través del puerto serie.
La petición a cada sensor se hace cada 8 segundos aproximadamente.
Cada sensor lee la temperatura del ds18B20  cada 10  segundos aproximadamente.

La estructura de los datos es la siguiente:
Base de sensores


Emisor
Receptor
Petición
0 (Base sensores) 1/2
1 (temperatura)

Sensor




Emisor
Receptor
Respuesta
Dato1
Dato2
1/2
0 (Base sensores)
1 (temperatura)



Aunque según vemos en el programa se envían 7 datos, solo se utilizan 5.
Los otros dos se pueden emplear para control de errores u otros datos extras.




Esquema de la base de detectores. (Realizado con https://easyeda.com/ )

Circuito de la base de sensores.





Esquema de los módulos emisores. (Realizado con https://easyeda.com/ )

Sensor 1

Sensor2. Alimentado con una PowerBank y con un extensor del ds18B20

Para diferenciar el sensor 1 del sensor 2, utilizo un puente en el pin D3 del arduino, seleccionando Sensor1 a masa y Sensor2 a Vcc.

Datos proporcionados por la base de sensores.
__Base Sensores__
SENSOR_2   18.9 C
SENSOR_1   19.5 C
SENSOR_2   18.9 C
SENSOR_1   19.5 C
SENSOR_2   18.9 C
SENSOR_1   19.5 C
SENSOR_2   18.9 C
SENSOR_1   19.5 C

Todo el montaje está realizado para probar la comunicación entre los diferentes módulos nRF24L01.
En ningún momento se pensó en la autonomía de los módulos, pues siempre están activos 32mA.  (62 horas con una powerBank de 2000mAh)
El nRF24L01 se puede poner en reposo lo mismo que el arduino, pudiendo reducirse el consumo a 1mA, con lo cual aumentaría la autonomía a 80 días.
Pero para hacer esto deberíamos cambiar la concepción del circuito y del programa, pero esto es otra historia.


PROGRAMA

Hasta pronto.
Juan Galaz

viernes, 16 de febrero de 2018

Control de dos servos a distancia mediante Arduino y nRF24L01

Página principal

Control de dos servos a distancia mediante
Arduino y nRF24L01

xsetaseta@gmail.com

De mi anterior montaje carreco.html tenía montado todo el circuito en el mando emisor.
Tenía un mando reutilizado de un helicóptero que tenía averiado.
No tenía que tocar nada en la parte del emisor, ni siquiera debía modificar el programa.
En el lado del receptor solo debo añadir 2 servos y cambiar un poco el programa.

Esquema del emisor. (Realizado con https://easyeda.com/ )


Circuito emisor montado con el mando reciclado.




Esquema del receptor.



Fotos del receptor montado.

Patillas de los distintos tipos de servos.

Debemos tener en cuenta que los servo tienen bobinas y que producen interferencias y alto consumo en picos, por lo cual deberemos alimentar todo desde una fuente algo estable.
Los datos se reciben cada 100 miliSegundos (algo menos, no es exacto) ,alrededor de 10 transmisiones de datos  por segundo.
Por hacerlo simple y sin muchas complicaciones, no se ha realizado ni medias de datos, ni detección de errores.
El que lo quiera hacer mas seguro que modifique el programa, es fácil, no hay que dar todo hecho.
También se puede utilizar los módulos con antena y mayor potencia que pueden alcanzar hasta 1Km en campo abierto. Si utilizamos mas potencia deberemos plantearnos es alimentar el nrf24 de otro sitio que no sea los 3.3V del arduino.
Hace dos años realice un circuito muy parecido rf24l01.html , utilice otra librería y otro programa, os puede servir de guía.

VIDEO DE FUNCIONAMIENTO

PROGRAMA

Hasta pronto.
Juan Galaz


BIBLIOGRAFÍA

rf24l01.html
https://www.prometec.net/servos/
https://github.com/maniacbug/RF24
https://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
http://openhardware.pe/transceptores-nrf24l01-2-4ghz-radio-wireless-how-to/
http://cursos.olimex.cl/tutoriales/
http://www.electroensaimada.com/servomotor.html
http://arduino.cl/servo-motor-con-arduino/


miércoles, 14 de febrero de 2018

Coche teledirigido mando 3 ejes nRF24L01 L293D Arduino_ Versión 2

Página principal

Coche teledirigido
mando 3 ejes
nRF24L01
L293D
Arduino

xsetaseta@gmail.com

Este montaje es la continuación del anterior montaje carreci.html .
En este montaje añado un mando reutilizado de un helicóptero que tenía averiado.
Para el montaje he utilizado los 3 potenciómetros  y el conmutador de diferentes canales.
El primer potenciómetro es utilizado para la velocidad.
Los otros dos potenciómetros los utilizo como manejo de la dirección.
El conmutador selecciona la velocidad de rotación del vehículo.
Pongo en conocimiento que cada mando de helicópteros es diferente, por lo cual cada uno deberá modificar internamente el mando, cortando pista o lo que sea necesario para que se pueda reutilizar.



Esquema del emisor.

A nivel de programa se ha realizado bastantes cambios.
Se digitalizan los 3 potenciómetros , y se chequean los diferentes interruptores.
Ahora se mandan 7 bytes con los datos digitalizados.
1-SENSOR0    Eje1
2-SENSOR1    Eje2
3-SENSOR2    Velocidad
4-SENSOR3    (nada , reservado)
5-ENTRADAS    Las diferentes entradas en modo bit

El resto de bytes no se utilizan.

Los datos se mandan aproximadamente cada 100 miliSegundos , (algo menos de 10 datos por segundo)

Emisor con el mando reciclado.



Esquema del receptor.

En el receptor he trabajado mas, hay bastantes cosas que he modificado.
En primer lugar veía que había bastantes problemas con la alimentación de los motores. Por lo que decidí alimentarlo a través de dos baterías de 3,7V colocadas en serie y colocar un regulador de tensión 7805 para estabilizar la tensión a 5V.
Uno de los mayores problemas que tuve era que al alimentar los motores al arrancar, se necesitaba un impulso de energía extra.
La solución aunque parezca extraña fue mediante programa.
if(anterior==0)
             {
               analogWrite(9,255);
               analogWrite(10,255);
               anterior=1;
               delay(90);
             }

El programa detecta si se encuentra parado el vehículo, y en ese caso aplica la máxima tensión durante 90 miliSegundos, el coche rompe la inercia de parado,  y luego aplica la tensión normal para mantener la velocidad. Esto fue un gran descubrimiento para el buen funcionamiento del vehículo.

Como quería controlar un poco la dirección cuando estaba en movimiento. Reduje un poco la tensión en una de las ruedas cuando movía el mando, consiguiendo que el vehículo girara hacia el lado que quería.

El giro del vehículo desde parado lo he configurado para que se efectué a saltos, era la mejor forma de controlarlo sin que se pasase girando continuamente. En uno de los interruptores  seleccionamos la velocidad de giro entre 100mS y 50mS.

Debemos tener presente que el receptor tiene dos motores de escobilla que producen bastantes interferencia, así como consumos puntuales en el arranque. Por lo que recomiendo que se alimente independientemente la parte de los motores de la parte del arduino.

Este montaje es un mero montaje de prácticas que  funciona.
Para un montaje mas ambicioso deberíamos saber la alimentación de las baterías  6V o 12 V, un regulador adecuado con pocas perdidas. Colocar un regulador para los módulos emisor y transmisor. También utilizar los módulos con antena y mayor potencia que pueden alcanzar hasta 1Km en campo abierto.
Espero que le guste a alguien este montaje, o que le pueda proporcionar ideas.

PROGRAMA

Saludos.
Juan Galaz


Bibliografía:

Mando a distancia de 4 reles (relay)
Arduino-Android-Bluetooth-hc05-Manejando un coche-mediante nRF24
Coche teledirigido