Contrôler un moteur servo avec un Raspberry Pi via Bluetooth

Ce tutoriel vous apprend à programmer un Raspberry Pi pour gérer un servomoteur en utilisant soit le Bluetooth (module HC-05) ou le BLE (module HM-10). Des instructions étape par étape pour les deux modules sont fournies.

Nous utiliserons l'application Bluetooth Serial Monitor sur un smartphone pour transmettre la valeur de l'angle au Raspberry Pi. Le Raspberry Pi ajustera le servomoteur en fonction de la valeur reçue.

Raspberry Pi Servo Moteur Bluetooth

Préparation du matériel

1×Raspberry Pi 4 Model B
1×HC-05 Bluetooth Module
1×(Alternative) HM-10 BLE Module
1×Servo Motor
1×Jumper Wires
1×(Optional) Screw Terminal Block Shield for Raspberry Pi
1×(Optional) USB-C Power Cable with On/Off Switch for Raspberry Pi 4B
1×(Optional) Plastic Case and Cooling Fan for Raspberry Pi 4B
1×(Optional) HDMI Touch Screen Monitor for Raspberry Pi

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du servomoteur et du module Bluetooth

Si vous n'êtes pas familier avec les servomoteurs, les modules Bluetooth, leurs brochages, capacités et programmation, veuillez consulter les tutoriels suivants pour plus d'informations :

Diagramme de câblage

  • Pour gérer un servomoteur avec Bluetooth classique, le module Bluetooth HC-05 doit être utilisé et le schéma de câblage fourni doit être consulté.
Schéma de câblage Bluetooth pour servo-moteur Raspberry Pi

This image is created using Fritzing. Click to enlarge image

  • Pour gérer un moteur Servo avec BLE, le module BLE HM-10 doit être utilisé. Le schéma de câblage est donné ci-dessous à titre de référence.
Schéma de câblage BLE du moteur servo Raspberry Pi

This image is created using Fritzing. Click to enlarge image

Pour simplifier et organiser votre câblage, nous vous recommandons d'utiliser un Screw Terminal Block Shield pour Raspberry Pi. Ce shield garantit des connexions plus sûres et plus faciles à gérer, comme illustré ci-dessous :

Raspberry Pi Screw Terminal Block Shield

Code Raspberry Pi - contrôle du servo moteur via Bluetooth/BLE

Le code fourni ici peut être utilisé à la fois avec le module Bluetooth HC-10 et le module BLE HM-10.

Étapes rapides

  • Assurez-vous d'avoir Raspbian ou tout autre système d'exploitation compatible avec Raspberry Pi installé sur votre Pi.
  • Assurez-vous que votre Raspberry Pi est connecté au même réseau local que votre PC.
  • Assurez-vous que votre Raspberry Pi est connecté à Internet si vous avez besoin d'installer des bibliothèques.
  • Si c'est la première fois que vous utilisez Raspberry Pi, voyez Installation du logiciel - Raspberry Pi..
  • Connectez votre PC au Raspberry Pi via SSH en utilisant le client SSH intégré sur Linux et macOS ou PuTTY sur Windows. Consultez comment connecter votre PC au Raspberry Pi via SSH.
  • Assurez-vous d'avoir la bibliothèque RPi.GPIO installée. Sinon, installez-la en utilisant la commande suivante :
sudo apt-get update sudo apt-get install python3-rpi.gpio
pip install pyserial
  • Créez un fichier de script Python bluetooth_servo.py et ajoutez le code suivant :
# Ce code Raspberry Pi a été développé par newbiely.fr # Ce code Raspberry Pi est mis à disposition du public sans aucune restriction. # Pour des instructions complètes et des schémas de câblage, veuillez visiter: # https://newbiely.fr/tutorials/raspberry-pi/raspberry-pi-control-servo-motor-via-bluetooth import serial import RPi.GPIO as GPIO from time import sleep # Define pins SERVO_PIN = 16 # GPIO 16 (Servo pin) # Set up GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(SERVO_PIN, GPIO.OUT) # Create serial port for Bluetooth communication bluetooth = serial.Serial('/dev/ttyS0', baudrate=9600, timeout=1) # Create servo object servo = GPIO.PWM(SERVO_PIN, 50) # 50 Hz frequency for standard servo # Start PWM with 0% duty cycle (servo at 0 degrees) servo.start(0) def rotate_servo(angle): duty_cycle = 2 + (angle / 18) # Map angle to duty cycle (for a standard servo) servo.ChangeDutyCycle(duty_cycle) sleep(1) # Give servo time to move # Main program try: bluetooth.flushInput() # Clear any existing data in the input buffer while True: bluetooth.write(b"Raspberry Pi here, command me!\n") if bluetooth.inWaiting() > 0: angle = bluetooth.parseInt() if 0 <= angle <= 180: rotate_servo(angle) bluetooth.write(b"Rotated servo to angle: ") bluetooth.write(str(angle).encode('utf-8')) bluetooth.write(b"\n") else: bluetooth.write(b"Invalid angle: ") bluetooth.write(str(angle).encode('utf-8')) bluetooth.write(b"\n") # Add a delay to avoid excessive looping sleep(0.1) except KeyboardInterrupt: pass finally: servo.stop() GPIO.cleanup() bluetooth.close()
  • Enregistrez le fichier et exécutez le script Python en exécutant la commande suivante dans le terminal :
python3 bluetooth_servo.py

Le script s'exécute en boucle infinie continuellement jusqu'à ce que vous appuyiez sur Ctrl + C dans le terminal.

  • Installez l'application Bluetooth Serial Monitor sur votre smartphone.
  • Ouvrez l'application Bluetooth Serial Monitor sur votre smartphone et choisissez l'option Bluetooth Classique ou BLE, selon le module que vous utilisez.
Application Moniteur Série Bluetooth
  • Connectez l'application au module Bluetooth HC-05 ou au module BLE HM-10.
Appariement du moniteur série Bluetooth
  • Entrez un angle, tel que 45 ou 90, puis appuyez sur le bouton Envoyer.
Application Moniteur Série Bluetooth
  • Observez la modification de l'angle du moteur servo.
  • Examinez les résultats sur l'application Android.
Application de surveillance série Bluetooth

Si vous trouvez l'application Bluetooth Serial Monitor utile, veuillez lui attribuer 5 étoiles sur Play Store. Merci pour votre soutien !

Vidéo

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!