controlando un RaspberryPi en el espacio
Uno de las grandes faltas (como ya he comentado) del RaspberryPi, comparándolo con un Arduino, es la carencia absoluta de entradas analógicas. Para el Cuad-Raspbi-Coptero, CRC a partir de ahora, necesito saber la posición espacial en la que se encuentra, para ello necesito leer datos de un giroscopio, lo que viene a ser, leer datos de 3 sensores analógicos. Veamos como se hace.
Hace unas semanas, recibí mi giroscopio, un adxl335 que compré en Miniinthebox, es este:
Lo compré pensando en que lo conectaría al Arduino, pero me he lanzado a la búsqueda de información sobre el tema y he llegado a esta web. La idea es cargar el condensador y calcular el tiempo que tarda en recibir un 1 un GPIOa mitad de camino. Mi explicación es pésima y mis conocimientos en electrónica muy cortitos, así que leed toda la información en la web. Esto es lo que se me ha ocurrido:
Básicamente es multiplicar por 3 el esquema de la web. Para el ejemplo usan un script en python:
#!/usr/local/bin/python # Reading an analogue sensor with # a single GPIO pin # Author : Matt Hawkins # Distribution : Raspbian # Python : 2.7 # GPIO : RPi.GPIO v3.1.0a import RPi.GPIO as GPIO, time # Tell the GPIO library to use # Broadcom GPIO references GPIO.setmode(GPIO.BCM) # Define function to measure charge time def RCtime (PiPin): measurement = 0 # Discharge capacitor GPIO.setup(PiPin, GPIO.OUT) GPIO.output(PiPin, GPIO.LOW) time.sleep(0.1) GPIO.setup(PiPin, GPIO.IN) # Count loops until voltage across # capacitor reads high on GPIO while (GPIO.input(PiPin) == GPIO.LOW): measurement += 1 return measurement # Main program loop while True: print RCtime(4) # Measure timing using GPIO4
personalmente, python no es mi preferido, pero no he conseguido hacer lo mismo en bash (por ahora). El GPIO se indica en la última línea, en mi caso usare el 4, 17 y 22. Os pongo un par de fotos:
... he usado esos pedazos de condensadores ... porque no tenia otros, son de 1 uF, y en lugar de diodos rectificadores, he usado leds porque ... porque no tenía diodos rectificadores.
Bueno ahora solo queda lanzar 3 veces el script en python, modificando el GPIO de la última línea. Y ya está, tenemos lectura analógica de 3 sensores (x y z) usando sólo 3 GPIOs. Ahora ya puedo estabilizar el vuelo del CRC por poco menos de 8€. Estos son un par de resultados, en reposo:
Este otro es inclinando el sensor en una sola dimensión:
He marcado en rojo la diferencia. Las oscilaciones se deben a que el Raspberry es algo inestable en el GPIO de 3'3V, tendré que ir haciendo una media cada medio segundo o algo por el estilo, pero bueno ... FUNCIONA!!.
Ahora hago una petición:
si alguien consigue hacer esto mismo usando bash, por favor que lo comparta con todos ;)
Y una vez más...
gracias Chuck.
Edición 24/03/2013
He vuelto a rehacer el circuito con los componentes que he comprado en Electan, tengo el mismo resultado que antes, pero ahora el circuito es más simple, claro y pequeño:
Creo que te puede interesar http://raffaello.name/dynamic-works/flying-machine-arena, todo lo que se puede hacer con un copter
ResponderEliminarEl cacharro me parece que no es un giróscopo sino un acelerómetro
ResponderEliminarHola, eh leido tu blog y esta parte me ah parecido muy interesante finalmente estamos aun año vos ah logrado hacer el copter? de ser asi os apreciaria su respuesta
ResponderEliminarhola buenas noches, en que programa haces el diagrama de conexiones de la Raspberry?
ResponderEliminarFritzing http://fritzing.org/home/
EliminarQuiza esto les ayude!
ResponderEliminarhttp://kikeremiau.blogspot.mx/2016/02/lectura-adc-raspberry-pi-gpio-con-un.html