Vous êtes sur la page 1sur 8

A.N.E.P.

Instituto Tecnolgico Superior


F. Arias L. Balparda.

Consejo de Educacin
Tcnico Profesional

Gral. Flores 3591 esq.

(Universidad del Trabajo

Bvar. Jos Batlle y Ordez.

del Uruguay)

Montevideo. Uruguay.

PROYECTO
MICROPROCESADORES
ASCENSOR 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 de hardware libre, basada en una placa con


un microcontrolador y un software que en nuestro caso usamos ATMEGA2560.
El hardware consiste en una placa con un microcontrolador Atmel AVR y 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:
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, 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 20 C de temperatura, con
50% de humedad y a nivel 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 salida
const int eco = 33;// pin de deteccion de sear. Es una entrada
/***********************
* Decralarion de variables
*************************/
volatile
volatile
volatile
volatile
volatile

int piSerial; // es el valor leido del puerto serial


int paso=1;
unsigned int tiempo;
unsigned int tiempoMin;
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(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.

Vous aimerez peut-être aussi