petit test ce matin avec un banc qui fait tourner mon arbre equipé d'un tachymetre deporté.
ça fonctionne !!
mais j'ai des sauts ... comme si il manquait la resistance de pull up ??
dans le moniteur j'ai bien 1720 trs/min qui s'affiche pendant 5 lignes puis la 6eme affiche 3000 trs/min puis re-5 lignes à 1720 trs/min ...
c'est un soucis de filtre ou de parasites ?
merci
Salut à tous,
me revoici après une longue pause afin de terminer d'autres projets.
je me suis fait un montage complet avec un moteur d’essuie glace, une carte de puissance sabertooth 2x12 et le filtre donné sur un de mes posts.
Rappel, une came tournante, 4 impulsions montantes, 4 descendantes, je ne veux compter que l'une d'entre elle afin de créer un compte tour.
Mon programme fonctionne sur le principe MAIS quand tout ça est en rotation le compteur n'est pas stable du tout, le RPM affiche beaucoup de variations, il a parfois les bonnes valeurs mais ça varie ....
pourtant ce systeme fonctionne tres bien quand on se sert du rupteur (interrupteur actionné par la came) pour allumer une led, mais si je souhaite recuperer ce signal et le traiter il apparait ces variations ....
pourriez vous m'aider ?
merci d'avance

voici le programme :
#include <SoftwareSerial.h>
#include <SabertoothSimplified.h>
#define NOT_AN_INTERRUPT -1
#include "LiquidCrystal.h" //ajout de la librairie
SoftwareSerial SWSerial(NOT_A_PIN, 8); //Pin 8 utilisé pour communiquer avec la Sabertooth
SabertoothSimplified ST(SWSerial); //librairie sabertooth
int buttonState = 0;
int lastButtonState = 0;
const int potar = A0; //la broche pour régler la vitesse
int compteur =0;
/* constantes pour la broche de mesure */
const byte PIN_SIGNAL = 2; /* const met la variable en lecture seule / byte = 8 bytes 0 à 255 */
/* Variables pour la mesure */
volatile unsigned long periode = 0; /*volatile souvent associé à une interrupt / unsigned = non negatif / long = 4 294 967 295 */
void tick() {
if(digitalRead(PIN_SIGNAL)== LOW) /*lit le type de signal*/
{
compteur++; /*incremente à chaque signal LOW*/
if(compteur % 4 ==0){ /*si le resultat est divisible par 4 on passe à la suite*/
static unsigned long previousMicros = 0; /*static variable conservée entre 2 appels à la fonction / initialisation qu'une seule fois */
unsigned long currentMicros = micros(); /*le nombre de microSecondes depuis le début du programme */
/* Calcul le temps écoulé depuis le précédent front */
periode = currentMicros - previousMicros; /*le nombre de microSecondes depuis la dernière interruption*/
/* Met à jour la variable pour la prochaine interruption */
previousMicros = currentMicros; /*on se souvient du nombre de microSecondes depuis le début du programme*/}}
}
/** Fonction setup() */
void setup () {
Serial.begin(9600);
SWSerial.begin(38400);
/* Met la broche en sortie */
pinMode(PIN_SIGNAL, INPUT);
attachInterrupt(digitalPinToInterrupt(PIN_SIGNAL), tick, FALLING);
}
void loop() {
int vitesse = analogRead(potar);
ST.motor(1,vitesse / 16);
Serial.println("potar");
Serial.println(vitesse / 8);
Serial.println("");
Serial.println("RPM");
Serial.println(1000000 / periode * 60);
Serial.println("");
delay(100);
}