Ce projet fournit une interface web (Flask) pour piloter un robot à deux moteurs DC via un L293D, en utilisant le Raspberry Pi.
- EN1 = GPIO4 (ATTENTION: désactiver l'interface 1-Wire si activée, voir plus bas)
- IN1 = GPIO17
- IN2 = GPIO22
- IN3 = GPIO25
- IN4 = GPIO23
- EN2 = GPIO24
L293D:
- Moteur droit: OUT1 (pin 3) = +, OUT2 (pin 6) = -
- Moteur gauche: OUT4 (pin 14) = +, OUT3 (pin 11) = -
- Vcc1 (pin 16) = 5V du Pi (logique)
- Vcc2 (pin 8) = + alimentation moteurs (pack piles)
- GND (pins 4, 5, 12, 13) = GND commun (Pi + pack piles)
Assure-toi que:
- Le GND du pack piles et le GND du Raspberry Pi sont communs.
- Ne jamais alimenter les moteurs directement depuis le 5V du Pi. Utilise Vcc2 (pin 8) du L293D avec une source séparée (ton pack piles).
- Les moteurs induisent des pics: garde les fils courts, vérifie les connexions, et si possible ajoute un inter général côté pack piles.
sudo apt update
sudo apt install -y python3-venv python3-pipSi GPIO4 est utilisé (EN1), désactive 1-Wire (qui occupe GPIO4) dans raspi-config:
sudo raspi-config
# Interface Options -> 1-Wire -> Disable
sudo rebootgit clone <ton-repo-ou-copie> robot-web
cd robot-web
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtsource .venv/bin/activate
python app.py
# puis sur ton téléphone/PC: http://<ip_du_pi>:8000Crée le fichier service:
sudo tee /etc/systemd/system/robot-web.service >/dev/null <<'EOF'
[Unit]
Description=Robot Web Controller (Flask + Waitress)
After=network-online.target
Wants=network-online.target
[Service]
User=pi
WorkingDirectory=/home/pi/robot-web
Environment="PYTHONUNBUFFERED=1"
ExecStart=/home/pi/robot-web/.venv/bin/python /home/pi/robot-web/app.py
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOFActive et démarre:
sudo systemctl daemon-reload
sudo systemctl enable robot-web
sudo systemctl start robot-web
sudo systemctl status robot-webPOST /api/moveJSON:{ "action": "forward|backward|left|right|curve_left|curve_right|stop", "speed": 0-100 }POST /api/speedJSON:{ "speed": 0-100 }GET /api/health->{ "ok": true }
Exemple:
curl -X POST -H "Content-Type: application/json" \
-d '{"action":"forward","speed":70}' \
http://<ip_du_pi>:8000/api/move- Si rien ne se passe:
- Vérifie GND commun Pi ↔ pack piles.
- Vérifie que
1-Wireest désactivé si EN1=GPIO4. - Mesure la tension du pack piles sous charge (peut chuter).
- Regarde les logs:
journalctl -u robot-web -f.
- Vibrations/bruit important:
- Essaie de changer la fréquence PWM (
PWM_FREQdansapp.py), valeurs courantes: 500, 1000, 2000 Hz.
- Essaie de changer la fréquence PWM (
- Le Pi redémarre / se fige:
- Les moteurs tirent trop de courant: séparés déjà via Vcc2, mais vérifie que le GND est commun et que les fils sont épais/courts. Ajoute éventuellement un condensateur (100µF–470µF) sur le pack piles.
- Ta page n’a pas d’authentification. Sur réseau public, protège via un réseau isolé ou un reverse proxy avec auth.
- Arrêt d’urgence: bouton STOP, relâchement des touches clavier, et arrêt automatique quand l’onglet perd le focus (mouseup/touchend) envoient
stop.
Bon hack et dis-moi si tu veux ajouter:
- Un joystick virtuel mobile
- Un streaming vidéo (picamera2 + MJPEG)
- Des modes d’asservissement (PID) ou capteurs (ultrasons) pour l’évitement d’obstacles.