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

domingo, 24 de diciembre de 2017

Wifi no funciona en dispositivos USB en DEBIAN 9

Wifi no funciona en dispositivos USB en DEBIAN 9


Llevo usando Debian durante muchos años, y el otro día después de instalar Debian 9.3 no funcionaban los adaptadores externos de USB Wifi.
El caso que se podían ver todas los puntos de acceso ( las redes de alrededor) , pero cuando das para conectar e introducir la contraseña nunca llega a conectar.
Como había instalado antes las versiones 9.0  - 9.1 y 9.2 y las tenía aún en particiones, probé si se conectaba, y nada.
También por si las moscas probé en Debian 8 , y se conectaba perfectamente.
Tengo una colección de adaptadores wifi, y en todos pasa lo mismo, por lo cual es un error del propio Debian 9.
Como curiosidad, en ordenadores que tienen el adaptador wifi integrado (portátiles),  se conecta perfectamente. Pero si a ese mismo ordenador pinchas el adaptador wifi USB, para probarlo no se conecta con el adaptador pinchado.

Mirando por internet encontré la solución:

Añadir en /etc/NetworkManager/NetworkManager.conf 
 
[device]
wifi.scan-rand-mac-address=no


Hago reiniciar las redes con:

/etc/init.d/network-manager restart
/etc/init.d/networking restart

Ahora funciona, ya puedo probar todos mis adaptadores USB-WIFI

Saludos
JUAN

miércoles, 13 de diciembre de 2017

Coche teledirigido con fpv - nRF24L01 - L293D - Arduino

Página principal


Coche teledirigido con fpv 
nRF24L01
L293D
Arduino

xsetaseta@gmail.com

En este montaje sustituyo los relés del anterior montaje por el CI L293D. De la misma forma que comente en el anterior montaje, este montaje es una continuación del montaje  autofel.html , en el cual manejaba el dispositivo mediante un móvil android.
El utilizar un nRF24L01 proporciona la posibilidad de utilizar el módulo con mas potencia, llegando a poder controlarlo a mas de 700m en visión directa.
Añado además dos resistencia variable para regular la velocidad y la dirección.



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


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


Circuito emisor montado.
Si queremos ampliar el radio de acción deberíamos emplear el módulo con antena.




Circuito receptor montado.
Podemos observar la doble alimentación del receptor.
Esto es debido a la multitud de interferencias que genera el circuito de los motores en el circuito receptor.
Se podría haber evitado la doble alimentación mediante un circuito regulador y varios filtros, pero como este circuito es un prototipo lo he dejado así.


Detalle del L293D.

El utilizar el L293D como regulador de velocidad de motores mediante el cambio de ancho de pulso, no es un modo demasiado preciso en este tipo de motores.
Para regular la velocidad hubiese sido mejor emplear MOSFET , pero este circuito es un prototipo y no he querido complicarlo mas.


PROGRAMA


Como curiosidad, he realizado los esquemas mediante la página web https://easyeda.com/ . Es curioso como se puede crear esquemas eléctricos mediante el navegador, además tiene bastantes componentes. Les recomiendo probar esta excelente página web.
Espero que le guste a alguien este montaje, o que pueda proporcionar ideas.

Saludos.
Juan Galaz


Bibliografía:

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

martes, 28 de noviembre de 2017

Coche teledirigido con fpv - nRF24L01 - Arduino

Página principal



Coche teledirigido con fpv 
nRF24L01
Arduino

xsetaseta@gmail.com

En este montaje mezclo varios montajes anteriores, Mando a distancia de 4 reles (relay)Arduino-Android-Bluetooth-hc05-Manejando un coche-mediante nRF24 .
Además he incorporado un móvil android a modo de fpv, utilizando la aplicación  .IP Webcam ( Pavel Khlebovich ).
Con todo lo anterior conseguimos un coche con mando a distancia que además podemos ver en fpv en nuestro navegador.
Para el control de los motores utilizamos relés. Tienen pros y contras, la mayor ventaja es poder controlar motores de hasta 220V, y el aislamiento eléctrico. Las contras son varias, la principal es el desgaste del propio relé al utilizarlo muchas veces, además de no poder controlar la velocidad de los motores.


Emisor.


Montaje del emisor




Montaje del receptor



Conexionado de los motores.


Conjunto montado.


Como no tengo ninguna cámara para hacer fpv, una forma fácil de hacer fpv es utilizar un móvil a modo de cámara y ver la imagen en el ordenador.
Existen bastantes programas para transformar un móvil en una webcam IP , el que me ha funcionado mejor es .IP Webcam ( Pavel Khlebovich ).
Tiene bastantes opciones que se pueden configurar, además hasta puede tomar fotos y videos. Existe tambien la versión de pago, pero para lo que hemos hecho nos sirve la versión gratuita.

Visión de la cámara IP.




VIDEO DE FUNCIONAMIENTO

Programa

Como el nRF24  funciona a 2.4GHz y la red Wifi también funciona a esa frecuencia, puede ocurrir que esporádicamente  se puede perder el control.
Ante este problema y para evitar posibles accidente, el coche se queda parado si no recibe señal después de 100mS desde la última orden.
Como se puede ver en la imagen utilizo doble fuente de alimentación, para el arduino y para los motores. Se puede usar una sola, cada uno que pruebe.

Como se puede ver en las imágenes  existen dos diodos, y alguno dirá para que sirven.
El nRF24 puede llegar a consumir hasta 28mA, está dentro del rango que proporciona el arduino en el ping 3.3V, pero si colocamos un nRF24 con antena que proporciona mas alcance, el consumo aumenta y puede provocar el mal funcionamiento del montaje.
Existen dos opciones, utilizar un alimentador externo de 3.3V, o emplear un viejo truco de electrónicos, el utilizar la caída de tensión (0.7V) de los diodos de silicio. He empleado dos diodos en serie que producen una caída de tensión de 1,4V que restados a los 5V del arduino nos proporciona una tensión de 3.6V con la que podemos alimentar el módulo. Normalmente este tipo de módulos tiene una cierta tolerancia en cuanto a la alimentación, el que no se quiera arriesgar que utilice otro diodo en serie, bajando de esta forma la alimentación a 2.9V. He colocado un condensador en los 3.6V para aplanar la alimentación.
Recordar que debéis colocar un condensador de 16uF o mas en el nRF24, en muchos módulos falla por ese motivo.

El circuito emisor se puede alimentar a baterías de 3.6V. Entonces  debéis alimentar directamente el módulo nRF24 a los 3.6V.
El módulo nRF24 funciona con tensiones entre 2V y 3.6V.

Espero que le guste a alguien este montaje, o que pueda proporcionar ideas.

Saludos.
Juan Galaz


Bibliografía:

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


jueves, 9 de noviembre de 2017

Creador de programas para Arduino con interface gráfica hecha con Gambas

Página principal


Creador de programas
para
Arduino
con interface gráfica hecha
con
 Gambas

xsetaseta@gmail.com


En un anterior artículo había descubierto Visualino , una curiosa aplicación para hacer programas de arduino en forma gráfica. En este artículo había realizado un semáforo, y la verdad me gusto hacerlo de esta manera, gráficamente.
Picado por la curiosidad, y preguntándome si yo podía hacer este tipo de programa, me puse manos a la obra.
En un principio pensé hacerlo en C, pero como tenía Gambas una especie de VB para Linux elegí la forma fácil, realizarlo en el Basic de Gambas.
Se realizo mediante Gambas 3.5.4  bajo Debian 8 ,no he probado si funciona en otras versiones.
Fueron días y días de pruebas, de creación de bloques enlazados. Tuve que rehacer completamente el programa por problemas de diseño.
Como conclusión puedo decir que me quedó un programa digno, sin mas ambiciones.
Se podría haber añadido muchas mas funciones y librerías, pero lo he dejado en las funciones básicas.
Si queremos añadir alguna orden mas, podemos emplear el texto literal, que nos dará la posibilidad de hacer lo que queramos.
Como prueba práctica he realizado un semáforo, se puede ver el vídeo de su creación.
Espero que le guste a alguien y que le de ideas para hacer otros programas.
Mi idea es realizar el programa en C con las librerías wxwidgets , pero ahora tengo que recuperarme de este complicado programa.
El programa está limitado a 100 bloques, por lo que se puede quedar un poco corto para algunos programas. El que quiera puede aumentarlo todo lo que quiera cambiando las líneas de FMain.class  donde figuran la creación del numero de bloques:
Public Const MaxBloque As Integer = 99
Public Braiz[100] As Integer
.........
No arrastrar mas de un bloque sobre otro, aún no está implementado y produce errores.


Interface gráfico


Comandos posibles




VIDEO


 En el fichero del programa se encuentra el fichero fuente, la versión binaria ejecutable, y el paquete DEB por si quieres instalarlo.
Programa


Saludos.
Juan Galaz