Diferencia entre revisiones de «Seguidor de Luz»

De Proyecto Butiá
Saltar a: navegación, buscar
(Implementación)
(Implementación)
Línea 27: Línea 27:
 
==Implementación==
 
==Implementación==
  
La implementación del seguidor de luz fue realizada en Python utilizando la librería [[Pybot|pybot]]. El codigo comleto esta disponible en el siguiente [https://github.com/fabriciog09/seguidor-luz.got Repositorio].  
+
La implementación del seguidor de luz fue realizada en Python utilizando la librería [[PyBot]]. El codigo comleto esta disponible en el siguiente [https://github.com/fabriciog09/seguidor-luz.got Repositorio].  
  
  

Revisión del 18:48 27 jun 2020

Introducción

Materiales

  • Kit Robótico Butia.
  • 4 sensores de luz.
  • Esfera de Espuma Plast.
  • Carton sueco o similares.
  • Cinta Aisladora.
  • XO/pc con TurtleBots y el Plugin de Butia.

Construcción

Paso 1: Retirar la rueda derecha del Kit butia junto a su soporte.

Paso 2: Unir dos barras de encastre en forma de L y con dos tornillos fijarlas a la rueda.

Paso 3: Recortar un soporte auxiliar para el motor y con cinta aisladora unirlo al la rueda izquierda del robot Butiá.

Paso 4: Cortar un Cuadrado de cartón de 25 cm de lado, realizarle los agujeros correspondientes y con dos tornillos unirlo a la L de barras de encastre.

Paso 5: Tomar media esfera de espuma Plast y pegar con cinta doble faz los cuatro sensores de luz.

Paso 6: Conectar los sensores a los respectivo puertos de la placa Butiá. En este ejemplo : 1 - Arriba, 3 - Abajo, 5 - Izquierda, 6 Derecha.

Paso 7: Recortar dos soportes en cartón para que el robot Butiá permanezca en forma vertical y unirlos al robot.

Implementación

La implementación del seguidor de luz fue realizada en Python utilizando la librería PyBot. El codigo comleto esta disponible en el siguiente Repositorio.


Comencemos!!!

Importamos la librería PyBot

   sys.path.insert(0, '/home/olpc/Activities/TurtleBots.activity/plugins/butia')
   sys.path.insert(0, "/usr/share/sugar/activities/TurtleBots.activity/plugins/butia")

Importamos el módulo de pybot

   from pybot import usb4butia

Generamos una instancia de la placa USB4Butia

   robot = usb4butia.USB4Butia()
   robot.refresh()


Definimos una comprador de dos números aplicando un tolerancia

   tolerance = 5000
   def isBigger(num1, num2, tolerance):
       return (num1 - tolerance)>num2

Definimos las funciones que retornan el valor de cada uno de los 4 sensores de luz.

Para eliminar las diferencias en las mediciones de los sensores provocadas por la luz ambiente almacenamos el valor inicial de cada sensor y para eliminar errores de medición de los sensores utilizamos el promedio de 10 mediciones.

   acumulateTopLight = 0
   for i in range(10):
       acumulateTopLight += robot.getLight(1) 
   topLight_init = acumulateTopLight / 10
       acumulateBottomLight = 0
   for i in range(10):
       acumulateBottomLight += robot.getLight(3)
   bottomLight_init =  acumulateBottomLight / 10
       acumulateLeftLight = 0
   for i in range(10):
       acumulateLeftLight += robot.getLight(5)
   leftLight_init = acumulateLeftLight / 10
       acumulateRightLight = 0
   for i in range(10):
       acumulateRightLight += robot.getLight(6)
   rightLight_init = acumulateRightLight /10    
   def getTopLight():
       acumulateTopLight = 0
       for i in range(10):
           acumulateTopLight += robot.getLight(1) 
       return (acumulateTopLight/10) - topLight_init
   def getBottomLight():
       acumulateBottomLight = 0
       for i in range(10):
           acumulateBottomLight += robot.getLight(3)
       return (acumulateBottomLight/10) - bottomLight_init
   def getLeftLight():
       acumulateLeftLight = 0
       for i in range(10):
           acumulateLeftLight += robot.getLight(5)
       return (acumulateLeftLight/10) - leftLight_init
   def getRightLight():
       acumulateRightLight = 0
       for i in range(10):
           acumulateRightLight += robot.getLight(6)
       return (acumulateRightLight/10) - rightLight_init

Definimos las funciones para el desplazamiento de los motores. Debido a que el movimiento hacia arriba exige mayor esfuerzo del motor aumentamos el valor de la velocidad de este

   def goRight():
       robot.set2MotorSpeed(1, 200, 0, 0)
       print("goRight")
   def goLeft():
       robot.set2MotorSpeed(0, 200, 0, 0)
       print("goLeft")
   def goUp():
       robot.set2MotorSpeed(0, 0, 0, 500)
       print("goUp")
   def goDown():
       robot.set2MotorSpeed(0, 0, 1, 200)
       print("goDown")
   def stop():
       robot.set2MotorSpeed(0, 0, 0, 0)
       print("stop")

En cada interacción comparamos las mediciones de los sensores y desplazamos los motores según corresponda Primero se realiza el movimiento vertical y cuando la ubicación vertical es las deseada se realiza el desplazamiento horizontal

  • Si el valor del sensor superior es mayor al inferior se realiza un movimiento hacia arriba
  • Si el valor del sensor inferior es mayor al superior se realiza un movimiento hacia abajo
  • Si el valor del sensor izquierdo es mayor al derecho se realiza un movimiento hacia la izquierda
  • Si el valor del sensor derecho es mayor al izquierdo se realiza un movimiento hacia la derecha
   while (True):
       topLight = getTopLight()
       print( "Top Light",topLight)
       bottomLight = getBottomLight()
       print( "Botom Light", bottomLight)
       if isBigger(topLight,bottomLight, tolerance) : 
           goUp()
       elif isBigger(bottomLight,topLight, tolerance) : 
           goDown()
       else:
           leftLight = getLeftLight()
           print( "Left Light",leftLight)
           rightLight = getRightLight()
           print( "Right Light", rightLight)
           if isBigger(leftLight,rightLight, tolerance) : 
               goLeft()
           elif isBigger(rightLight,leftLight, tolerance) : 
               goRight()
       time.sleep(1)
       stop()
       time.sleep(1)