El ascensor

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á:

ascenseur-global_label.jpg

Los detalles de la cabina

detail-cabine.jpg

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:

marquage-etage.jpg

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:

HautThymioAscenseur.jpg
4etagesVertical3-700.jpg

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
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License