Paso 5: código
No voy a explicar cada línea de código para el proyecto (me ha comentado el código, si lo descarga creo que usted no tendrá problemas para entenderlo), pero voy a mostrarte cómo organizarlo.
El código tiene 4 archivos: uno el código principal, una segunda para los motores, el tercero es para el PID, y el último es para el código de sensor.
En el código principal primero inicializar el robot entero: pernos, sensores, comunicaciones,... A continuación, calcular el error de los sensores. Esta parte es muy importante porque en esta parte tomamos el ángulo inicial y hacemos cero, significa que el sensor tiene una desviación inicial, cuando ponemos el robot verticalmente el sensor no mostrar que el ángulo es cero, en su lugar enviar un ángulo de desviación, este ángulo inicial se utiliza para restar de la posterior medición de los sensores , para obtener el ángulo real. Así cuando iniciamos el robot que tenemos que mantener verticalmente hasta que comience a mover las ruedas.
La siguiente parte del código es el lazo donde tomamos los valores del sensor cada 10 milisegundos, que la frecuencia de muestreo es de 100Hz (se puede utilizar cualquier frecuencia, pero recuerda que no se podía trabajar muy bajas y muy altas frecuencias), y calculamos el ángulo de la robusteza usando, en este caso, el filtro complementario explicado. Tenemos el ángulo, ahora podemos utilizar esa información para el control de nuestros motores, este utiliza un PID intermedia, la forma más sencilla de controlar las cosas eficientemente, hay una librería de arduino para el PID pero es muy sencillo de implementar , se puede codificar en no más de 10 a 20 líneas de código.
Para utilizar el acelerómetro, en este caso el ADXL345, tenemos que usar sus bibliotecas. Utilicé el siguiente adafruit bibliotecas: bibliotecas de Adafruit_ADXL345 y Adafruit_Sensor .
Y eso es todo, simple código para robot simple, pero woks fina para mí. Puede implementar muchas cosas más si quieres, como pantalla LCD, más sensores, el mejor control,... Que la magia de los robots, hacen uno y mejorarlo tanto como usted desea.
Algunos de ustedes tienen problemas con el código, he subido un archivo con todo el proyecto (Balacing_single_file).
Enlace a la carpeta de google drive: