Voiture Contrôlée Par Le Mouvement De La Main

Bonjour

Je suis en train de travailler sur un projet qui est une voiture qui pourra être contrôlée grâce à la forme de ma main:
(Je m'excuse si c'est trop long, je veux donner autant de details que je peux)

Composants de la voiture:

Arduino Uno (Officiel)
DC Motor Driver L298N
4 moteurs
4 roues
Arduino Shield v5.0
Module Bluetooth HC-06

Comment contrôler la voiture grâce â des mouvements par la main:
Reconnaissance de position de main: Teachable Machine
Un site web de google qui permet d'entrainer un modèle grâce â des images, chaque différente position et forme de la main va tomber sous une différente catégorie:
Forward, Backward, Left, Right, Stop
Apres l'entrainement, on peut activer la camera et faire des gestes qui vont ensuite etre compris par la machine et qui va donner une réponse, qui est le nom de la catégorie, voici le lien de la machine déjà entrainée: Teachable Machine

Voici les instructions pour utilisation si quelqu'un voudrait bien tester:
Pour avoir la réponse Forward: Ouvrir la main et montrer la paume
Pour avoir la réponse Backward: Faire un poing mais vu de devant
Pour avoir la réponse Left: Garder tous les doigts pliés sauf le pouce et doit pointer vers votre gauche (main retournée, vous devez voir vos doigts)
Pour avoir la réponse Right: Garder tous les doigts pliés sauf le pouce et doit pointer vers votre droite
Pour avoir la réponse Stop: Garder tous les doigts pliés sauf l'index et le majeur en forme du signe de peace (celui utilisé dans les photos)

(De préférence, utiliser la main droite pour de meilleurs résultats, et approcher votre main a la camera jusqu'à ce que l'on voit rien que votre main, mais aussi votre main entière, ne montrez pas votre visage de préférence pour que ca n'interfère pas et pour avoir de meilleurs résultats.)

Si quelqu'un veut creer son propre modelé, notez que l'IA utilise votre PC comme la zone d'entrainement, donc un ancien PC ne sera pas aussi rapide qu'un nouveau durant l'entrainement, et le plus de Cœurs dans le CPU et plus de RAM serait mieux, personnellement je n'ai pas beaucoup, seulement 2x4 Go de DDR4 et 2 cœurs/4processeurs logiques mais c'est déjà assez, je recommande 300-400 images par classe, avec tout cela et 5 classes, le modèle peut etre entrainer en moins de 3 minutes, laissez l'onglet de Teachable Machine ouverte durant l'entrainement sinon il s'arrêtera, si l'onglet indique que Teachable Machine ne répond pas, cliquez sur "Attendre" si le message apparait plus que 3 fois, vous avez utiliser trop d'image ou/et votre PC n'est pas assez fort, pour accéder a un modèle déjà entraîné, vous n'aurez besoin que d'activer la camera

Translateur:

J'ai creer un site web qui permet de relier toutes le chose ensembles pour envoyer un message a l'Arduino, ce site web utilise la camera, et les COM ports sur le PC pour pouvoir se connecter grâce au Bluetooth, il permet de montrer la camera, et puisque le modèle Teachable machine est sous forme de lien et c'est un modèle "Tenserflow.js" C'est facile de l'inclure dans mon site web, codé en JavaScript, ce site web va se lier au modèle et va donner lui donner le output de la camera, le modèle va analyser 30 images par seconde et pour chaque image il va décider quel Output donner: Forward, Backward.....
Le site web va recevoir cette output et va le transformer en Lettre: F,B,L,R,S
Le site web va recevoir 30 de ces lettres par seconde, par exemple:
FFFFFFFFFFFFFFFFBBBBBBBBBBBLLL
Pour ne pas embrouiller le Arduino ou utiliser trop de RAM, le site web va encore transformer le message en:
F(puis attendre 0.495 secondes)B(puis attendre 0.33 secondes)L(puis attendre 0.066secondes)
Je n'ai pas choisi ces nombres au hasard: A 30 fps(images par secondes) une seule image dure 0.333......, J'ai arrondi au centième près, puis j'ai soustrait une lettre, qui va etre "la représentante" des lettres qui suivent qui sont pareilles, dans ce cas, il y a 16 F, donc on va mettre le premier F comme représentant, il nous reste 15 F, donc 15 images, 15 x 0.033 = 0.495, donc le site web va dire au Arduino par Bluetooth F et va attendre 0.495 secondes avant de donner le prochain ordre, ici j'ai donner un exemple de 1 seconde, mais bien sur on ne va pas faire que une seconde, et on ne va pas les séparer non plus, donc si on a 2 secondes: cette seconde, puis la deuxieme:
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
Le site web ne va pas prendre un autre L comme représentant, le Arduino a déjà compris qu'il faut tourner a gauche, donc il va juste attendre la durée des L jusqu'à ce qu'il y ait une nouvelle lettre, donc dans ce cas il va attendre 0.066+30*0.033 donc: 0.066+0.99= 1.056 secondes.
Le site web va aussi afficher la réponse du modèle pour savoir il se passe quoi.

Le code Arduino:

/\* \* ARDUINO CAR - 2026 VERSION

* Inputs: F (Forward), B (Backward), L (Left), R (Right), S (Stop)
  \*/

// Motor Pins
const int IN1 = 9;   // Motor A Forward
const int IN2 = 5;   // Motor A Backward
const int IN3 = 6;   // Motor B Forward
const int IN4 = 7;   // Motor B Backward

void setup() {
Serial.begin(9600); // Bluetooth communique a 9600 baud
pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT);
stopCar();
}

void loop() {
if (Serial.available() > 0) {
char command = Serial.read();


if (command == 'F') { 
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
} 
else if (command == 'B') { 
  digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH);
  digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
} 
else if (command == 'L') { 
  digitalWrite(IN1, LOW);  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
  delay(1);
  stopCar();
} 
else if (command == 'R') { 
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);  digitalWrite(IN4, HIGH);
  delay(1);
  stopCar();
} 
else {
  stopCar(); // Stop pour 'S' ou autre commande inconnue
}


}
}

void stopCar() {
digitalWrite(IN1, LOW); digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW); digitalWrite(IN4, LOW);
}

Petit rappel: Left et right tourne la voiture sur place

Probleme: Aucun des moteurs ne bougent, lorsque je connecte a la voiture, le module Bluetooth arrête de clignoter et montre effectivement qu'il est connecter, mais quand je fais des mouvements, ni RX ni TX ne clignotent, l'Arduino est allumé
Pour essayer de trouver ou le problème était, j'ai mis un code simple pour tourner les moteurs et le faire tourner vers la droite pour toujours, le code marche parfaitement, donc le problème pourrait venir de 2 choses, le code ou le site web. J'ai changer les 2 PLUSIEURS fois, mais je n'en ai rien tirer, j'ai essayer plusieurs sites web différent, j'avait d'abord utiliser Google AI Studio, mais puis j'ai changer a une autre facon: ecrire le code sur un fichier bloc notes, mettre a "**tout les fichiers" et ajouter .html a la fin, jai ensuite ouvert le fichier sur chrome ce qui a marcher, le modele marche, la camera aussi, mais toujours le meme probleme. Voila depuis Novembre que je suis bloquer. 3 Arduino Uno ont été bruler durant cette expérience (RIP) le premier etait un faux et a bruler en 2 jours, le 2eme un peu plus longtemps, le 3eme a ete celui qui a survit le plus longtemps, et ont tous été bruler en raison d'un survoltage que j'ignorais, apparemment je donner au arduino 7.4V de 2 cotes differents, j'espere que cet Arduino sera le dernier.

Merci.

-Mazen

Bonsoir,

Comment câbke tu tout cela STP?

Tu parle de 4 moteurs, et tu code comme ceci

Motor A et Motor B, ça fait 2 moteurs non?

Bonsoir mazentheking73

Tout d'abord, la question "bête", as tu croisé Tx et Rx entre le HC-06 et l'Arduino?

Si tu as un smartphone Android, essaies de communiquer avec l'application Serial Bluetooth Terminal:
image

Pour iPhone, je ne connais pas, mais je crois que l'on ne peut pas y faire du Bluetooth classique.

A+
Cordialement
jpbbricole

Bonjour,
Non, j'ai checker plusieurs fois et le TX est avec le RX et vice versa, tout le monde me le dit mais justement ce n'est pas ca le probleme

En fait, la lettre represente sur quelle coter, donc droite et gauche, donc:
Moteur droit avant
Moteur droit arrière
Moteur gauche avant
Moteur droite arrière

et pour la connexion des moteurs:
cable rouge Moteur A avant - OUT4
cable noir Moteur A arriere - OUT4
cable noir Moteur A avant - OUT3
cable rouge Moteur A arriere - OUT3
cable rouge Moteur B avant - OUT1
cable noir Moteur B arriere - OUT1
cable noir Moteur B avant - OUT2
cable rouge Moteur B arriere - OUT2

Je crois avoir compris ton histoire de A et B

A c’est par exemple le côté gauche

B c’est le côté droit.

Tu as 4 moteur

Moteur avant gauche

Moteur arrière gauche

Moteur avant droite

Moteur arrière droite

Sur le L298

Tu a 2 sorties moteurs

Out+ Moteur1 sur le bornier OUT1

Out- Moteur1 sur le bornier OUT2

ET

Out+ Moteur2 sur le bornier OUT3

Out- Moteur2 sur le bornier OUT4

Là òu je ne suis plus, c'est icî

Tu commande le moteur avant coté A et arriére du même côté en même temps, mais en sens inverse!

Il y en a un qui veut avancer et l’autre veut reculer en même temps le semble t’il ……..’

Pour moi, c’est un bug.

Normalement, c'est fait parce que on ne peut pas connecter les 2 cables d'un moteur dans le meme OUT, sinon il y aura un coup de circuit, ou les 12V vont circuler a l'infini dans le L298N sans bouger les moteurs, c'est pourquoi les cables sont divises dans 2 out. Je veux aussi rappeler comment j'ai utiliser l'invite des commandes avec une clé API de Gemini, et les moteurs ont bougé parfaitement par Bluetooth, ainsi que quand j'ai fais un code qui avance les moteurs pour toujours, ce qui a effectivement marcher.
Si vous voulez une image ou j'ai dessiner sur un papier toutes les connections, il y a juste quelques écritures en anglais, je peux traduire si besoin.

Si vous êtes sûr de vous, parfait, pas grave si je n’ai pas compris votre montage.

Sinon, je veut bien le

Je sais lire l’anglais pas de pb.

PS:

Pour faire tourner 2 moteurs avec un L298, il y a 2 connecteurs 2 contacts, donc 4 OUT.

Effectivement, littéralement, si

Si on connecte les 2 câbles du même moteur dans un seul OUT, on met le moteur en court-circuit.

Bonjour mazentheking73

J'ai essayé ton code., via la ligne de commandes, il fonctionne très bien.
J'ai mis en remarque ces 2 lignes 2 fois:

//delay(1);
//stopCar();

Cordialement
jpbbricole