Controle los robots Raspberry Pi a través del control remoto por infrarrojos (parte 3)

Después de que nuestro robot ya haya aprendido a conducir y a seguir una línea, ahora queremos dejar que se controle de forma remota. Para ello utilizaremos primero un mando a distancia por infrarrojos y posteriormente posiblemente un mando de Xbox 360. Además de controlar la capacidad de conducción, también se deben configurar los modos (seguir línea, piloto automático, etc.).

En esta parte de los tutoriales del robot Raspberry Pi, programamos el receptor IR y creamos los comandos para el control remoto. El control remoto también se muestra en el video.

Piezas de hardware requeridas

Además de los componentes anteriores, también necesitamos un control remoto IR y un diodo infrarrojo para este tutorial (disponible aquí como kit). Por lo general, los cables de puente ya están incluidos y el diodo se puede conectar directamente. Si compra los diodos individualmente (o aún los tiene disponibles), consulte la hoja de datos para estar seguro con el siguiente cableado.

También puede usar el diodo IR con control remoto para el control remoto general de su Raspberry Pi, ya sea en un sistema multimedia como KODI o simplemente para iniciar scripts.

Conexión del receptor IR

La conexión del receptor de infrarrojos a la Raspberry Pi es muy sencilla, ya que el módulo solo tiene tres pines. Si está utilizando un receptor que incluye un PCB (ver arriba), se nombrarán las conexiones. De lo contrario, tendría que buscar en la hoja de datos la asignación correcta, ya que esto puede diferir.

En principio, el pin VCC está conectado a un pin libre de 5 V de la Raspberry Pi, el pin GND a tierra/GND de la Pi y el pin etiquetado IN/DATA va a GPIO 26. Circuito anterior del robot Raspberry Pi (incluido IR receptor)

Preparación

Para utilizar el receptor de infrarrojos, necesitamos el programa Lirc. Ya he mostrado la instalación y configuración de Lirc en un tutorial anterior. Supongo que esto se ha implementado porque necesitamos un Lirc a continuación. La sección inferior (control remoto universal infrarrojo Raspberry Pi – iniciar programas) se trata de crear el archivo lircrc. Para controlar el robot y reconocer los comandos más adelante en nuestro script, necesitamos crear dicho archivo.

En cuanto hayas instalado y probado Lirc, creamos este archivo en la carpeta en la que se encuentran el resto de scripts del robot:

cd robot/ sudo nano lircrc

El siguiente contenido se escribe en el archivo. Por supuesto, también puede elegir una tarea diferente, he elegido esta:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

dieciséis

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

empezar

botón = CLAVE_1

prog = robot_ir

config = IZQUIERDA_ADELANTE

fin

empezar

botón = CLAVE_2

prog = robot_ir

config = ADELANTE

fin

empezar

botón = CLAVE_3

prog = robot_ir

config = HACIA ADELANTE_DERECHA

fin

empezar

botón = CLAVE_4

prog = robot_ir

configuración = IZQUIERDA

fin

empezar

botón = CLAVE_5

prog = robot_ir

configuración = DETENER

fin

empezar

botón = KEY_6

prog = robot_ir

configuración = DERECHO

fin

empezar

botón = CLAVE_7

prog = robot_ir

config = IZQUIERDA_ATRÁS

fin

empezar

botón = KEY_8

prog = robot_ir

config = HACIA ATRÁS

fin

empezar

botón = KEY_9

prog = robot_ir

config = DERECHA_ATRÁS

fin

empezar

botón = TECLA_PAUSA

prog = robot_ir

config = LINE_FOLLOW_ON

fin

En un momento esperaremos los códigos del control remoto. Para hacer esto, la cadena de caracteres se transfiere al programa en «config». También puede asignar otras teclas aquí más tarde, por ejemplo, para que otras acciones estén disponibles más adelante. En mi caso, el modo de seguir una línea se inicia con el botón Play/Pause.

Para poder usar Lirc a través de Python, instalamos una biblioteca correspondiente:

sudo apt-get install python-lirc

Si está utilizando Python 3, el paquete es python3-lirc.

Código para recibir señales infrarrojas

Estamos ampliando nuestra clase de robot creada anteriormente. Para ello, creamos el IRControl() función después del final de la lineFollowModeOn(self)función.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

dieciséis

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

def IRControl(auto):

sockid = lirc.init(«robot_ir», «lircrc»)

dist_per_leypress = 30.0 #cm

mientras que es cierto:

#self.motor.stop()

código = lirc.nextcode()[0]

imprimir (código)

si el código == «ADELANTE»:

auto.motor.adelante()

time.sleep(dist_per_leypress / self.motor.DIST_PER_SEC)

self.motor.stop()

código elif == «IZQUIERDA_ADELANTE»:

# 30 grados gire a la izquierda, luego deténgase

self.motor.forwardRight()

time.sleep(self.motor.SEC_PER_TURN / 360.0 * 30.0)

self.motor.stop()

código elif == «DERECHA_ADELANTE»:

# 30 grados gire a la derecha, luego pare

self.motor.forwardLeft()

time.sleep(self.motor.SEC_PER_TURN / 360.0 * 30.0)

self.motor.stop()

código elif == «IZQUIERDA»:

self.motor.forwardRight()

time.sleep(self.motor.SEC_PER_TURN / 360.0 * 90.0)

self.motor.stop()

código elif == «DERECHO»:

self.motor.forwardLeft()

time.sleep(self.motor.SEC_PER_TURN / 360.0 * 90.0)

self.motor.stop()

código elif == «HACIA ATRÁS»:

auto.motor.hacia atrás()

time.sleep(dist_per_leypress / self.motor.DIST_PER_SEC)

self.motor.stop()

código elif == «IZQUIERDA_ATRÁS»:

# 30 grados gire a la izquierda hacia atrás, luego deténgase

self.motor.hacia atrásDerecha()

time.sleep(self.motor.SEC_PER_TURN / 360.0 * 30.0)

self.motor.stop()

código elif == «DERECHA_ATRÁS»:

# 30 grados gire a la derecha hacia atrás, luego deténgase

self.motor.atrásIzquierda()

time.sleep(self.motor.SEC_PER_TURN / 360.0 * 30.0)

self.motor.stop()

código elif == «DETENER»:

self.motor.stop()

código elif == «LINE_FOLLOW_ON»:

self.lineFollowModeOn()

También puede ver el código completo (anterior) aquí. En el Nano Editor, guardas con CTRL + O y cierras con CTRL + X.

Proceso de fondo para controlar el robot

Ahora queremos probar la funcionalidad. Tenemos dos opciones para esto. La más simple es que ingresamos el siguiente código de Python en la consola (después de sudo python). La otra variante es crear un script con el código apropiado e iniciarlo en segundo plano después de arrancar. Esto es, por ejemplo, especialmente importante en Raspberry Pi Zero si no tiene un adaptador WLAN conectado. Sugerencia: si también tiene un Raspberry Pi 3/2B «grande», primero puede reproducir el código en el Pi a través de SSH o FTP y luego simplemente insertar la tarjeta Micro SD en el Zero.

El código para el archivo de prueba es bastante simple (sudo nano test.py):

de robot importar robot

tiempo de importación

tratar:

r=robot()

r.IRControl()

#r.lineFollowModeOn()

#mientras sea cierto:

# tiempo.dormir(0.1)

excepto:

r.motor.stop()

O iniciamos el archivo (sudo nano test.py) o dejamos que se abra automáticamente al reiniciar.

La forma más fácil de hacer esto es usar crontab:

crontab -e

Al final escribimos la siguiente línea:

@reboot ~/robot/test.py

A partir de ahora, el archivo se activará al reiniciar y podrá controlar el robot Raspberry Pi de forma remota a través del control remoto por infrarrojos.

En el próximo tutorial, le daremos al robot un “piloto automático” para que se mueva automáticamente hacia donde no haya ningún objeto en el camino. La parte 6 de la serie también muestra controlarlo a través del controlador Xbox 360.