El ascensor es un ejercicio de programación conocida. Existe, por ejemplo en la forma de Kidule. Aquí te mostramos la realización de un ascensor programable usando tu Thymio II. El ascensor se compone esencialmente de una cabina motorizados, una serie de puntos en su recorrido para marcar los pisos y una interfaz para el usuario de elegir el destino (piso).
Aquí está:
Los detalles de la cabina
Algunas explicaciones:
Thymio II se utiliza para alimentar el movimiento vertical de la cabina, detectar los pisos y recibir órdenes del usuario.
La cabina está montada sobre un carril de guía vertical fijada al edificio o estructura. Una cadena está unida a la parte superior de la guía. La cadena se enrolla usando uno los motores de Thymio. Esto permite el desplazamiento vertical de la cabina a lo largo de la guía.
Para identificar los pisos, se dispone una serie de marcas a la altura correcta. Estas marcas son de color blanco y muy reflectivas. Se pueden detectar con los sensores del suelo del robot. En la siguiente imagen puedes ver a Thymio II y las marcas blanca:
Por último, puedes utilizar los botones de Thymio II para indicarle si sube o baja, y cuántos pisos. Con el siguiente código ASEBA basta con presionar el botón de flecha hacia arriba o hacia abajo el número de pisos desea moverse, y una vez presionado el botón del medio, ascensor el ascensor comienza a moverse hacia el destino indicado (ver video al final de la página).
var vitesse # velocidad de la cabina
var etage # numero de pisos a pasar (relativo)
etage = 0 # inicialización del piso
# interfaz de usuario:
onevent buttons
when button.forward==1 do # subir
if vitesse == -300 then
etage = 0
end
vitesse = 300
etage = etage + 1 # aumentar el número de niveles a pasar
end
when button.backward==1 do # bajar
if vitesse == 300 then
etage = 0
end
vitesse = -300
etage = etage + 1
end
when button.center==1 do # dirijirse al destino
motor.left.target = vitesse
end
# control del paso de niveles:
onevent prox
when prox.ground.reflected[0] > 100 do # aquí se detecta una marca de piso. El valor 100 depende de la distancia y el color de las marcas.
etage = etage - 1
if etage == 0 then # llega al destino
vitesse = 0
motor.left.target = vitesse
end
end
Este código es muy reducido. Puedes agregar la visualización del piso (color), inicializar en cero ascensor con sensores de proximidad traseros, anunciar el piso con sonidos pregrabados (la voz del ascensor), puerta motorizada con el segundo motor, etc…
Por último, el video de su funcionamiento:
Otro ejemplo de ascensor:
Thymio se suspende en una superficie negra con rayas blancas que simulan los pisos.
Una cadena está unida a la parte superior y se enrolla con los dos motores de Thymio II. Así se logra el desplazamiento vertical. Las bandas blancas se detectan con los proxímetros inferiores.
Para establecer la posición inicial del ascensor, pulsa la flecha izquierda.
El sensor « prox.horizontal[2] » detecta el suelo y se inicializa en el piso 0.
Se utilizan las flechas arriba y abajo para seleccionar el piso destino. Se presiona
« Start » , el botón central y el ascensor se detendrá en el piso seleccionado.
Este ejemplo está pensado para 4 pisos pero se puede extender hasta un máximo de 7.
El piso se indica en el arreglo circular de « leds » : « leds.circle ».
El ascensor se puede detener en cualquier momento presionando la flecha derecha.
Código :
var vitesse # velocidad de la cabina
var etage =-1 # número de pisos a avanzar (relativo)
var init =0
var positetage=0
var ledetage[8]
var i =0
call leds.circle(31, 0, 0, 0, 0, 0, 0, 0)
# interface utilisateur:
onevent buttons
when button.right ==1 do
vitesse=-300
motor.left.target = vitesse
motor.right.target =vitesse
end
when button.forward==1 do # Disminuir piso
if etage>1 then
etage = etage - 1 #
end
end
when button.backward==1 do # Aumentar piso
if etage<4 then
etage = etage + 1
end
end
when button.left ==1 do # Detener
vitesse=0
init=0
motor.left.target = vitesse
motor.right.target =vitesse
end
when button.center==1 and init==1 do # Iniciar
if etage > positetage and init==1 then
vitesse=300
motor.left.target = vitesse
motor.right.target = vitesse
end
if etage < positetage and init ==1 then
vitesse =-300
motor.left.target = vitesse
motor.right.target = vitesse
end
end
# control del cambio de piso:
onevent prox
when prox.ground.reflected[0] >600 do
if etage > positetage and init==1 then
positetage = positetage + 1
vitesse=300
motor.left.target = vitesse
motor.right.target = vitesse
end
if etage < positetage and init ==1 then
positetage = positetage - 1
vitesse =-300
motor.left.target = vitesse
motor.right.target = vitesse
end
if etage==positetage and init==1 then
vitesse = 0
motor.left.target = vitesse
motor.right.target = vitesse
end
#Affiche etage
for i in 0:7 do #Tabla a 0
ledetage[i]=0
end
ledetage[positetage]=31
call leds.circle(ledetage[0] , ledetage[1], ledetage[2], ledetage[3], ledetage[4], ledetage[5], ledetage[6], ledetage[7])
end
when prox.horizontal[2] >3900 do #piso =0
vitesse=0
motor.left.target = vitesse
motor.right.target =vitesse
etage=0
positetage=0
init=1
end