Bonsoir,
Tout d'abord je tiens a préciser que je débute dans l'arduino, le principe ouvre énormément de possibilité mais mon manque de connaissance me bloque rapidement.
Mon projet actuel lié au milieu agricole est la fabrication d un boitier qui me permettra de contrôler la chute des graines d'un semoir a mais pour un amis agriculteur.
Je m'explique, aujourd'hui le problème c'est que lorsqu' il sème du mais si il ne contrôle pas régulièrement les tubes d'ou sorte les graines il y a un risque qu'ils se bouchent de par l’accumulation de terre ou bien tout simplement qu'il n'y ai plus de graines dans le semoir.
Ce semoir est un 6 rangs donc 6 tubes.
Après quelques essais j'ai réussi a équiper les tubes de capteurs photoélectriques qui me permette d'allumer une LED rouge a chaque passage d'une ou plusieurs graines.
Cela donne une indication visuelle en cabine mais c'est pour moi trop juste encore car il ne peut bien sur pas toujours avoir les yeux rivés sur le boitier.
C'est pour cela que je souhaite y intégrer la technologie arduino en renvoyant toujours une indication visuelle en cabine mais aussi et surtout en contrôlant le temps de passage des graines, si le capteur renvoi un niveau haut plus de 3 secondes c'est que le tube est bouché et si un niveau bas plus de 3 secondes c'est qu'il n'y a plus de graines dans la réserve.
Pour signaler le problème en cabine, la led correspondant au tube en question clignotera lentement et un buzzer retentira.
Pour valider le fait que le problème est réglé (débouchage du tube ou plein fait du semoir) un bouton reset sera mis en place sur le boitier.
J'aillais oublier, le mécanisme de semis est animé par deux roues en contact au sol qui permettent de faire tomber les graines si le semoir est en mouvement donc pour éviter que l'alarme tube vide ne retentisse sans arrêt je souhaite lancer le programme de contrôle que si le semoir est en mouvement.
Je compte pour cela placer un capteur inductif devant un pignon d entrainement ou bien tout simplement devant la roue équipée de pions qui seront détectés par le capteur.
Pour le moment en piquant des bouts de programme à droite, à gauche je suis parvenu a réaliser une base de programme qui me fait clignoter les leds si détection ou non de plus de 3 secondes.
int temps_defini = 3000; //définition du temps de maintien désiré en ms
int ledPin1 = 6;
int capteur1 = 2;
long debut_appui1;
long debut_appui2;
boolean variable1 = false;
int etat_capteur1;
int dernier_etat_capteur1 = LOW;
int etat_led1 = LOW;
int roue = 5;
//int reset = 7;
void setup() {
pinMode(ledPin1, OUTPUT);
pinMode(roue, INPUT);
//pinMode(reset, INPUT);
pinMode(capteur1, INPUT);
digitalWrite(ledPin1, HIGH); //test visuel des led avant de commencer
delay(2000);
digitalWrite(ledPin1, LOW);
}
void loop() {
if (digitalRead(roue) == HIGH){ //lecture de l'etat de la roue (pour l'instant un contact sec)
etat_capteur1 = digitalRead(capteur1); //lecture de l'état du capteur
if (etat_capteur1 == HIGH){ //image de l'état du capteur
digitalWrite(ledPin1, HIGH);
}
if (etat_capteur1 == HIGH && dernier_etat_capteur1 == LOW){
debut_appui1 = millis(); //initialisation du compteur 1
variable1 = true; //enregistrement du changement d'état du capteur 1
}
else {
if (etat_capteur1 == LOW && dernier_etat_capteur1 == HIGH){
debut_appui2 = millis();
variable1 = true;
}
}
if ( variable1 == true && etat_capteur1 == HIGH && dernier_etat_capteur1 == HIGH){ //le capteur 1 était et est toujours enclenché
if ((millis() - debut_appui1) >= temps_defini){ //est-ce que le temps choisi est écoulé ?
digitalWrite(ledPin1, HIGH);
delay(2000);
digitalWrite(ledPin1, LOW);
delay(2000);
}
}
}
if ( variable1 == true && etat_capteur1 == LOW && dernier_etat_capteur1 == LOW){ //le capteur 1 était et est toujours désenclenché
if ((millis() - debut_appui2) >= temps_defini){ //est-ce que le temps choisi est écoulé ?
digitalWrite(ledPin1, HIGH);
delay(1000);
digitalWrite(ledPin1, LOW);
delay(1000);
}
}
dernier_etat_capteur1 = etat_capteur1;
digitalWrite(ledPin1, LOW);
//actualisation de l'état du bouton
}