Con la placa arduino ya funcional, y esperando los esc y motores, solo me queda seguir con el cerebro de la bestia, asi que me he puesto a instalar la libreria ServoTimer2.h en arduino. Para sorpresa mia no es compatible con el nuevo entorno arduino 1.0 y he tenido que buscar una version modificada que si lo sea.
La libreria: ServoTimer2
Agradecimientos a codigo
jueves, 15 de agosto de 2013
miércoles, 14 de agosto de 2013
Arduino Stand-Alone II (usbtinyisp)
Podria sacar de la pcb Quadcopter_V0 el chip Atmega328 cada vez que quisiera modificar la programacion, pero seria mucho estres mecanico innecesario. Mi placa ni tiene ni tendra usb, asi que le he habilitado a la placa patillaje para ISP.
MISO 1------- 2 VCC miso pin18,vcc pin7
SCK 3------- 4 MOSI sck pin19, mosi pin17
RESET 5------- 6 GND reset pin1, gnd pin8
MISO 1------- 2 VCC miso pin18,vcc pin7
SCK 3------- 4 MOSI sck pin19, mosi pin17
RESET 5------- 6 GND reset pin1, gnd pin8
martes, 13 de agosto de 2013
Arduino Stand-Alone
Como en cada proyecto, la idea de construir algo es, que en el camino pueda aprender todo lo posible. Por eso estoy diseñando una placa arduino especifica para Quadcoper_V0, seria mucho mas rapido y facil comprar algunos de los sistemas, pero prefiero orientar también este proyecto hacia el aprendizaje .
El circuito en protoboard (el led rgb indicador de corriente es lo mas xD )
De momento es solo una placa arduino con convertidor de voltaje a 5v, led indicador de alimentacion y led en pin13. Dejo la pcb y diagramas en Eagle, tambien un pdf para imprimir.
El circuito en protoboard (el led rgb indicador de corriente es lo mas xD )
De momento es solo una placa arduino con convertidor de voltaje a 5v, led indicador de alimentacion y led en pin13. Dejo la pcb y diagramas en Eagle, tambien un pdf para imprimir.
Agradecimientos a http://txapuzas.blogspot.mx/
miércoles, 7 de agosto de 2013
MMA7260 y Arduino
Tengo un acelerometro de 3 ejes MMA7260 y estoy experimentando con el, pero creo que no es lo apropiado para estabilizar a Quadcopter V0. Estoy buscando un Wii motion plus a buen precio para quitarle los giroscopios y usar estos en el proyecto.
El codigo inicial del acelerometro mma7260 fue sacado de aqui:
Y aqui la primera modificacion
El codigo inicial del acelerometro mma7260 fue sacado de aqui:
Y aqui la primera modificacion
#define DEBUGMODE
#define _360div2xPI 57.29577951
#define _5000div1023 4.887585533
#define MMA7260_RESOLUTION 800 //0.8 v/g -> resolucion de 1.5g -> 800mV/g
#define MMA7260_VOLTAGE 3300.0; //mv voltage al que está conectado el acelerómetro
const float ZOUT1G = 2450; // mv Voltage en Zout a 1G
const float ZOUT0G = 1650; // mv Voltage en Zout a 1G
#define MMA7260_ZOUT_1G 850 // mv Voltage en Zout a 1G
const float XOUT1G = 2450; // mv Voltage en Zout a 1G
const float XOUT0G = 1650; // mv Voltage en Zout a 1G
const float YOUT1G = 2450; // mv Voltage en Zout a 1G
const float YOUT0G = 1650; // mv Voltage en Zout a 1G
#define NADJ 50 // Número de lecturas para calcular el error
// Entradas analógicas donde van los sensores
#define XAXIS_PORT 0
#define YAXIS_PORT 1
#define ZAXIS_PORT 2
// Salida digital del led de la placa
#define LEDPIN_PORT 13
float XError,YError,ZError;
float z,x,y;
float AccelAdjust(int axis)
{
float acc = 0;
for (int j=0;j < NADJ;j++)
{
float lectura=analogRead(axis);
acc = acc + (lectura*_5000div1023);
delay(11); //número primo para evitar ciclos de lectura proporcionales
}
return acc/NADJ;
}
void setup()
{
Serial.begin(9600); // 9600 bps
pinMode(XAXIS_PORT,INPUT);
pinMode(YAXIS_PORT,INPUT);
pinMode(ZAXIS_PORT,INPUT);
pinMode(LEDPIN_PORT, OUTPUT);
digitalWrite(LEDPIN_PORT, HIGH);
XError = AccelAdjust(XAXIS_PORT);
YError = AccelAdjust(YAXIS_PORT);
ZError = AccelAdjust(ZAXIS_PORT);
ZError = ZError - MMA7260_ZOUT_1G;
digitalWrite(LEDPIN_PORT, LOW);
#ifdef DEBUGMODE
Serial.println("Ajustado acelerometro eje X");
Serial.print("Error de X= ");
Serial.println(XError);
Serial.println("Ajustado acelerometro eje Y");
Serial.print("Error de Y= ");
Serial.println(YError);
Serial.println("Ajustado acelerometro eje Z");
Serial.print("Error de Z= ");
Serial.println(ZError);
#endif
}
void loop()
{
x=analogRead(XAXIS_PORT);
y=analogRead(YAXIS_PORT);
z=analogRead(ZAXIS_PORT);
unsigned long tt = micros();
float aax = ((x*_5000div1023)-XError)/MMA7260_RESOLUTION;
float aay = ((y*_5000div1023)-YError)/MMA7260_RESOLUTION;
float aaz = ((z*_5000div1023)-ZError)/MMA7260_RESOLUTION;
float rho = atan(aax/sqrt((aay*aay)+(aaz*aaz)))*_360div2xPI;
float phi = atan(aay/sqrt((aax*aax)+(aaz*aaz)))*_360div2xPI;
float theta = atan(sqrt((aay*aay)+(aax*aax))/aaz)*_360div2xPI;
tt = micros()-tt;
#ifdef DEBUGMODE
/* Serial.print(" x");
Serial.print(aax);
Serial.print(" y ");
Serial.print(aay);
Serial.print(" z");
Serial.print(aaz);
Serial.println();
Serial.println(); */
Serial.print("X ");
Serial.print(rho);
Serial.print(" Y ");
Serial.print(phi);
Serial.print(" Z ");
Serial.print(theta);
Serial.println();
// Serial.print("mS");
// Serial.print(tt);
#endif
delay(1000);
}
martes, 6 de agosto de 2013
Quadcopter con arduino
Estas ultimas semanas he estado recopilando información que me ayude en el diseño de un quadcoter, aqui ire compartiendo lo que considere interesante.
Links:
Links:
- Como empezar http://blog.tkjelectronics.dk/2012/03/quadcopters-how-to-get-started/
- Helice " / motor / rpm http://www.rcgroups.com/forums/showthread.php?t=1387525
- Video con tip estabilizacion
- ESC http://diebotreise.blogspot.mx/2011/12/como-controlar-un-motor-brushless-con.html
- quadWiduino http://www.rcgroups.com/forums/showthread.php?t=1332876
- kalman filter sensores Wii http://forum.arduino.cc/index.php/topic,8544.0.html
- arduino wii http://randomhacksofboredom.blogspot.mx/2009/06/wii-motion-plus-arduino-love.html
- Calculadora RC http://www.ecalc.ch/
- Calculos acelerometro 3 ejes http://www.hobbytronics.co.uk/accelerometer-info
- presion https://www.sparkfun.com/datasheets/Components/General/BST-BMP085-DS000-05.pdf
- codigo sensor de presion http://bildr.org/2011/06/bmp085-arduino/
- Arduino standalone (imagen sacada de aqui)
Salu2
Suscribirse a:
Entradas (Atom)