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
