Euh ça a l'air super mais je ne comprends pas comment faire :S
bonjour
A tu au moins essayé l'exemple counter de la lib encoder_polling
ça fait exactement ce que tu souhaiterais
je te la remet ici (petite modif pour declarer les entrées en INPUT_PULLUP)
il suffit de connecter le Collecteur d'un des phototransistor sur le pin 8 de l'arduino ,et l'autre C sur pin 9.
y a pas plus simple
Re bonjour, je suis actuellement en train de tester le programme mais il ne fonctionne pas bien . Le premier capteur marche mais pas le deuxième :S
Merci d'avance ![]()
J'ai essayé ce programme pour détecter le sens de passage mais je n'arrive pas à faire Ajout d'une abeille et Enlève une abeille dans ce programme avec la direction :
"
#include "Encoder_Polling.h"
const int encoderPin_A = 6;
const int encoderPin_B = 8;
int nbb = 0;
void setup()
{
Serial.begin(9600);
encoder_begin(encoderPin_A, encoderPin_B); // Start the decoder
}
void loop()
{
int dir = encoder_data(); // Check for rotation
if(dir != 0) // If it has rotated...
{
Serial.println(dir); // Print the direction
}
}
"
Bonjour,
2 ème ou 3 ème paragraphe
Re :
#include "Encoder_Polling.h"
const int encoderPin_A = 6;
const int encoderPin_B = 8;
int nbb = 0;
void setup()
{
Serial.begin(9600);
encoder_begin(encoderPin_A, encoderPin_B); // Start the decoder
}
void loop()
{
int dir = encoder_data(); // Check for rotation
if(dir != 0) // If it has rotated...
{
Serial.println(dir); // Print the direction
}
}
Re,
Si tu remplaces :
const int encoderPin_A = 6;
const int encoderPin_B = 8;
Par :
const int encoderPin_A = 8;
const int encoderPin_B = 9;
Cela donne quoi (en modifiant le câblage, bien sur) ?
Cela fonctionnais avant aussi mais quand je passe un objet cela écrit 2 fois la direction ![]()
RE bonjour à tous ! Le programme ne fonctionne plus j'aimerais bien avoir des conseils si vous en avez merci d'avance ![]()
teste ça
moniteur en 9600
et câblage des collecteurs sur 8 et 9
#include "Encoder_Polling.h"
const int encoderPin_A = 8;
const int encoderPin_B = 9;
int nbb = 0;
void setup()
{
Serial.begin(9600);
encoder_begin(encoderPin_A, encoderPin_B); // Start the decoder
}
void loop()
{
int dir = encoder_data(); // Check for rotation
if(dir == 1) // If its forward...
{
nbb++; // Increment the counter
Serial.println(counter);
}
else if(dir == -1) // If its backward...
{
nbb--; // Decrement the counter
Serial.println(nbb);
}
}
Euh non désolé ça marche pas :S
la compilation fonctionne ?
c'est uniquement à l'execution que tu n'as rien sur ton moniteur ?
En fait c'est comme si il me détecter qu'un seul capteur à chaque fois
Et quand je échange les câbles il y en a toujours qu'un qui fonctionne sur le moniteur
ghoster-cr:
En fait c'est comme si il me détecter qu'un seul capteur à chaque foisEt quand je échange les câbles il y en a toujours qu'un qui fonctionne sur le moniteur
bonjour
le pull-up des phototransistors est realisé comment ?
avec des resistances externes ou par declaration des entrées en INPUT_PULLUP ?
(de base la lib est en INPUT simple
Voilà le capteur ![]()
bonjour
la resistance de 220 Ω est la résistance de limitation de la led , ce n'est pas une resistance de pullup necessaire je remet le schema
il faut soit mettre une resistance de pullup externe , soit modifier la librairie
en remplaçant dans le .CPP
pinMode(encoder.pin_A, INPUT);
pinMode(encoder.pin_B, INPUT);
par
pinMode(encoder.pin_A, INPUT_PULLUP);
pinMode(encoder.pin_B, INPUT_PULLUP);
rouge, rouge, noir==> c'es la résistance de limitation du courant dans la led
mets tu une résistance entre ta sortie "signal" et le +5Volts?
nota désolé Artouse, je n'avais pas vu ta réponse
Mais je dois capter l'entrée et la sortie avec deux capteurs en parallèle pour que cela s'affiche dans le moniteur série :S
Je te remet mon programme que j'ai tenté de créer mais il compte -1 pour un capteur et +1 pour l'autre du coup faudrait que je fasse quand ça passe par le n°1 en premier +1 et sinon le n°2 en premier -1 .
Mon programme :
const int capteur1 = 6;
const int capteur2 = 9;
int nbb = 0;
void setup ()
{
Serial.begin(9600);
}
void loop ()
{
int capteur1_val = digitalRead(capteur1);
int capteur2_val = digitalRead(capteur2);
if(capteur1_val < 1)
{
}
else
{
nbb=nbb+1;
}
delay(100);
if(capteur2_val < 1)
{
}
else
{
nbb=nbb-1;
}
delay(100);
Serial.println(nbb);
delay(1000);
}
Euh non il y a juste celle là resistance
sur le schéma que t'as posté Artouse, la résistance de limitation du courant dans la led est de 270ohms
sur ta photo de ton capteur, on voit bien son homologue qui est de 220ohms. rien de bien choquant. donc jusqu'ici tout va bien.
sur le schéma que t'as posté Artouse, tu vois la résistance indiqué sur le collecteur du transistor, elle est donnée pour 4.7Kohms
tu dois la mettre physiquement sur ton montage.
elle doit etre entre le collecteur du transistor et le +5volts
donc entre la sortie "sign"de ton capteur et le + 5 volts.
lorsqu'une abeille passe dans le faisceau de la led, la partie sensible du transistor ne reçoit plus la lumière. il devient "passant" et l'entrée arduino se retrouve à "0" volts.
lorsque le transistor voit la lumière de la led, il n'est plus passant et l'entrée arduino doit etre à "5 volts"
mais le transistor est monté en collecteur "ouvert", il a besoin d'une résistance pour qu'il y ait 5 volts.
cette résistance est dite de "pull-up"
si une abeille coupe le 1er faisceau puis le 2ème, elle est considérée comme entrante et la "bibliothèque" te retourne une valeur de "+1"
si une abeille coupe le 2ème faisceau puis le premier, elle est considérée comme sortante et la "bibliothèque te retourne une valeur de -1
mais cette valeur est à considérer comme un flag, et il t'appartient dans ton code de gérer un compteur que tu incrémente ou décrémente en fonction de ce flag
d'où les instructions "if" :
if(dir == 1) // If its forward...
{
nbb++; // Increment the counter
Serial.println(counter);
}
else if(dir == -1) // If its backward...
{
nbb--; // Decrement the counter
Serial.println(nbb);
}