Projet de mini tondeuse autonome.
(Yves Deniaud 2014)
Voulant étudier la conception et la réalisation d'un scanner 3D de grande dimensions, je me suis inscrit à un "Fablab" en juin 2014, et lors des « openLabs » du mardi puis ceux du jeudi, j'ai rencontré d'autres adhérents qui m'ont rapidement orienté vers une solution à base d'ARDUINO.
J'ai donc commencé à étudier ce petit module et là je me suis aperçu qu'il était susceptible de me permettre de réaliser un vieux projet, cette fameuse mini-tondeuse à gazon pour mon micro jardin !
Définition du concept et de ses caractéristiques :
Une mini-tondeuse qui se réveillerait lorsque ses batteries seraient chargées à plein (à l'aide d'un panneau solaire embarqué) et tondrait la pelouse lentement pendant une demie-heure par jour environ (repos total la nuit!) et s'il ne pleut pas (capteur de pluie), en se promenant de façon autonome (grâce à ses deux moteurs de roues) en évitant les obstacles (capteurs US et capteurs de contact) et en restant dans un périmètre contrôlé (capteurs magnétiques embarqués recevant un signal circulant dans une boucle délimitant la zone à tondre).
Avant-projet
de la
mini-tondeuse
Pré étude de la partie électronique :
La gestion de l'électronique embarquée sera donc confiée à un ARDUINO.
Celui-ci disposant de peu de lignes d'entrée et de sortie, il faudra réduire le nombre des signaux venant des capteurs.
Les signaux provenant des capteurs HF et ceux provenant des microswitch de contact des pare-chocs seront donc mis en parallèle, et on ne gardera que quatre informations principales à savoir celles d'obstacles détectés aux quatre angles qui seront traité comme des touches de clavier activées ou non, ensemble ou individuellement.
Ces quatre informations seront donc regroupées deux par deux sur deux lignes de données avec 16 combinaisons en tout.
Le
schéma pour deux capteurs sera donc le suivant :
Selon que les capteurs seront activés ou non, la table de vérité se présentera donc ainsi :
Switch A |
fermé |
fermé |
ouvert |
ouvert |
Switch B |
fermé |
ouvert |
fermé |
ouvert |
Résistance éq. |
687,6 |
1k |
2k |
infinie |
V en sortie |
2v |
2,5v |
3,3v |
5v |
L'écart minimum entre deux états étant d'un demi volt, il pourra facilement être discriminé par l'ARDUINO !
Deux lignes d'entrée analogiques suffiront donc pour gérer les capteurs des quatre angles de la tondeuse.
(Le même principe utilisé avec quatre interrupteurs en même temps donnait des combinaisons où les différences de potentiel devenaient trop minimes pour être clairement discriminées !..)
Toujours dans le but de minimiser le nombre de lignes d'entrées/ sorties, et sachant qu'il nous faudra en garder au moins trois lignes de sortie pour commander l'alimentation ou non les moteurs et deux autres pour le sens de marche, le signal « Trig » d'activation périodique des capteurs à ultra-sons sera commun aux quatre ensembles, qui en retour donneront leur signal de mesure sur quatre lignes d'entrée, signaux qui seront analysés par le soft et mixés logiciellement avec les signaux des contacts de pare-chocs précédemment traités.
Il nous faudra encore réserver une ligne d'entrée pour le capteur de pluie, la détection du niveau de batterie et celle de l'ensoleillement étant, elles, directement gérées au niveau de l'alimentation générale de la tondeuse, ne permettant son initialisation et son démarrage que si la batterie est pleine, la pluie absente et évidemment uniquement de jour.
Enfin, des capteurs seront insérés en série avec l'alimentation générale et donc le moteur de lame afin que tout soulèvement de la tondeuse entraîne immédiatement l'arrêt instantané de la rotation des lames avec, aussi, la retombée d'un doigt dans le disque à trous supportant les lames, et commandée par un électroaimant alimenté en série avec le moteur de lame,
ceci afin d'assurer une sécurité maximum.
Sur le plan de la sécurité, tout obstacle détecté, entraînera aussi cet arrêt instantané et sécurisé du moteur de lame afin de parer à toutes les situations potentiellement dangereuses ( mais sans coupure de l'alimentation générale cette fois).
(Toutes ces redondance étant dans le but de préserver la sécurité de mes petits enfants entre autres!...)
Des micros switch détecteurs de soulèvement seront placés entre le capot supérieur de la tondeuse et le châssis et sur chaque axe de roue, il seront tous insérés en série dans le circuit d'alimentation générale.
Tondeuse
vue de côté.
Tondeuse vue de côté.
Pré-étude logicielle :
Le premier soft testé est celui des capteurs à ultra-sons, il est directement inspiré de l'article publié ici : https://itechnofrance.wordpress.com/2013/03/12/utilisation-du-module-ultrason-hc-sr04-avec-larduino/
Je
n'y reviendrais donc pas, et me suis contenté de
recopier le
sketch pour faire mon premier essai concluant! :]
Testé sur mon module Us et mon ARDUINO, il s'avère parfait.
La partie affichage de la distance étant inutile dans mon projet, je récupérerai juste la valeur du temps de retour et l'utiliserai directement dans mon programme.
Comme dit précédemment, il me faut mutualiser l'envoi du signal de « Trig » sur tous les capteurs en même temps, et récupérer les échos de chacun des des quatre capteurs
sur quatre lignes d'entrée TTL (DATA) de l'ARDUINO.
Je
vais donc d'abord modifier le sketch dans ce sens et le
testé avec
les deux premiers capteurs reçus, mais comme cela ne coûte
rien de
prévoir pour les quatre, le sketch devient
donc :
(ICI avant il y
avait l'ancien code)
Après essais concluants et petites modifications, le sketch devient :
/*
Utilisation de 4 capteurs Ultrason HC-SR04 */
// définition des
broches utilisées
int trig = 12;
int echoaPin = 11;
int
echobPin = 10;
int echocPin = 9;
int echodPin = 8;
int
ledaPin =7;
int ledbPin =6;
int ledcPin =5;
int leddPin
=4;
long lecture_echoa;
long lecture_echob;
long
lecture_echoc;
long lecture_echod;
long cmA;
long cmB;
long
cmC;
long cmD;
// les capteurs seront aux
quatre coins : A=angle avant droit, b= angle avant gauche, C=
angle
arrière gauche, D= angle arrière droit
void setup()
{
pinMode(trig, OUTPUT);
pinMode(echoaPin, INPUT);
pinMode(echobPin, INPUT);
pinMode(echocPin, INPUT);
pinMode(echodPin, INPUT);
pinMode(ledaPin, OUTPUT)
;
pinMode(ledbPin, OUTPUT) ;
pinMode(ledcPin, OUTPUT)
;
pinMode(leddPin, OUTPUT) ;
//test des
LEDs
digitalWrite(ledaPin,HIGH);
delay
(500);
digitalWrite(ledbPin,HIGH);
delay
(500);
digitalWrite(ledcPin,HIGH);
delay
(500);
digitalWrite(leddPin,HIGH);
delay
(500);
digitalWrite(leddPin,LOW);
delay
(500);
digitalWrite(ledaPin,LOW);
delay
(500);
digitalWrite(ledbPin,LOW);
delay
(500);
digitalWrite(ledaPin,LOW);
delay (500);
// fin du
test des LEDS
}
void loop()
{
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
lecture_echoa = pulseIn(echoaPin,
HIGH);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
lecture_echob = pulseIn(echobPin, HIGH);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
lecture_echoc = pulseIn(echocPin,
HIGH);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
lecture_echod = pulseIn(echodPin, HIGH);
//traitement des
echos
cmA = lecture_echoa / 58;
cmB = lecture_echob / 58;
cmC = lecture_echoc / 58;
cmD = lecture_echod / 58;
// test de distance, si elle est inférieure à 30cm, allumer la
LED correspondante
if (cmA<10)
{
// éteindre la LED
A
digitalWrite (ledaPin, LOW) ;
}
if (cmA>=10)
{
//
allumer la LED A
digitalWrite (ledaPin, HIGH) ;
}
if
(cmB<10)
{
// éteindre la LED B
digitalWrite (ledbPin,
LOW) ;
}
if (cmB>=10)
{
// allumer la LED
B
digitalWrite (ledbPin, HIGH) ;
}
if (cmC<10)
{
//
éteindre la LED C
digitalWrite (ledcPin, LOW) ;
}
if
(cmC>=10)
{
// allumer la LED C
digitalWrite (ledcPin,
HIGH) ;
}
if (cmD<10)
{
// éteindre la LED
D
digitalWrite (ledaPin, LOW) ;
}
if (cmD>=10)
{
//
allumer la LED D
digitalWrite (ledaPin, HIGH) ;
}
delay(100);
}
// le fonctionnement avec deux capteurs côte à
côte, est perturbé par leur proximité et l'écho de l'un
interfère
sur l'autre... :(((
Ceci n'est pas
vraiment un problème puisque sur la tondeuse, les
capteurs ne seront pas placés côte à côte mais écartés
les uns des autres avec un léger angle d'ouverture.
(Deux orientés vers l'avant, deux orientés vers
l'arrière.)
(à suivre!..)