Comment contrôler votre robot Raspberry Pi avec une télécommande TV

Si vous avez acheté l’un de nos produits abordables Les kits EduKit Robotics, vous arriverez sans aucun doute à un stade où vous voudrez avancer davantage en personnalisant et en créant votre propre robot unique.

Beaucoup de nos clients font quelque chose en introduisant un moyen de contrôler le robot à distance, vous permettant de prendre le contrôle manuel des actions du robot.

Il existe de nombreuses façons de procéder, certaines plus compliquées que d’autres. Pour une option simple, flexible et extensible, nous vous recommandons d’ajouter un FLIRC USB à votre robot.

Robot EduKit avec FLIRC USB

FLIRC?

Si vous n’avez pas encore entendu parler de FLIRC ou si vous souhaitez en savoir plus sur son fonctionnement, consultez notre blog précédent ici.

Il vous dira tout ce que vous devez savoir, y compris comment configurer le récepteur USB (ce qui est vraiment facile!).

FLIRC Robot Control

La raison pour laquelle nous aimons utiliser un USB FLIRC sur notre robot EduKit est parce qu’il vous permet d’utiliser presque n’importe quelle télécommande infrarouge comme contrôleur. Vous en avez probablement quelques-uns dans la maison – la télévision, la boîte multimédia, le DVD, la chaîne Hi-Fi et d’autres télécommandes utilisent généralement la technologie infrarouge.

Nous disons simplement au FLIRC de parler à votre Raspberry Pi (nous utilisons un Raspberry Pi ZeroW) tout comme un clavier, et Python ne connaît rien de différent! Cela rend la programmation très simple car elle ne nécessite aucune bibliothèque ni aucun code supplémentaire.

Les étapes pour y parvenir sont simples:

  1. Créez le script pour permettre à votre robot EduKit d’accepter les touches du clavier comme commandes
  2. Configurez le FLIRC à l’aide du logiciel FLIRC sur votre machine PC / Mac / Linux
  3. Branchez le FLIRC sur votre Raspberry Pi
  4. Aller!

Voyons comment.

Télécommande pour robot USB FLIRC

Hypothèses

Pour ce didacticiel, nous supposons que vous avez déjà construit le robot EduKit de base et que vous l’avez testé avec le code dans le Feuilles de calcul EduKit.

Cela signifie que vous devez déjà être familiarisé avec les éléments suivants:

  • Terminal
  • Répertoires
  • Création et exécution de scripts python
  • Le code de base du contrôleur de moteur EduKit

Contenu du kit de robotique CamJam EduKit

Configuration de la bibliothèque

Mettons à jour votre Raspberry Pi avant de commencer – c’est juste une bonne pratique.

Ouvrez une session de terminal, entrez la commande suivante, appuyez sur Entrée, puis suivez les invites à l’écran:

sudo apt-get update

Laissez ça courir. Une fois terminé, suivez-le avec cette commande, suivi de nouveau par enter:

sudo apt-get upgrade

Ensuite, pour installer la bibliothèque d’entrées, tapez la commande suivante et appuyez de nouveau sur Entrée:

sudo pip3 install inputs

Mise à niveau de Raspbian dans le terminal

La bibliothèque d’entrées

Le code utilisé pour contrôler votre robot avec FLIRC est un cocktail des Feuille de calcul Edukit code et une belle petite bibliothèque python appelée contributions.

La bibliothèque d’entrées python vous permet de détecter les entrées d’un large éventail d’appareils – y compris l’humble clavier. C’est idéal pour une utilisation en conjonction avec le FLIRC USB, car le FLIRC nous permet d’utiliser n’importe quelle télécommande infrarouge existante pour envoyer des commandes en tant que clavier – mappant n’importe quel bouton de télécommande que nous aimons à n’importe quel bouton de clavier.

Votre télécommande parle ensuite à FLIRC via Infra-rouge, FLIRC parle au Raspberry Pi comme s’il s’agissait d’un clavier, et Python (et la bibliothèque d’entrées) ne sait pas mieux!

La bibliothèque d’entrée examine la touche enfoncée et l’état de cette clé, c’est-à-dire qu’elle m’enregistrera pressage «W» comme état 1, mais enregistre également la clé «W» comme état 0 lorsque je lâchez la clé. Plus d’informations à ce sujet dans la section code ci-dessous.

FLIRC robot arrière

Code

Voici le script Python pour contrôler votre robot à l’aide des touches W (haut), S (bas), A (gauche) et D (droite) d’un clavier. J’ai également défini la touche E pour arrêter le programme (ce qui arrête tous les moteurs en marche et nettoie également le GPIO).

Vous pouvez saisir le code manuellement (comme expliqué dans le Feuille de calcul du robot EduKit 1), ou téléchargez notre Script FLIRC EduKit Robot ici.

Créez votre script python dans le même répertoire que les exemples EduKit pour que tout soit au même endroit (utilisez cd EduKitRobotics pour entrer dans ce répertoire). Aussi, pour que nous suivions tous ensemble, nommez votre script EduKitFLIRC.py.

Nous allons vous montrer comment mapper le FLIRC USB aux boutons de la télécommande de votre téléviseur dans un instant, mais pour l’instant, voici quelques conseils sur le fonctionnement du code:

#!/usr/bin/python

# Importations
importer RPi.GPIO en tant que GPIO
des entrées importent get_key

# Réglez le mode GPIO sur BCM
GPIO.setmode (GPIO.BCM)

# Moteur A direction GPIO (sortie)
GPIO.setup (7, GPIO.OUT)
GPIO.setup (8, GPIO.OUT)

# Direction GPIO du moteur B (sortie)
GPIO.setup (9, GPIO.OUT)
GPIO.setup (10, GPIO.OUT)

def main (): # Notre programme principal

lastkey = “” # Créer une variable

tandis que True: # Démarrer une boucle

# Démarrer une instruction for qui vérifiera les pressions sur les touches
events = get_key ()
pour événement dans événements:

# Si des instructions pour chaque touche, appuyez sur
# La touche est l’état 1
# La libération de clé est à l’état 0

if event.code == “KEY_W” et event.state == 1: # Si ‘W’ est ‘pressé’
imprimer (“Avant”)
GPIO.output (7, 1)
GPIO.output (8, 0)
GPIO.output (9, 1)
GPIO.output (10, 0)
lastkey = “KEY_W” # Remplacez la variable lastkey par la touche que vous venez d’appuyer

if event.code == “KEY_S” et event.state == 1: # Si ‘S’ est ‘pressé’
imprimer (“En arrière”)
GPIO.output (7, 0)
GPIO.output (8, 1)
GPIO.output (9, 0)
GPIO.output (10, 1)
lastkey = “KEY_S” # Remplacez la variable lastkey par la touche que vous venez d’appuyer

if event.code == “KEY_A” et event.state == 1: # Si ‘A’ est ‘pressé’
imprimer (“Gauche”)
GPIO.output (7, 1)
GPIO.output (8, 0)
GPIO.output (9, 0)
GPIO.output (10, 1)
lastkey = “KEY_A” # Remplacez la variable lastkey par la touche que vous venez d’appuyer

if event.code == “KEY_D” et event.state == 1: # Si ‘D’ est ‘pressé’
imprimer (“Droite”)
GPIO.output (7, 0)
GPIO.output (8, 1)
GPIO.output (9, 1)
GPIO.output (10, 0)
lastkey = “KEY_D” # Remplacez la variable lastkey par la touche que vous venez d’appuyer

if event.code == “KEY_E” et event.state == 1: # Si ‘E’ est ‘pressé’
imprimer (“quitter”)
quit () # Quitte le script (exécute le bloc ‘Enfin’ au bas de ce script)

# Une instruction elif pour détecter si la dernière pression de touche (variable lastkey) a été relâchée (état 0)
# Si la dernière touche a été relâchée, ce bloc déclenche et arrête les moteurs

elif event.code == lastkey et event.state == 0:
imprimer (“Stop”)
GPIO.output (7, 0)
GPIO.output (8, 0)
GPIO.output (9, 0)
GPIO.output (10, 0)

“” “
si Python exécute ce fichier en tant que programme principal, il définit la variable spéciale __name__
pour avoir une valeur “__main__”. Comme cela sera vrai dans ce cas, cela signifie que cette tentative / sauf
le bloc fonctionnera toujours au début (c’est ce que nous voulons)
“” “

si __name__ == ‘__main__’:

essayez: # Si aucune erreur, exécutez ce bloc
main () #Exécute la fonction main ()

sauf KeyboardInterrupt: #Si le clavier interrompt le programme
passer

enfin: # Arrêtez tous les moteurs et nettoyez le GPIO avant de quitter
print (“Arrêt des moteurs”)
GPIO.output (7, 0)
GPIO.output (8, 0)
GPIO.output (9, 0)
GPIO.output (10, 0)
GPIO.cleanup ()
imprimer (“Au revoir pour l’instant”)

Ligne 5:

Importez une partie de la bibliothèque d’entrées, qui l’apporte simplement dans notre script afin que nous puissions l’utiliser.

from inputs import get_key

Ligne 20:

Nous définissons une nouvelle variable «lastkey» qui stockera la dernière touche enfoncée (plus de détails ci-dessous).

lastkey = "" # Create a variable

Ligne 22:

Démarre une boucle while. Cela maintient le script en cours d’exécution jusqu’à ce que nous quittions manuellement le programme.

while True: # Start a loop

Lignes 25-26:

Ces lignes recherchent constamment une pression sur une touche pour déclencher un «événement».

events = get_key()
for event in events:

Lignes 32-76:

Nous avons ici un certain nombre d’instructions if, une pour chaque clé que nous avons mappée. Si une touche définie est enfoncée (event.state == 1), le code sous cette instruction if s’exécute, puis il continue de vérifier les pressions de touches à nouveau juste après.

  • Chaque instruction if se termine par la mise à jour de «lastkey» avec la touche enfoncée.
  • Nous faisons cela pour éviter d’avoir à définir un bloc distinct pour chaque clé qui indique à Python quoi faire lorsqu’une clé est relâchée (event.state == 0), car ce serait la même action / le même code pour chaque touche, c’est-à-dire que lorsque nous relâchons une touche, nous arrêtons le robot.
  • Ceci est couvert dans les lignes 71-76 où nous disons à Python “Si la dernière touche à appuyer a un état de 0 (enfoncée), arrêtez le robot“. Cela nous fait économiser beaucoup de lignes de code qui feraient essentiellement la même chose.

if event.code == "KEY_W" and event.state == 1: # If 'W' is 'pressed'
print ("Forwards")
GPIO.output(7, 1)
GPIO.output(8, 0)
GPIO.output(9, 1)
GPIO.output(10, 0)
lastkey = "KEY_W" # Change the lastkey variable to the key just pressed

if event.code == “KEY_S” et event.state == 1: # Si ‘S’ est ‘pressé’
imprimer (“En arrière”)
GPIO.output (7, 0)
GPIO.output (8, 1)
GPIO.output (9, 0)
GPIO.output (10, 1)
lastkey = “KEY_S” # Remplacez la variable lastkey par la touche que vous venez d’appuyer

if event.code == “KEY_A” et event.state == 1: # Si ‘A’ est ‘pressé’
imprimer (“Gauche”)
GPIO.output (7, 1)
GPIO.output (8, 0)
GPIO.output (9, 0)
GPIO.output (10, 1)
lastkey = “KEY_A” # Remplacez la variable lastkey par la touche que vous venez d’appuyer

if event.code == “KEY_D” et event.state == 1: # Si ‘D’ est ‘pressé’
imprimer (“Droite”)
GPIO.output (7, 0)
GPIO.output (8, 1)
GPIO.output (9, 1)
GPIO.output (10, 0)
lastkey = “KEY_D” # Remplacez la variable lastkey par la touche que vous venez d’appuyer

if event.code == “KEY_E” et event.state == 1: # Si ‘E’ est ‘pressé’
imprimer (“quitter”)
quit () # Quitte le script (exécute le bloc ‘Enfin’ au bas de ce script)

# Une instruction elif pour détecter si la dernière pression de touche (variable lastkey) a été relâchée (état 0)
# Si la dernière touche a été relâchée, ce bloc déclenche et arrête les moteurs

elif event.code == lastkey et event.state == 0:
imprimer (“Stop”)
GPIO.output (7, 0)
GPIO.output (8, 0)
GPIO.output (9, 0)
GPIO.output (10, 0)

Lignes 84-99:

C’est notre «Essayer / sauf» bloquer. Cela vous permet d’indiquer ce que vous voulez faire en cas d’erreur. La section «try» (notre programme principal) s’exécute s’il n’ya pas d’erreur, la section except s’exécute s’il y en a une – et nous avons défini une «erreur» comme une interruption du clavier (en appuyant sur ctrl + c).

Il s’agit simplement de nous permettre de quitter le programme avec élégance (arrêt des moteurs et nettoyage du GPIO) si nous programmons via un terminal ou similaire.

if __name__ == '__main__':

essayez: # Si aucune erreur, exécutez ce bloc
main () #Exécute la fonction main ()

sauf KeyboardInterrupt: #Si le clavier interrompt le programme
passer

enfin: # Arrêtez tous les moteurs et nettoyez le GPIO avant de quitter
print (“Arrêt des moteurs”)
GPIO.output (7, 0)
GPIO.output (8, 0)
GPIO.output (9, 0)
GPIO.output (10, 0)
GPIO.cleanup ()
imprimer (“Au revoir pour l’instant”)

Configuration de FLIRC comme clavier

Le code de votre robot étant prêt à accepter les entrées du clavier, nous devons configurer notre FLIRC USB comme clavier, puis mapper nos boutons à distance aux commandes du clavier.

Insérez votre FLIRC USB dans votre ordinateur et ouvrez le Application FLIRC, puis sélectionnez Contrôleurs> Clavier complet.

blank

Dans l’application FLIRC, sélectionnez la touche du clavier «W» (pour la suite):

blank

Prenez ensuite la télécommande infrarouge de votre choix et appuyez sur le bouton que vous jugez approprié pour faire avancer votre robot (touche W). Une fois que le FLIRC enregistre votre appui sur la touche de la télécommande, vous devriez voir un message de confirmation comme l’exemple ci-dessous:

blank

Répétez cette opération pour toutes les commandes du script (W, S, A, D et E), puis quittez l’application.

Déplacez le FLIRC USB de votre PC vers votre robot EduKit Raspberry Pi (vous aurez besoin d’un Cale de convertisseur USB si vous utilisez le Raspberry Pi Zero), et démarrez-le.

Exécution du programme

Assurez-vous que vous êtes dans le répertoire EduKit en entrant la commande suivante:

cd EduKitRobotics

Pour exécuter le code, tapez la commande suivante puis sélectionnez Entrée:

sudo python3 EduKitFLIRC.py

Votre télécommande devrait maintenant contrôler votre robot avec les boutons que vous avez choisis!

blank

Ressources pratiques

Apprentissage connexe

Articles similaires

Bouton retour en haut de la page
Fermer