Está en la página 1de 8

A.N.E.P.

Instituto Tecnológico Superior
F. Arias – L. Balparda.

Consejo de Educación
Técnico Profesional

Gral. Flores 3591 esq.

(Universidad del Trabajo

Bvar. José Batlle y Ordóñez.

del Uruguay)

Montevideo. Uruguay.

PROYECTO
MICROPROCESADORES
ASCENSOR CON ULTRASONIDO
AÑO 2014

Autores: Grupo 5it5 matutino.

Índice del proyecto:

2. 6. Motor CC paso a paso (reciclado). Estructura de madera.1. 5. Materiales a usar. Fuente ATX (reciclada). Software usado. Materiales usados: PC con puerto USB. Sensor ultrasónico HC-SR04. tiene comunicación serial con PC y nuestro sensor de posición va a ser un sensor ultrasónico. 3. Funcionamiento. 4. . Objetivo. Plaqueta desarrollo con Arduino ATMEGA260. Funcionamiento. Dificultades y soluciones: 1. 2. Sinóptico de cableado. Objetivo: Nuestro objetivo es hacer un ascensor de 3 niveles controlado sin finales de carrera como son la gran mayoría de los ascensores. Driver para el motor basado en transistores tip41C. Software: Arduino IDE y HyperTerminal de Windows o similar para la comunicación serial. 3.

El hardware consiste en una placa con un microcontrolador Atmel AVR y además cuenta con 54 pines digitales de entrada/salida (de los cuales 15 se pueden utilizar como salidas PWM). Contiene todo lo necesario para soportar el microcontrolador. . un header ICSP. Una señal ultrasónica 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 fácilmente ante una superficie. El principio de funcionamiento del sensor es emitir una señal ultrasónica con un transductor (parlante) que rebota en el piso de la cabina del ascensor y demora determinado tiempo que varía dependiendo de la distancia que este la cabina llegando a otro transductor (micrófono) que emite una señal al controlador cuando el sonido regreso al sensor. 16 entradas analógicas. Entonces relacionamos la velocidad de sonido. 4 UARTs (puertos seriales). un oscilador de 16MHz. que es 343m/s (a 20 °C de temperatura. en nuestro caso el sensor es ultrasónico. Pudimos experimentar que ofrece una muy buena detección con elevada precisión y con lecturas estables con un formato fácil de usar.Arduino: Es una plataforma de hardware libre. con 50% de humedad y a nivel del mar) y el tiempo que demora en ir rebotar y volver. basta con conectarlo a un ordenador con un cable USB o el poder con un adaptador o la batería AC-DC para empezar. Tabla de datos: Microcontrolador Operating Voltage Input Voltage (recommended) Input Voltage (limits) Digital I/O Pins Analog Input Pins DC Current per I/O Pin DC Current for 3.3V Pin Flash Memory SRAM EEPROM Clock Speed ATmega2560 5V 7-12V 6-20V 54 (of which 15 provide PWM output) 16 40 Ma 50 mA 256 KB of which 8 KB used by bootloader 8 KB 4 KB 16 MHz Sensor de Proximidad: Usamos un sensor de proximidad en la base del ascensor. y un botón de reinicio. una conexión USB. basada en una placa con un microcontrolador y un software que en nuestro caso usamos ATMEGA2560. un conector de alimentación.

Driver para el motor basado en transistores: 4.5grados. reciclado de una impresora. bobinado de 80Ohm. 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 ************************/ .Motor paso a paso: Es un motor con imán permanente. 7. 36V nominales.

println("Piso solicitado: 2"). break. case 52: Serial. const int s4 = 25. //pone en la pantalla del pc el mensaje inicio: //etiqueta de inicio usada para el goto (saludos al indio computado) if(Serial. piSerial=Serial. si no hay señal espera un tiempo y se ejecuta de nuevo { funcionMedida(). pi=2000. // pone el pin como salida pinMode(eco. default: Serial. si existe algo ejeecuta el codigo entre los corchetes.// pone el pin como salida pinMode(s2.// pin de deteccion de señar.// pone el pin a tierra digitalWrite(s3. // el 10 es el codigo de line feed. //inicia el potocolo de comunicacion serial con pc 9600 baudios funcionMedida().LOW). const int disparo = 32. OUTPUT). } void loop(){ Serial. // el 13 es el codigo de retorno de carro. OUTPUT).// pone el pin a tierra digitalWrite(s2. en algunas comunicaciones puede aparecer. esta condicion evita ese problema case 49: Serial.println("El dato de entrada no es un numero entre 1 y 4"). case 51: Serial.// pone el pin como salida pinMode(s3. break. const int s3 = 24.const int s1 = 22. break.println("Piso solicitado: 3"). switch(piSerial){ case 10: goto inicio. // 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. OUTPUT).println("Piso solicitado: 1"). break.read(). pi=1000.begin(9600). case 50: Serial. break.// pone el pin como salida digitalWrite(s1. { pinMode(disparo.// pone el pin a tierra digitalWrite(s4. Es una salida const int eco = 33. unsigned int tiempoMax. int pi. } . goto inicio.// pone el pin como salida pinMode(s4. OUTPUT).println("Piso solicitado: 4").LOW). // pone el pin como entrada pinMode(s1. const int s2 = 23.available() > 0 ) // chequea si se mando algo desde la pc. en algunas comunicaciones puede aparecer.LOW). Es una entrada /*********************** * Decralarion de variables *************************/ volatile volatile volatile volatile volatile int piSerial. //pin de disparo de señal. INPUT). pi=450. unsigned int tiempoMin.// pone el pin a tierra Serial.LOW). esta condicion evita ese problema case 13: goto inicio. OUTPUT). unsigned int tiempo.println("ingrese piso al que desea ir y presione enter"). // es el valor leido del puerto serial int paso=1. pi=1500.

case 5: digitalWrite(s2.LOW). Serial. giroMotor(). delay(time). } else{ delay(500). Serial.LOW). case 4: digitalWrite(s3.subirMotor(). digitalWrite(s4. break.LOW). goto inicio.. switch(paso){ case 1: digitalWrite(s1. case 6: digitalWrite(s4. } } } else { digitalWrite(s1. } } void giroMotor(){ Serial. break.HIGH). delay(time). digitalWrite(s4.").LOW). delay(time). } paso=2. break. case 2: digitalWrite(s2.print("paso: ").HIGH).HIGH). while(tiempo<pi){ funcionMedida(). .LOW). delay(time). delay(time). case 3: digitalWrite(s1.println("bajando.. digitalWrite(s2.LOW).LOW). if (paso>8){ paso=1. giroMotor().println(paso). funcionMedida().HIGH). Serial.println("subiendo. digitalWrite(s3. delay(time). paso=paso+1.."). int time=20. break.. while(tiempo>pi){ delay(5). } } void subirMotor() { if(tiempo<pi){ funcionMedida(). break. break.

case 7: digitalWrite(s3. break. 5.LOW). HIGH). //espera 10 microsegundos (especificado por fabricante) digitalWrite(disparo.//pone el pin disparo a cero delayMicroseconds(2). HIGH). } } unsigned int funcionMedida(){//la funcion en si no devuelve ni toma valores externos a ella ningun valor. digitalWrite(disparo. digitalWrite(disparo. case 8: digitalWrite(s1.HIGH). //espera 2 microsegundos tiempo = pulseIn(eco. break. //espera 2 microsegundos //delay(50). // guarda en la variable tiempo los microsegundo que se mantiene en alto el pin eco return tiempo. LOW). Diagrama de cableado: 6. //pone el pin disparo a cero delayMicroseconds(2). delay(time). delay(time). LOW). }. pero escribe directamente en las variables tiempo=0. Dificultades y soluciones: (Además de las dificultades de programación) . //pone el pin disparo a uno delayMicroseconds(10).

además el ascensor no subía ni bajaba adecuadamente. la falla era cuando colocábamos el sensor dentro de la estructura. Analizamos el problema ya que el sensor medía perfectamente fuera de la estructura del ascensor. logrando así una mejor precisión Después analizando las medidas tuvimos la dificultad que al llegar al tercer piso no tenía una buena medida. Al sacarle esas barras horizontales de la estructura el sensor funcionaba con un margen de error de 1cm. hicimos el primer prototipo y fallo que no era estable a la hora del uso. 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. más eficaz y más 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. a veces no fue muy preciso ya que las medidas se tomaban a intervalos muy pequeños de tiempo. en un principio íbamos a usar un motor de CC común con un puente H para su inversión de giro y la dificultad que teníamos era mantener el ascensor quieto en un piso el peso de la cabina hacía que se baje solo. Diseño del ascensor y adecuarlo al proyecto. Por eso decidimos usar un motor paso a paso de 32v que tenía más potencia. . entonces hicimos el segundo prototipo que la estructura es más 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.La calibración del sensor. Ya que el ultrasonido se propagaba con un ángulo de 30° y había algún tipo de interferencia con la estructura. para mejorarlo se dio más tiempo entre medida y medida.