Accueil
Sommaire
Nouveautés
Photos aériennes
Vidéos
Projets
Contact
Les sites que j'anime
Mes appareils photos
Mes cerf-Volants
Modélisme Électronique Mes trucs et astuces Mon coup de gueule
Vos contributions
les sites que j'aime


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).

plan de la future mini-tondeuse vue de dessus 

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 :

schéma de
                  câblage des capteurs d'angle

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é
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!..)