Bonjour artouste
tout d’abord merci pour ta réponse
"compte tenu de ce que tu demande à ton arduino, il faut AMHA passer par de l'interruption, pulsein ne tiendra pas la route "
ok super je me diser bien qu'il y avez un autre moyen car j'ai déjà écrit un code avec pulse in est sa ma fait vraiment peur car si c'est pour avoir des résultat qui alterne de 5500 a 6500 alors que la mesure correcte et de 6000 sa le fait pas trop
j'ai donc lut le lien est fait des test j'ai modifier le code je vais detailler se que j'ai fait:
déjà pour la partie câblage :
R1= 1115 ohm c'est se que j'ai trouver de mieux dans mon bazar
R2= 4001 ohm celle la est pas si mal
concernant le schéma je n'est pas mis les 2 condo de filtrage étant donner que se sont des test
petite question comment je peux tester ma sortie en volt aprer mon AOP amplificateur ?? (je soupçonne que ma carte son ne sort pas 1 volt a puissance maxi)
je suppose que je doit le tester en courent continue est a quelle fréquence (le réglage dans le logiciel) ?? enfin du moins si je peux le calculer avec un simple metrix
pour la partie logiciel:
j'utilise ton programme
VB_Generator_standalone
en réglage je me suis mis a 450 hertz se qui fait 9000rpm sur un 6cyl (3 pulse par tour)
pour la sinusoïde j'ai choisie la première case en partent de gauche il y an a 4 (celle tout a gauche est un triangle montant et descendent (celle que j'ai choisie))
pour le code je suis donc partie sur le lien que tu ma montrer
je les modifier pour qu'il fonctionne avec se que je veux faire:
/*
* Optical Tachometer
*
* Uses an IR LED and IR phototransistor to implement an optical tachometer.
* The IR LED is connected to pin 13 and ran continually.
* Pin 2 (interrupt 0) is connected across the IR detector.
*
* Code based on: www.instructables.com/id/Arduino-Based-Optical-Tachometer/
* Coded by: arduinoprojects101.com
*/
volatile byte rpmcount;
unsigned int rpm;
unsigned long timeold;
void rpm_fun()
{
//Each rotation, this interrupt function is run twice, so take that into consideration for
//calculating RPM
//Update count
rpmcount++;
}
void setup()
{
Serial.begin(9600);
//Interrupt 0 is digital pin 2, so that is where the IR detector is connected
//Triggers on FALLING (change from HIGH to LOW)
attachInterrupt(0, rpm_fun, CHANGE);
rpmcount = 0;
rpm = 0;
timeold = 0;
}
void loop()
{
//Update RPM every second
delay(1000);
//Don't process interrupts during calculations
detachInterrupt(0);
//Note that this would be 60*1000/(millis() - timeold)*rpmcount if the interrupt
//happened once per revolution instead of twice. Other multiples could be used
//for multi-bladed propellers or fans
rpm = 20*1000/(millis() - timeold)*rpmcount;
timeold = millis();
rpmcount = 0;
//Restart the interrupt processing
attachInterrupt(0, rpm_fun, CHANGE);
Serial.println(rpm, DEC);
}
voici se que j'ai fait:
déjà le mettre sur le port série car je n'est pas d’écran LCD
j'ai bien une valeur qui s'affiche
ensuite j'ai modifier sa formule >>>> rpm = 30*1000/(millis() - timeold)*rpmcount;
il dit que le code serrer normalement >>>> rpm = 60*1000/(millis() - timeold)*rpmcount;
pour une situation ou on aurer 1 pulse par tour j'usqua la pas de soucie j'en deduit donc que pour mon cas il faut >>>> rpm = 20*1000/(millis() - timeold)*rpmcount;
pour 3 pulse par tour
ensuite j'ai modifier:
attachInterrupt(0, rpm_fun, FALLING);
par
attachInterrupt(0, rpm_fun, CHANGE);
j'ai regarder dans la section du site arduino pour le langage est il et dit que:
FALLING : pour déclenchement de l'interruption lorsque la broche passe de l'état HAUT vers l'état BAS (front descendant)
se qui n'est pas bon pour mon cas car il s’agit d'impulsion de bas vers le haut c'est donc pour cela que j'ai mis la fonction :
CHANGE : pour déclenchement de l'interruption lorsque la broche change d'état BAS/HAUT
le probleme c'est que sa me retourne 180 RPM se qui est totalement faux car a 450 hertz je serrer a 9000 RPM
si quelqu'un a une idée
merci
EDIT: je tenez simplement a dire que j'effectue tout mais teste sur ma carte UNO pour pas flashez inutilement ma carte final
il y a 2 broche interruption sur UNO 2 et 3
pour le seeduino mega c'est 2,3,18,19,20,21
ayant utiliser par inadvertance 2,3,18,19
il m'en reste 2:
20 et 21 (PE2 et PE6)
se qui sont caler en seeeduino MEGA confirmeront mais dire