Académique Documents
Professionnel Documents
Culture Documents
Consejo de Educacin
Tcnico Profesional
del Uruguay)
Montevideo. Uruguay.
PROYECTO
MICROPROCESADORES
ASCENSOR CON ULTRASONIDO
AO 2014
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.
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
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
************************/
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(tiempo<pi){
funcionMedida();
Serial.println("subiendo...");
while(tiempo<pi){
funcionMedida();
giroMotor();
paso=paso+1;
if (paso>8){
paso=1;
}
}
}
else
{
digitalWrite(s1,LOW);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
digitalWrite(s4,LOW);
Serial.println("bajando...");
while(tiempo>pi){
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.