Nourisseur de poissons automatique de 22 jours pour étang
Un vrai bricolage de dernière minute

L’histoire
J’avais quelques pensionnaires dans l’étang et nous avions trouvé, mon épouse et moi, un projet de vacances de dernière minute.
Il me restait une semaine pour trouver une solution pour nourrir automatiquement ces petits poissons.
Je souhaitais me familiariser avec la programmation des microcontrôleurs. De ce fait, je m’était procuré un kit Arduino R3 en 2014. Or, dedans, il y avait un moteur pas à pas.
Il me restait peu de temps ! Je ne pouvais compter que sur mes rikètes. Pas question de commander du matériel ni d’aller faire des courses car chaque minute était comptée pour la préparation du voyage.
Le principe
En partant du moteur pas à pas, j’ai imaginé de déplacer une réglette constituée de 22 cases contenant les billes de nourriture quotidiennes, au dessus d’un trou calibré donnant sur l’étang. Ainsi, la quantité de nourriture placée dans une alvéole, tombait dans l’eau. Il restait à programmer le microcontrôleur pour qu’il déplace la réglette juste ce qu’il fallait afin que la case suivante se présente juste au dessus du trou après 24 heures.
Fabrication
L’entrainement
Le moteur pas à pas 28BYJ-48 et la carte pilote ULN2003
L’entrainement est constitué du microcontrôleur, du moteur pas à pas, de son pilote et d’une bobine pour enrouler la ficelle de traction de la réserve de nourriture. La bobine, faite maison, est réalisée avec un vieux bouton de potentiomètre, qui se visse sur l’axe du moteur, et deux rondelles de bois.
La réserve de nourriture
Pour la réserve de nourriture, j’ai entaillé une goulotte et collé des cloisons perpendiculaires à distances égales. Ensuite, à son extrémité, j’ai attaché une ficelle pour la tracter.



On voit bien, sur la photo ci-dessus, le trou dans la planche qui correspond à la taille d’une cellule de la réglette.
Le système de guidage
Avou dès vî bokèts d’bwès et quelques clous, j’ai constitué les deux bords d’un couloir, passant sur le trou, ayant pour but de guider la réglette.
Cependant, cette dernière avait tendance à se soulever vers la fin de sa course à cause de l’angle croissant entre la ficelle et elle-même.
L’augmentation de l’angle était due au remplissage de la bobine d’enroulement de la ficelle !
J’ai simplement lesté la réglette avec un petit morceau de plomb du côté de la ficelle.


Le programme
J’avais besoin d’un outil pour rebobiner le système afin de replacer la réglette au départ durant les essais.
rebobinage
int motorPin1 = 8;
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;
int play = 4;
int avance = 2;
//nombre de millisecondes avant première dose
unsigned long InitDelay = 8000;
// pour 24H
//unsigned long periode = 86400000;
// pour 1'
unsigned long periode = 15000;
int stepdelay = 3 ;
int pulsecount = 200;
int nbjours = 15;
int playstate = 0;
int avancestate = 0;
int i = 0;
void setup() {
pinMode(play, INPUT);
pinMode(avance, INPUT);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop() {
digitalWrite(motorPin4, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);
delay (stepdelay);
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);
delay (stepdelay);
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin1, LOW);
delay (stepdelay);
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, HIGH);
delay (stepdelay);
}
Le pilotage du distributeur de nourriture à proprement parler
Distribution
int motorPin1 = 8;
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;
// pour 24H
unsigned long periode = 86400000;
// pour 15''
//unsigned long periode = 15000;
int stepdelay = 10 ;
int pulsecount = 156;
int nbjours = 15;
int i = 0;
void setup() {
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop() {
while (nbjours > 0) {
nbjours = nbjours - 1;
for (i = 0 ; i <= pulsecount ; i++) {
digitalWrite(motorPin4, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);
delay (stepdelay);
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);
delay (stepdelay);
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin1, LOW);
delay (stepdelay);
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, HIGH);
delay (stepdelay);
}
delay(periode);
}
}
Conclusion
C’était, en ce qui me concerne, avant l’impression 3D et les ESP.
Sur les 22 jours, seulement 2 doses de nourriture n’ont pas été déversées. Elles sont restées coincées et agglutinées dans leur alvéole 😉
Au final, pour une conception et une fabrication en urgence avec juste les camatches dont je disposais, j’estime m’en être bien tiré !







