Mostrando entradas con la etiqueta Atmega 328. Mostrar todas las entradas
Mostrando entradas con la etiqueta Atmega 328. Mostrar todas las entradas

miércoles, 25 de noviembre de 2015

Robot equilibrista con arduino, imu, pid, filtro kalman, bluetooth y rf.

El proyecto consiste en la fabricacion de un robot de dos ruedas que consiga mantener el equilibrio por si mismo con ayuda de un acelerometro y un giroscopio, ademas de un filtrado digital de la señal y un control PID y que pueda ser controlado por bluetooth desde el smartphone.











Gantproyect del tiempo estimado para cada una de las partes y tareas de este proyecto:





Los motores utilizados para este proyecto seran dos servos que habra que modificar para conseguir que puedan girar 360º.
En internet hay gran cantidad de tutoriales que enseñan como se realiza la modificacion, como por ejemplo este:  enlace o este otro enlace.

Fotos del proceso:











Para controlar los motores utilizare un puente en H.  El puente se basara en un integrado L298 que soporta 2 amperios de trabajo continuo y picos de hasta 3, y una tension de hasta 46 voltios.











Para realizar las primeras pruebas de estabilidad he construido un prototipo de chasis muy basico para probar los motores, ruedas, etc.  Proximamente el chasis ira evolucionando ya que esto es solo una pequeña prueba.











Para la parte de programacion lo primero que hare es implementar un filtrado digital de la señal del acelerometro y el giroscopio.     El sensor que utilizare es el GY-521, basado en el chip MPU-6050 que incluye acelerometro y giroscopio en el mismo integrado.





El filtrado digital consistira en un filtro de Kalman que hara mas estables las medidas y evitara medidas erroneas puntuales. El filtro de Kalman trabaja en dos etapas, en la primera realiza una estimación y en la segunda etapa corrige el error. En este caso para corregir la deriva del giróscopio se utiliza el acelerómetro o a la inversa.

 Aqui se puede ver una grafica hecha en procesing que muestra los ejes del acelerometro, del giroscopio y la salida del filtro de kalman con las 2 medidas ya combinadas en una que da un eje x y un eje y.


El codigo para implementar el filtro lo podeis encontrar aqui.



Ademas del filtro de Kalman tambien sera necesario implementar un control PID para el control de los motores.
Un PID es un mecanismo de control por realimentación que calcula la desviación o error entre un valor medido y el valor que se quiere obtener, para aplicar una acción correctora que ajuste el proceso. El algoritmo de calculo del control PID se da en tres parámetros distintos: el proporcional, el integral, y el derivativo.
La libreria PID para arduino que he utilizado se puede descargar de aqui.





Tras un rato de pruebas y otro buen rato de lucha con el pid probando diferentes valores de kp, ki y kd el robot ya se mantiene de pie aunque no es muy estable aun.






La estructura final ha sufrido varios cambios y ha quedado asi:






Actualmente es bastante estable como se puede ver en los siguientes videos:










El siguiente paso es intentar controlar la direccion y el giro mediante un modulo bluetooth y una aplicacion en android.





Tambien tengo la intencion de controlar el robot desde procesing con un modulo rf a la vez que se reciben los datos del acelerometro y el giroscopio y se representan en una grafica.






Despues de la implementacion del modulo bluetooth y de un poco mas de programacion el robot ya se puede controlar desde el telefono.





Despues de todo esto aun me sobro un poco de tiempo antes de la fecha de entrega del proyecto asique se me ocurrio ponerle 2 servos, uno a cada lado del robot y acoplarles un trozo del mismo material que la base a modo de "brazos", con la idea de poder hacer que se levantase solo si se cae.
El resultado es este:



Tras esto doy por finalizado el proyecto, yo diria que con bastante exito, al menos mas del que yo mismo esperaba.

lunes, 16 de marzo de 2015

Seguidor Solar


¿De que trata el proyecto?

El proyecto trata de dos placas en serie las cuales irán siguiendo el transcurso de sol durante el día. Al mismo tiempo ira cargando una batería la cual nos dará alimentación mediante dos reguladores de tensión a nuestro Arduino y a un conector USB mediante el cual podremos cargar nuestro móvil. Mediante arduino controlaremos la carga y descarga de la batería.

 




Planificación del Proyecto



Diagrama de Estados



Componentes


Placa de Control

1 - Atmega 328p
1 - Cristal 16 Mhz
2 - Condensadores 22 pF SMD
4 - Condensadores Electrolíticos 220 uF 35v
2 - Condensadores 100 nF SMD
2 - Condensadores 100 nF Cerámico
1 - Resistencia 1M SMD
3 - Resistencias 330 SMD
2 - Resistencias 330
6 - Resistencias 4k7
1 - Resistencias 4k7 SMD
4 - Resistencias 1k
2 - Resistencias 1k SMD
2 - Resistencias variables 10k
2 - Bobinas 330 mH
1 - Pulsador
4 - Led's Verdes
1 - Led Rojo 
3 - Diodos Schottky 5819
1 - Diodo 1N4007
2 - Transistores PN2222A
1 - HEF4051BP
2 - 4N35
2 - LM2596 ADJ
1 - Relé 5VDC
1 - USB A Hembra 
2 - Fichas de conexión


SAA1064

1 - SAA1064 SMD
1 - Condensador 2n7 SMD
1 - Condensador 100 nF
2 - Resistencias 10k SMD 
2 - Transistores PN2222A
4 - Display 7 segmentos Ánodo Común

  

Sensores y Actuadores

1 - Sensor de Temperatura y Humedad DHT11

1 - Bluetooth HC-06

4 - LDR's

2 - Servo Motores


2 - Placas Solares 6V 166 mA 1W

1 - Batería 6V 3500 mAH ni-mh


Aquí tenéis un enlace con la información de este tipo de baterías de NI-MH y otros tipos de baterías:




HEF4051BP


La utilización de un multiplexor se debe a que por falta de patillas analógicas tuve que recurrir a este selector el cual nos permite con una sola patilla analógica de arduino meterle hasta 8 entradas. También necesitaremos 3 entradas digitales para los bits de selección.

Aquí dejo la Web de donde he sacado la información y las librerías:



Esquemas Isis

Placa de Control

SAA1064


Diseño en Ares

Placa de Control

SAA1064


Resultado Final

Placa de Control

SAA1064


Gráfica de las Placas Solares




Como se puede observar la gráfica de la placa de abajo cae el voltaje y la intensidad debido a que uno de los elementos de la placa solar vino defectuoso en el envió que por suerte no ha afectado mucho al proyecto.


Aquí podemos ver las distintas cargas utilizadas para la realización de la gráfica.



SAA1064


La idea de inicial de la utilización de este integrado era poder mostrar la tensión de la batería en cada momento, pero por un posible error de diseño no funciona una vez montado en PCB pero este diseño está probado en Protoboard y funciona bastante bien aquí dejo los videos de las pruebas.






Aquí dejo la Web de donde he sacado la información y las librerías:



Pruebas con el Seguidor Solar

La primera prueba se trata de un bucle en el que se comprueba que los Servos hacen perfectamente los 180º.


En la siguiente utilizaremos dos potenciómetros y regularemos los grados a los que van a trabajar nuestros Servos.



Ahora con las 4 LDR's montadas en protoboard veremos si hace bien los movimientos.



Y una vez comprobado que funcionan bien las LDR's las incorporamos a la palca solar.



Processing

Vamos a utilizar un pequeño programita para comunicar mediante Bluetooth el Arduino con el PC desde el cual accionaremos o no el relé para forzar una carga o descarga de la batería.





Programa en Arduino






Registro de Datos

Mediante un monitor serial en este caso RealTerm iremos leyendo del puerto serie en este caso comunicado por Bluetooth, el cual nos muestra la tensión y temperatura de la batería y si se encuentra en carga o descarga. Cuando queramos podremos guardar los datos recogidos en un fichero .txt




Video Final del Proyecto