Escolar Documentos
Profissional Documentos
Cultura Documentos
Proyecto
Aeropndulo
Integrantes:
Rivera Hernndez Jos Miguel
Zuiga Bocanegra Daniel
Objetivo:
El presente trabajo, proyecto final de la materia Sistemas Analgicos y Digitales es una aplicacin
del acelermetro MPU-6050, en el cual vamos a utilizar un microcontrolador Arduino Uno para
captar seales del sensor y as poder estabilizar de forma horizontal el aeropndulo.
La implementacin del proyecto tambin tendr la opcin de interactuar con un potencimetro,
esto para afirmar el concepto de redundancia, tema fundamental de la materia.
Alcance:
Mediante el PWM generado por el microcontrolador, el aeropndulo podr variara las RPM del
motor y con ayuda del MPU-6050, este podr sensar la posicin del aeropndulo logrando as
estabilizarlo de forma horizontal y mostrar los resultados obtenidos en pantalla.
En dado caso de que el sensor llegue a fallar, el aeropndulo podr ser controlado de forma
manual mediante un potencimetro.
Debido a las vibraciones y a la sensibilidad del sensor, la informacin proporcionada puede llegar a
diferir de los resultados reales, pero por la aplicacin que se le dar el error producido puede ser
despreciable.
Introduccin:
Acelermetro
Es un dispositivo que mide aceleracin, la aceleracin que es relativa a la cada libre, es la misma
que experimentan las personas y objetos. Como consecuencia de esto, un acelermetro en reposo
sobre la superficie de la tierra, leer aproximadamente 1g en direccin radial al centro de la tierra.
Para encontrar la aceleracin debida al movimiento respecto a la tierra se debe de substraer el
offset de la gravedad.
Un acelermetro arroja un valor de medicin nulo durante cada libre. Para usos prcticos con el
propsito de encontrar la aceleracin de objetos respecto de la tierra, se necesita saber el valor de
la gravedad local. Esto se hace calibrando el dispositivo en reposo.
Conceptualmente un acelermetro se comporta como una masa amortiguada sobre un resorte.
Cuando experimenta aceleracin, la masa es desplazada a un punto el cual el resorte es capaz de
acelerar la masa a la misma velocidad. El desplazamiento que se mide es proporcional a la
aceleracin en ese eje de medicin.
Los acelermetros modernos son construidos de MEMS y de hecho es el sistema MEMS ms
sencillo que se puede construir. Estos consisten de una masa ssmica y un cantilever. La
PWM
La tcnica PWM (Pulse-Width Modulation) o modulacin por anchura del pulso permite generar
ondas cuadradas con una frecuencia y ciclo de actividad determinada:
En Arduino UNO la frecuencia del reloj del sistema es 16Mhz
16*10^6 ciclos (ticks) por segundo_tiempo de ciclo es 1/ 16*10^6 = 62.5ns
Es posible modificar la frecuencia para que el nmero de ciclos por segundo sea 1 por cada 8, 16,
32,64, etc. ciclos de reloj del sistema. Este valor se llama factor de pre-escalado.
El ciclo de actividad (o duty cycle, DC) representa la anchura del pulso: cunto tiempo de cada
onda cuadrada hay pulso (5V) y cundo no lo hay (0V).
Otro ejemplo:
analogWrite(pin,DC): es una funcin de Arduino que escribe en pin (salida) un determinado DC o
duty cycle
Est funcin se implementa como un PWM con una frecuencia fija (mediante un factor de
preescalado de 64).
Problema: aunque permite modificar el duty cycle, no es posible modificar la frecuencia, ya que
el valor de pre-escalado est fijo.
PWM permite generar ondas con diferentes frecuencias y duty cycles usando timers:
Un timer es un contador software que cuenta ciclos de reloj: el timer usa el
reloj de la CPU (o reloj del sistema).
El timer se puede configurar para que solo se incremente cada X ciclos en
lugar de cada ciclo. (siendo X el factor de preescalado)
Un timer cuenta desde 0 hasta MAX,
MAX es el mximo que puede almacenar, y depende del nmero de bits del timer:
Arduino UNO
para la
y hardware
artistas, diseadores,
aficionados y cualquiera
interactivos.
Arduino puede tomar informacin del entorno a travs de sus pines de entrada de toda una gama
de sensores y puede afectar aquello que le rodea controlando luces, motores y otros actuadores.
El microcontrolador en la placa Arduino se programa mediante el lenguaje de programacin
Arduino (basado en Wiring) y el entorno de desarrollo Arduino (basado en Processing). Los
proyectos hechos con Arduino pueden ejecutarse sin necesidad de conectar a un ordenador, si
bien tienen la posibilidad de hacerlo y comunicar con diferentes tipos de software (p.ej. Flash,
Processing, MaxMSP).
Caractersticas:
Microcontroladores
Tensin de funcionamiento
Voltaje de entrada
ATmega328
5V
7-12V
6-20V
14 (de los cuales 6 proporcionan PWM)
6
40 mA
50 mA
32 KB ( ATmega328 ) de los cuales 0,5 KB utilizado por el
gestor de arranque
2 KB ( ATmega328 )
1 KB ( ATmega328 )
16 MHz
Timers de Arduino
Arduino tiene 3 Timers (Timer0, Timer1, Timer2),
Cada timer tiene 2 registros de HW que permiten configurar las opciones de PWM
TCCRXA y TCCRXB (X=0,1,2) dependiendo del timer usado
Cada timer tiene otros 2 registros de HW que actan como registros de comparacin,
OCRXA y OCRXB (X=0,1,2) dependiendo del timer usado
Cada timer tiene 2 salidas que pueden conectarse a dos salidas PWM de Arduino:
Timer 0 _salidas 6 (A) y 5 (B)
Timer 1 _salidas 9 (A) y 10 (B)
Timer 2 _salidas 11 (A) y 3 (B)
MPU 6050
Hay pequeos dispositivos que indican el cambio de orientacin en los telfonos inteligentes,
mandos de videojuegos, quad-helicpteros, etc
Estos dispositivos contienen giroscopios combinados con acelermetros y / o brjulas y se
conocen como IMU, o Unidad de Medicin Inercial
El nmero de entradas de sensor en una IMU se conocen como "DOF" (grados de libertad), por lo
que un chip con un giroscopio de 3 ejes y un acelermetro de 3 ejes sera un 6-DOF IMU.
un acelermetro se basa en una fuerza gravitacional constante de 1g (9,8 m / s ^ 2) hacia abajo. Si
no hay fuerzas adicionales que acten sobre el acelermetro (una suposicin arriesgada), la
cos(Axr) = Rx / R
cos(Ayr) = Ry / R
cos(Azr) = Rz / R
R = SQRT( Rx^2 + Ry^2 + Rz^2)
Usando las funciones inversas
Axr = arccos(Rx/R)
Ayr = arccos(Ry/R)
Azr = arccos(Rz/R
I2C
SDA: datos
SCL: reloj
GND: tierra
Las dos primeras lneas son drenador abierto, por lo que necesitan resistencias de pull-up.
Los dispositivos conectados al bus IC tienen una direccin nica para cada uno. Tambin pueden
ser maestros o esclavos. El dispositivo maestro inicia la transferencia de datos y adems genera la
seal de reloj, pero no es necesario que el maestro sea siempre el mismo dispositivo, esta
caracterstica se la pueden ir pasando los dispositivos que tengan esa capacidad. Esta
caracterstica hace que al bus IC se le denomine bus multimaestro.
Las transacciones en el bus I2C tienen este formato:
| start | A7 A6 A5 A4 A3 A2 A1 R/W | ACK | ... DATA ... | ACK | stop | idle |
El bus esta libre cuando SDA y SCL estn en estado lgico alto.
En estado bus libre, cualquier dispositivo puede ocupar el bus IC como maestro.
El maestro se dirige al dispositivo con el que quiere hablar, enviando un byte que contiene los
siete bits (A7-A1) que componen la direccin del dispositivo esclavo con el que se quiere
comunicar, y el octavo bit (A0) de menor peso se corresponde con la operacin deseada (L/E),
lectura=1 (recibir del esclavo) y escritura=0 (enviar al esclavo).
La direccin enviada es comparada por cada esclavo del bus con su propia direccin, si ambas
coinciden, el esclavo se considera direccionado como esclavo-transmisor o esclavo-receptor
dependiendo del bit R/W.
El esclavo responde enviando un bit de ACK que le indica al dispositivo maestro que el esclavo
reconoce la solicitud y est en condiciones de comunicarse.
El maestro enva la direccin del registro interno del dispositivo que se desea leer o escribir.
Ahora el maestro puede empezar a leer o escribir bytes de datos. Todos los bytes de datos
deben constar de 8 bits, el nmero mximo de bytes que pueden ser enviados en una
transmisin no est restringido, siendo el esclavo quien fija esta cantidad de acuerdo a sus
caractersticas.
Cada byte ledo/escrito por el maestro debe ser obligatoriamente reconocido por un bit de
ACK por el dispositivo maestro/esclavo.
Se repiten los 2 pasos anteriores hasta finalizar la comunicacin entre maestro y esclavo.
Aun cuando el maestro siempre controla el estado de la lnea del reloj, un esclavo de baja
velocidad o que deba detener la transferencia de datos mientras efecta otra funcin, puede
forzar la lnea SCL a nivel bajo. Esto hace que el maestro entre en un estado de espera,
Cuando la comunicacin finaliza, el maestro transmite una "stop condition" para dejar libre el
bus.
Despus de la "stop condition", es obligatorio para el bus estar idle durante unos
microsegundos
Materiales:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Protoboard
Resistencias de 2.2 K ( 4 )
Resistencias de 10 K ( 2 )
Transistor TIP 120 ( 4 )
Arduino Uno
Sensor MPU 6050
Potencimetro
Motor elctrico de cd.
Hlice de aeromodelismo
Maderas Varias
Palo de bandera
Contrapesos
Balero
Cables.
Cinta de aislar
Procedimiento:
Base del Aeropendulo
1.
2.
3.
4.
5.
Nota: En las conexiones de SDA y SCL tienen que ir conectadas las resistencias de 10k
void setup(){
#include "I2Cdev.h"
Serial.begin(9600);
#include "MPU6050.h"
#include "math.h"
accelgyro.initialize();
#include "Wire.h"
delay(1000);
Serial.println("Comprovando conexion...");
delay(2500);
MPU6050 accelgyro;
int16_t ax, ay,az;
int16_t gx,gy,gz;
Serial.println(accelgyro.testConnection() ?
"MPU6050 coneccion exitosa" : "MPU6050
conexion fallida");
pinMode(led1,OUTPUT);
int motor = 3;
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
char byterecibido;
pinMode(led4,OUTPUT);
int auxiliar = 0;
pinMode(potenciometro,INPUT);
int auxiliar2 = 0;
double angleXZ = 0;
double angleYZ = 0;
int bucle=0;
int d;
int led1=6;
int led2=9;
if(byterecibido == '1'){
int led3=10;
Serial.print("\nMotor encendido:\n");
int led4=11;
velocidad=150;
int potenciometro=0;
analogWrite (motor,velocidad);
int motor2=5;
float c;
c=velocidad/2.55;
Serial.print("%\t");
angulo();
Serial.println("\nMotor estable:");
auxiliar = Serial.read();
float c;
c=velocidad/2.55;
Serial.print(c);
Serial.print("%\t");
angulo();
if(byterecibido == '2'){
Serial.print("\nAumentando velocidad
del motor:\n");
Serial.print ("\nVelocidad\t");
Serial.print("Angulo\n");
for(velocidad ; velocidad <= 254;
velocidad++){
analogWrite (motor,velocidad);
}
else if (byterecibido == '3'){
Serial.print("\nReduciendo velocidad del
Motor :\n");
Serial.print ("\nVelocidad\t");
Serial.print("Angulo\n");
for(velocidad ; velocidad >=1 ;
velocidad--){
float c;
analogWrite (motor,velocidad);
c=velocidad/2.55;
float c;
Serial.print(c);
c=velocidad/2.55;
Serial.print("%\t");
Serial.print(c);
angulo();
Serial.print("%\t");
delay(100);
angulo();
Serial.println("\t");
delay(100);
auxiliar = Serial.read();
Serial.println("\t");
auxiliar = Serial.read();
break;
float c;
Serial.println("\nMotor estable:");
c=velocidad/2.55;
float c;
Serial.print(c);
c=velocidad/2.55;
Serial.print("%\t");
Serial.print(c);
angulo();
Serial.print("%\t");
angulo();
velocidad=150;
int b=0;
analogWrite (motor,b);
void estable(){
while (angleYZ<0){
velocidad += 1;
analogWrite (motor,velocidad);
float c;
c=velocidad/2.55;
Serial.print ("\nVelocidad\t");
Serial.print(c);
Serial.print("Angulo\n");
Serial.print("%\t");
for(bucle;bucle<1;bucle){
angulo ();
estable();
delay (100);
Serial.println("\t");
auxiliar = Serial.read();
Serial.print(auxiliar);
if (auxiliar>0){
break;
c=velocidad/2.55;
else if(velocidad==255){
Serial.print(c);
velocidad=254;
Serial.print("%\t");
angulo ();
delay (100);
while (angleYZ>5){
auxiliar = Serial.read();
velocidad -= 1;
if (auxiliar>0){
analogWrite (motor,velocidad);
break;
float c;
c=velocidad/2.55;
Serial.print(c);
Serial.print("%\t");
void angulo(){
angulo ();
delay (100);
auxiliar = Serial.read();
if (auxiliar>0){
//Serial.write("xz:");
break;
//Serial.print(angleXZ);
//Serial.print("\n");
else if(velocidad==0){
velocidad=1;
Serial.print("\t");
Serial.print(angleYZ);
Serial.print("\n");
d=velocidad;
analogWrite (motor,d);
float c;
}
void potencia(){
analogWrite(led4,0);
analogWrite(motor2,value/4);
if (value<254){
analogWrite(led1,value);
analogWrite(led3,254);
analogWrite(led2,0);
analogWrite(led4,0);
analogWrite(led3,0);
}
if(value>765){
analogWrite(led4,0);
analogWrite(led4,254);
analogWrite(led2,254);
analogWrite(led3,0);
Proyecto terminado
Bibliografa
www.eluniversal.com.mx/.../malasia-difunde-informe-sobre-vuelo-mh37
http://www.abc.es/internacional/20140508/abci-meses-vuelo-malasia-201405071517.html
http://actualidad.rt.com/actualidad/view/127104-carga-vuelo-mh370-malaysian-airlines
Ya han pasado dos meses desde la desaparicin del vuelo MH 370 de Malasia y sigue sin haber ni
rastro del avin. El aparato, un Boeing 777 de Malaysia Airlines que cubra la ruta entre Kuala
Lumpur y Pekn con 239 personas a bordo, se perdi en el radar poco despus de despegar y,
desde entonces, no se ha encontrado ni un solo resto que permita saber dnde est. En pleno
siglo XXI, y con todos los adelantos tecnolgicos imaginables, se trata de uno de los mayores
enigmas de la aviacin.
Desde el principio, la confusin rein en este misterioso caso, ya que el Gobierno de Malasia no
orden la bsqueda y rescate del avin hasta cuatro horas despus de su desaparicin. As reza en
un informe oficial, difundido la semana pasada, que elabor el pasado 9 de abril la Oficina del
Inspector Jefe de Accidentes Areos, perteneciente al Ministerio de Transportes. Dicho
documento relata cronolgicamente el misterio de este avin perdido, desde su despegue de
Kuala Lumpur a las 00:41 del sbado 8 de marzo (siete horas menos en la Espaa peninsular) hasta
la ltima comunicacin con el aparato a las 01:19.
En ese momento, mientras sobrevolaba las aguas que separan Malasia de Vietnam, la torre de
control de Kuala Lumpur le orden pasar bajo la supervisin del aeropuerto de Ho Chi
Minh. Buenas noches, Malasia 370, fueron las ltimas palabras pronunciadas desde su cabina,
ya que el aparato se perdi en el radar a las 01:21. Diecisiete minutos despus, el aeropuerto de
Kuala Lumpur pidi informacin al de Ho Chi Minh, que respondi que no haba tenido contacto
con el avin. Aunque la torre de control de la capital vietnamita lo haba detectado al principio en
uno de los puntos de navegacin de su ruta, denominado Igari, su radar lo perdi despus en el
punto llamado Bitod. Durante los veinte minutos siguientes, ambos aeropuertos estuvieron
tratando de establecer comunicacin con el vuelo MH 370 por varias frecuencias de radio.
Aumentando an ms el caos, la propia aerolnea comunic a los controladores de Kuala Lumpur
que el avin segua adelante con su ruta en condiciones normales, sobrevolando el espacio
areo de Vietnam y luego el de Camboya. Posteriormente, Malaysia Airlines reconoci que dicha
informacin no era fiable porque se haba basado en la proyeccin del rumbo del MH 370, y no
en datos reales.
Desde las dos de la madrugada, los controladores areos multiplicaron sus esfuerzos para localizar
el aparato, pidiendo informacin a pases vecinos, como Camboya y Singapur, y a otros aviones
que volaban por la zona a esas horas. Aunque todas las respuestas fueron negativas durante las
tres horas siguientes, Kuala Lumpur no activ la bsqueda y rescate hasta las cinco y media de la
madrugada, segn refleja el informe.
Captado por un radar militar