Proyeto Microprocesadores Terminado

Embed Size (px)

DESCRIPTION

proyecto de un ascensor controlado por arduino y un sensor ultrasónico

Citation preview

A.N.E.P.Consejo de Educacin Tcnico Profesional(Universidad del Trabajo del Uruguay)Instituto Tecnolgico SuperiorF. Arias L. Balparda.

Gral. Flores 3591 esq.Bvar. Jos Batlle y Ordez.Montevideo. Uruguay.

PROYECTOMICROPROCESADORESASCENSOR CON ULTRASONIDO AO 2014

Autores: Grupo 5it5 matutino.

ndice del proyecto:1. Objetivo.2. Materiales a usar.3. Funcionamiento.4. Software usado.5. Sinptico de cableado.6. Dificultades y soluciones:

1. Objetivo:Nuestro objetivo es hacer un ascensor de 3 niveles controlado sin finales de carrera como son la gran mayora de los ascensores, tiene comunicacin serial con PC y nuestro sensor de posicin va a ser un sensor ultrasnico. 2. Materiales usados:PC con puerto USB. Plaqueta desarrollo con Arduino ATMEGA260.Driver para el motor basado en transistores tip41C.Motor CC paso a paso (reciclado).Fuente ATX (reciclada). Estructura de madera.Sensor ultrasnico HC-SR04.Software: Arduino IDE y HyperTerminal de Windows o similar para la comunicacin serial.

3. Funcionamiento.Arduino: Es una plataforma dehardware libre, basada en unaplacacon unmicrocontroladory unsoftware que en nuestro caso usamos ATMEGA2560.Elhardwareconsiste en una placa con un microcontroladorAtmel AVRy adems cuenta con 54 pines digitales de entrada/salida (de los cuales 15 se pueden utilizar como salidas PWM), 16 entradas analgicas, 4 UARTs (puertos seriales), un oscilador de 16MHz, una conexin USB, un conector de alimentacin, un header ICSP, y un botn de reinicio. Contiene todo lo necesario para soportar el microcontrolador; basta con conectarlo a un ordenador con un cable USB o el poder con un adaptador o la batera AC-DC para empezar.

Tabla de datos:MicrocontroladorATmega2560

Operating Voltage5V

Input Voltage (recommended)7-12V

Input Voltage (limits)6-20V

Digital I/O Pins54 (of which 15 provide PWM output)

Analog Input Pins16

DC Current per I/O Pin40 Ma

DC Current for 3.3V Pin50 mA

Flash Memory256 KB of which 8 KB used by bootloader

SRAM8 KB

EEPROM4 KB

Clock Speed16MHz

Sensor de Proximidad: Usamos un sensor de proximidad en la base del ascensor, en nuestro caso el sensor es ultrasnico. Una seal ultrasnica son vibraciones de sonido que no son audibles para el ser humano (con frecuencias mayores a 20KHz y en nuestro caso es de 40KHz) y que rebotan fcilmente ante una superficie. El principio de funcionamiento del sensor es emitir una seal ultrasnica con un transductor (parlante) que rebota en el piso de la cabina del ascensor y demora determinado tiempo que vara dependiendo de la distancia que este la cabina llegando a otro transductor (micrfono) que emite una seal al controlador cuando el sonido regreso al sensor.Entonces relacionamos la velocidad de sonido, que es 343m/s (a 20Cde temperatura, con 50% de humedad y anivel del mar) y el tiempo que demora en ir rebotar y volver. Pudimos experimentar que ofrece una muy buena deteccin con elevada precisin y con lecturas estables con un formato fcil de usar.

Motor paso a paso: Es un motor con imn permanente, reciclado de una impresora, 36V nominales, 7,5grados, bobinado de 80Ohm. Driver para el motor basado en transistores:

4. Software usado:/************************************************************************************************** * programa para medir la distancia del piso o techo del acensor respecto al sensor de ultra sonido *************************************************************************************************/

/*********************** * Asignacion de nombres a pines para hacer el programa mas entendible ************************/const int s1 = 22;const int s2 = 23;const int s3 = 24;const int s4 = 25;const int disparo = 32; //pin de disparo de seal. Es una salidaconst int eco = 33;// pin de deteccion de sear. Es una entrada

/*********************** * Decralarion de variables *************************/

volatile int piSerial; // es el valor leido del puerto serialvolatile int paso=1;volatile unsigned int tiempo;volatile unsigned int tiempoMin;volatile unsigned int tiempoMax;

int pi; // pi es la variable del piso a ir que llega por comunicacion serial desde la pc

/*********************** * Seteo I/O *************************/void setup() // este bloque de codigo corre solo una vez (cuando comienza el programa) siendo util para setear puertos y valores iniciales de variables. { pinMode(disparo, OUTPUT); // pone el pin como salida pinMode(eco, INPUT); // pone el pin como entrada pinMode(s1, OUTPUT);// pone el pin como salida pinMode(s2, OUTPUT);// pone el pin como salida pinMode(s3, OUTPUT);// pone el pin como salida pinMode(s4, OUTPUT);// pone el pin como salida digitalWrite(s1,LOW);// pone el pin a tierra digitalWrite(s2,LOW);// pone el pin a tierra digitalWrite(s3,LOW);// pone el pin a tierra digitalWrite(s4,LOW);// pone el pin a tierra Serial.begin(9600); //inicia el potocolo de comunicacion serial con pc 9600 baudios funcionMedida();

}void loop(){ Serial.println("ingrese piso al que desea ir y presione enter"); //pone en la pantalla del pc el mensaje inicio: //etiqueta de inicio usada para el goto (saludos al indio computado) if(Serial.available() > 0 ) // chequea si se mando algo desde la pc, si existe algo ejeecuta el codigo entre los corchetes, si no hay seal espera un tiempo y se ejecuta de nuevo { funcionMedida(); piSerial=Serial.read(); switch(piSerial){ case 10: goto inicio; // el 10 es el codigo de line feed, en algunas comunicaciones puede aparecer, esta condicion evita ese problema case 13: goto inicio; // el 13 es el codigo de retorno de carro, en algunas comunicaciones puede aparecer, esta condicion evita ese problema case 49: Serial.println("Piso solicitado: 1"); pi=450; break; case 50: Serial.println("Piso solicitado: 2"); pi=1000; break; case 51: Serial.println("Piso solicitado: 3"); pi=1500; break; case 52: Serial.println("Piso solicitado: 4"); pi=2000; break; default: Serial.println("El dato de entrada no es un numero entre 1 y 4"); goto inicio; break;

}

subirMotor(); } else{ delay(500); goto inicio; }}

void subirMotor(){

if(tiempopi){ delay(5); funcionMedida(); } paso=2; giroMotor(); }}

void giroMotor(){

Serial.print("paso: "); Serial.println(paso); int time=20; switch(paso){ case 1: digitalWrite(s1,HIGH); digitalWrite(s4,LOW); delay(time); break; case 2: digitalWrite(s2,HIGH); delay(time); break; case 3: digitalWrite(s1,LOW); delay(time); break; case 4: digitalWrite(s3,HIGH); delay(time); break; case 5: digitalWrite(s2,LOW); delay(time); break; case 6: digitalWrite(s4,HIGH); delay(time); break;

case 7: digitalWrite(s3,LOW); delay(time); break; case 8: digitalWrite(s1,HIGH); delay(time); break; } }unsigned int funcionMedida(){//la funcion en si no devuelve ni toma valores externos a ella ningun valor, pero escribe directamente en las variables

tiempo=0; digitalWrite(disparo, LOW); //pone el pin disparo a cero delayMicroseconds(2); //espera 2 microsegundos //delay(50); digitalWrite(disparo, HIGH); //pone el pin disparo a uno delayMicroseconds(10); //espera 10 microsegundos (especificado por fabricante) digitalWrite(disparo, LOW);//pone el pin disparo a cero delayMicroseconds(2); //espera 2 microsegundos tiempo = pulseIn(eco, HIGH); // guarda en la variable tiempo los microsegundo que se mantiene en alto el pin eco return tiempo;

};

5. Diagrama de cableado:

6. Dificultades y soluciones:(Adems de las dificultades de programacin)La calibracin del sensor; a veces no fue muy preciso ya que las medidas se tomaban a intervalos muy pequeos de tiempo, para mejorarlo se dio ms tiempo entre medida y medida, logrando as una mejor precisin Despus analizando las medidas tuvimos la dificultad que al llegar al tercer piso no tena una buena medida. Analizamos el problema ya que el sensor meda perfectamente fuera de la estructura del ascensor, la falla era cuando colocbamos el sensor dentro de la estructura. Ya que el ultrasonido se propagaba con un ngulo de 30 y haba algn tipo de interferencia con la estructura, concluimos que el sonido rebotaba en alguna superficie de la estructura y que rebotaba en las barras horizontales del segundo piso en vez de rebotar en las base de la cabina. Al sacarle esas barras horizontales de la estructura el sensor funcionaba con un margen de error de 1cm. Diseo del ascensor y adecuarlo al proyecto; hicimos el primer prototipo y fallo que no era estable a la hora del uso, adems el ascensor no suba ni bajaba adecuadamente, entonces hicimos el segundo prototipo que la estructura es ms firme y la cabina no tiene tanto rozamiento al bajar o subir por la estructura.Acople del motor y que motor se va a usar; en un principio bamos a usar un motor de CC comn con un puente H para su inversin de giro y la dificultad que tenamos era mantener el ascensor quieto en un piso el peso de la cabina haca que se baje solo. Por eso decidimos usar un motor paso a paso de 32v que tena ms potencia, ms eficaz y ms seguro a la hora de frenar el motor ya que le damos continua a los 1 bobinado y se frena el motor y resiste el peso de la cabina.