Autrement dit: le logiciel ...
La simplicité et l'abondance de commentaires va bien démystifier le programme développé avec l'IDE de Arduino . On peut le téléverser après avoir choisi le Nano ! Le mien est un ATmega 328 Old boot loader à 1,80 € dans les échoppes du soleil levant . Je me répète, mais il faut bien penser à retirer les cavaliers sur les lignes TX-RX du circuit imprimé, car elles doivent être libres de toutes charges pendant le transfert, au risque de voir apparaître quelques sympathiques gros mots dans le bas de l'écran du PC .
Le sketch commence par les déclarations d'entrées / sorties et des variables utilisées . Puis des sous-programmes qui traitent de chaque mouvement du Peuht ; Exemple pour avancer d'un tour de roue :
void moveForward() { // Pour faire un Tour de roue en avant
digitalWrite(dirPin, HIGH);
digitalWrite(dirPin1, LOW);
// Pour 1 tour moteur:
for (int i = 0; i < stepsPerRevolution; i++) {
digitalWrite(stepPin, HIGH);
digitalWrite(stepPin1, HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin, LOW);
digitalWrite(stepPin1, LOW);
delayMicroseconds(1000);
}
}
Pour avancer on commence par donner le sens de rotation des moteurs en plaçant "dirPin" à l'état logique demandé ! (évidement l'inverse l'un de l'autre car les moteurs sont en tête bêche). Puis on vient successivement, placer à l'état haut et à l'état bas les commandes de pas moteurs, avec une légère temporisation pour la fluidité, avec une boucle qui va reproduire 200 fois cette suite pour un tour de roue, si l'on a pas mis de diviseur de pas sur les steppeurs (suivant enfichage des cavaliers devant les drivers ).
Et pour chaque type de mouvement on va reproduire un sous-programme avec les rotations adéquates... Sauf pour le "stopRun" où l'on met à l'état bas les deux lignes "stepPin" .
Dans le setup, on déclare la direction des I/O et les éventuelles résistances de rappel (Pull-Up)
Dans le loop, on lance un coup de radar ultrason, on calcule la distance avec l'écho reçu :
void loop() { //Départ du cycles défini par le programme
moveForward(); //Un pas en avant
digitalWrite(TRIGG,HIGH); //Envoi d'un puls d'ultrason de 10ms
delayMicroseconds(10);
digitalWrite(TRIGG,LOW);
int mesure = pulseIn(ECHO,HIGH,TIMEOUT); //Attente de l'écho
float distance_mm = mesure /2.0*son; //Calcul de la distance
Si la distance est inférieure à 200mm, on va provoquer l'arrêt, un petit temps, la reculotte du Peuht, un petit temps d'arrêt encore, puis la rotation à gauche ou à droite de manière aléatoire jusqu'à ce que la voie soit libre en vérifiant avec un nouvel écho chaque fois .
if(distance_mm < 200) { //Si la distance est inférieure à 200mm => Obstacle !
delay (1000);
moveBack(); // Un pas en arrière
int sens = random (10); //pour se dégager et repartir
delay(700);
if ( sens < 5 ) {
turnLeft(); // Tourne à droite
}
else {
turnRight(); //tourne à gauche
}
delay (1000);
}
On repart pour un tour de roue en analysant le dégagement du chemin à suivre !
Lors de chaque boucle, on vient également tester que le BlueTooth n'est pas activé pour repartir sur la boucle principale => c'est le fonctionnement autonome !
if (digitalRead(btOk)) { // Le récepteur Bluetooth est-il activé ? Si Non ...
digitalWrite(Led, HIGH) ; // Led 13 S'allume
}
else { // Le récepteur Bluetooth est-il activé ? Si Oui
digitalWrite(Led, LOW) ; // Led 13 S'eteind
delay (50);
goto tlCmd; // Saute au sous programme de marche pilotée
}
return; //Si non, retour au début
Si l'entrée BTOK est détectée au niveau bas, ça veut dire qu'un appareil BlueTooth est synchronisé avec le Peuht, et là le programme saute sur l'étiquette "tlCmd" et va attendre qu'un caractère ASCII soit reçu, puis on l'analyse pour savoir si il est valide, et on regarde à quel cas il s'applique :
tlCmd: {
Serial.flush(); //Attente d'un caractère
cha = Serial.read(); // Lecture du caractère
if (Serial.available()>0) { //Valide si plus grand que nul
delay (50);
if(cha=='A'){ //Si c'est le caractère A
for (int i=0; i <= 10 ; i++)
digitalWrite(TRIGG,HIGH); //Envoi d'un puls d'ultrason de 10ms
delayMicroseconds(10);
digitalWrite(TRIGG,LOW);
int mesure = pulseIn(ECHO,HIGH,TIMEOUT); //Attente de l'écho
float distance_mm = mesure /2.0*son; //Calcul de la distance
if(distance_mm > 200) { //Si la distance est supérieure à 200mm => la voie est libre !
moveForward(); // 10 pas en avant
delay (50);
}
}
if(cha=='P'){ //Si c'est le caractère P
moveForward(); // un pas en avant
}
Par exemple, si le récepteur reçoit le caractère "A" , on prépare une boucle pour avancer de 10 tours de roue en prenant en compte la détection d'obstacle ! Si le chemin est libre (mesure > 200mm), on continue la boucle... Si c'est le caractère ASCII "P" qui est reçu, on avance d'un pas. Idem pour les autres mais pour tourner, reculer, etc etc ...
Les Applications de Pilotage :
j'en ai essayé deux, mais tous les terminaux Bluetooth sur le Google Play Store devraient fonctionner avec plus ou moins d'avantages, et suivant les goûts de chacun :
- Sur le smart phone, j'ai fais des essais avec "BlueTooth Terminal HC-05 (version gratuite ). Très facile à configurer ; juste faire reconnaitre l'élément avec lequel on souhaite se connecter; Puis un mot de passe est demandé par le HC-05 (ce mot de passe est 1234) et ensuite il nous demande quel genre de trames l'on désire envoyer => ASCII . Des boutons paramétrables, Btn1 à Btn5, sont disponibles et on peut leur affecter à chacun un caractère "S", "G", "P", "A", "D", "R", ...Chaque envoi va exécuter une action sur le Peuht ! MAIS la version gratuite a un gros inconvénient: elle est bourrée d'écrans de publicité qui la rendent très vite inutilisable ... Et comme je n'ai pas envie de payer, je vais passer à une autre ! Na na nère heu .
- Sur la tablette, j'avais déjà "Serial BlueTooh" qui était installé, donc j'ai voulu l'essayer. Cette application fait partie d'une série de 3, qui sont pour les autres "Serial WiFi" et "Serial USB". Après avoir lancé l'APP, on choisi l'élément avec lequel on souhaite communiquer dans la configuration "Device" puis "Connecter" après avoir renseigné le mot de passe 1234, le dialogue est établi ! Gros avantage --> pas de pub ! Ouf . Un autre point intéressant c'est que l'on peut créer des séquences de caractères ASCII , les essayer et les mémoriser: ce qui se traduit par le Peuht qui exécute une suite de mouvements et de manoeuvres. Et encore mieux, le nombre de mémoires est plus grand . Donc je vous conseille cette série du même auteur .

Bon, eh bien maintenant, il y a plus qu'a s'amuser un petit peu avec . Voilà je viens de faire ma voiture radio commandée que je demande à Noël depuis de nombreuses décennies ... Comme quoi, on est jamais si bien servi que par soi-même ! Et comme il neige à gros flocons en ce moment, je vais y ajouter une étrave, comme ça le déneigement passera de corvée à amusement ; On est pas au bout, courage !
Pour ceux qui sont intéressés par la réalisation, tous les fichiers sont dans le zip ci-dessous :
Le peuht files (739.46 Ko)