Mesure de fréquence et rotation par fourche optique

Utilisation de capteurs et composants électroniques avec Arduino.
Une fiche de tutoriel pour chaque.

Mesure de fréquence et rotation par fourche optique

Messagepar tiptop » Jeu 22 Aoû 2013 18:46

Une fourche optique est un interrupteur sans contact qui permet de détecter un objet, de mesurer des fréquence, des vitesses de rotation.

Image


Composants utilisés


Principe de fonctionnement
Un petit objet est placé entre les montants d'une fourche optique. Il interrompt le faisceau lumineux (infrarouge) entre une LED et un photo détecteur.
La fourche optique détecte alors sa présence.

Avec une roue à encoches qui tourne devant le capteur, la fourche une renvoie une série d'impulsions. Leur fréquence permet de déterminer la vitesse de rotation.

Cet interrupteur optique est sans contact. Il permet de détecter la présence de n'importe quel petit objet opaque placée dans la fente.

Remarques
  • Une photodiode (ou un phototransistor) permet une réponse très rapide.
  • Ce principe est utilisé dans les souris d'ordinateur (2 capteurs pour X Y).
  • Certains systèmes fonctionnent par réflexion plutôt que par interruption d'un signal lumineux mais nécessitent une surface réfléchissant le faisceau.
  • 2 capteurs un quadrature permettent de déterminer le sens de rotation en plus de la vitesse.

Applications
  • Détection de présence sans contact
  • Construction d'anémomètre
  • Mesure de vitesse de rotation de moteur
  • Mesure de position (souris de PC, robot roulant)
  • Détection de fin de papier dans une imprimante
  • Synchronisation précise de mécanismes
  • Comptage d'impulsions
  • Détection de fin de course ou de fermeture
  • Codeur incrémental...

Montage
Brochage fourche --> Arduino
  • VCC --> +5V
  • GND --> Gnd
  • DO --> pin d5
  • AO --> non connecté

Image

La sortie est digitale. Elle vaut 1 quand il y a présence d'un objet opaque dans l'encoche (5 mm de large), 0 si c'est vide : c'est un détecteur de présence.

L'alimentation peut être de 3.3 à 5V.
2 leds témoins sur le PCB :
  • LED rouge allumée = power on.
  • LED verte allumée si pas d'obstacle dans la fourche, elle s'éteint si le faisceau est coupé

Exemple 1 : un détecteur d'objet
Code: Tout sélectionner
//===Détection de présence avec une fourche optique
// tiptopboards 22 08 2013
//
// Branchement du capteur sur pin5 digital
//==========================================================

// Pins utilisées
const int fourchePin = 5;     //Sortie de la fourche pin5
const int ledPin =  9;        // LED témoin sur pin

int EtatFourche =0 ;

// Initialisation
void setup() {
  Serial.begin(9600);   //connection au port série
  pinMode(ledPin, OUTPUT);     //LED en sortie
  pinMode(fourchePin, INPUT);  //en entrée
  Serial.println("Fourche optique - detection de presence");
}

//=== Boucle de mesures
void loop() {
  //Vérifie si un objet obture la fourche optique
  EtatFourche = digitalRead(fourchePin);
  Serial.print("Etat ");
  if (EtatFourche == HIGH) {     
    // Allumer la LED témoin
    digitalWrite(ledPin, HIGH);
     Serial.println("Presence");
  }
  else {
    // Eteindre la LED
    digitalWrite(ledPin, LOW);
    Serial.println("Vide");
  }
  delay(200);


Ceci permet de repérer une fin de course, plus de papier dans une imprimante, un repère mobile qui défile...

Exemple 2 : Mesure de fréquence d'impulsion (fréquencemètre)

Une roue dentée tourne devant la fourche, la coupure périodique du faisceau lumineux provoque une impulsion à chaque passage de dent.
Image

Nombre de tours minutes = Nombre de pulses/sec x Nombre d'encoches sur la roue x 60

Utilisations de ce type de montage :
  • Mesure de vitesse de rotation de moteur
  • asservissement de rotation de machine d'usinage numérique CNC
  • Fréquencemètre
  • capteur de pédalage
  • compteur de vitesse de vélo...

Câblage : signal sur pin5 digital

La sortie du capteur doit être digitale (0/1) et à un niveau suffisant (amplifié).
Notre module à fourche optique remplit ces 2 critères.

Ce programme permet des mesures de fréquences jusqu'à 8 kHz (avec une carte Uno).
Si on veut mesurer de plus hautes fréquences, utiliser un circuit diviseur (ou une autre librairie).

Programmation
Télécharger la librairie FreqCounter.
Installer les deux fichiers FreqCounter.cpp et FreqCounter.h dans un dossier \libraries\FreqCounter

Inclure la librairie dans votre programme avec
#include <FreqCounter.h>

Exemple de code pour mesurer fréquence et vitesse de rotation

Image

Code: Tout sélectionner
//===Mesure de fréquence avec la librairie FreqCounter
// tiptopboards 22 08 2013
// Source : http://interface.khm.de/index.php/lab/experiments/arduino-frequency-counter-library/
//
// Branchement du capteur sur pin5 digital
//==========================================================
/*
  Martin Nawrath KHM LAB3
  Kunsthochschule f¸r Medien Kˆln
  Academy of Media Arts
  http://www.khm.de
  http://interface.khm.de/index.php/labor/experimente/   
 */
 
#include <FreqCounter.h>  //Inclure la librairie de fréquence

// Variables utilisées
unsigned long frq;    //fréquence mesurée
int cnt;              //nombre de mesures réalisées
int encoches=2;  //16;       //nombre d encoches de la roue codeuse (1 ou plus)
float trmin;  //vitesse de rotation en tour/min

// Initialisation
void setup() {
  Serial.begin(9600);   //connection au port série
  Serial.println("Frequencemetre");
}

// === Boucle de mesures
void loop() {
  // Attendre le signal
  //compensation (étalonnage)
  FreqCounter::f_comp=10;   // Cal Value / Calibrate with professional Freq Counter

  // 10, 100 ou 1000 ms pour une résolution de 100, 10 et 1 Hz 
  FreqCounter::start(100);  // 100 ms Gate Time

  // Attendre jusqu'à avoir un comptage terminé
  while (FreqCounter::f_ready == 0)
 
 // Afficher la mesure de fréquence (et de rotation)
  frq=FreqCounter::f_freq;
  Serial.print(cnt++);
  Serial.print("  Freq (Hz): ");
  Serial.print(frq);
 
  trmin = frq/encoches*60;  //Vitesse de rotation en tour/min
  Serial.print("  tour/min: ");
  Serial.println(trmin);
  delay(500);



Sur le moniteur série :
Image

Références
Librairie officielle FreqCounter
https://github.com/lestofante/arduinoSk ... reqCounter

Exemples de mesure de fréquence (en anglais) de Lablll
http://interface.khm.de/index.php/lab/e ... r-library/

Réaliser un fréquencemètre complet (en anglais) avec FreqCounter
http://www.instructables.com/id/Frequen ... /?ALLSTEPS

Autres sources
Il existe d'autres librairies permettant de mesurer des fréquences (codes à tester, mises à jour et fonctionnement non garantis)

* La librairie FreqPeriodCounter de Albert van Dalen, utilisable jusque 25 kHz, permet de suivre plusieurs périodes en même temps.
https://github.com/emersonmoretto/Ardui ... dCounter.h
explications en anglais
http://www.avdweb.nl/arduino/hardware-i ... unter.html

* La librairie TimerOne (en anglais)
http://www.seeedstudio.com/wiki/Grove_- ... ive_Sensor
tiptopboards - admin
Avatar de l’utilisateur
tiptop
Administrateur du site
 
Messages: 93
Inscription: Mar 13 Aoû 2013 20:38
Localisation: 38

Re: Mesure de fréquence et rotation par fourche optique

Messagepar yagami-95 » Jeu 21 Déc 2017 21:20

Bonsoir, merci d'abord à l'administrateur de m'avoir accepté.
J'ai une question s'il vous plaît et j'espère que quelqu'un me répondra rapidement.
J'ai suivi votre tutoriel pour la mesure de la fréquence d'impulsion. J'ai crée un répertoire "FreqCounter" dans \libraries\FreqCounter ou j'ai intégré les fiches suivants:

- FreqCounter.cpp~
- FreqCounter.cpp
- FreqCounter.h
- FreqCounter.pde

Mais lors de la compilation, on me demande d'inclure les bibliotèques suivants:

- WProgram
- core_build_options
- core_pins
- TinyDebugSerial
- wiring

Tout à été fais mais lorsque je recompile à nouveau, j'ai cette erreur:

cannot convert 'TinyDebugSerialWriter_115200* {aka int*}' to 'TinyDebugSerialWriter*' in assignment

_writer = &tdsw115200;


SVP J'AURAI BESOIN D'AIDE...
yagami-95
 
Messages: 1
Inscription: Jeu 21 Déc 2017 20:32


Retourner vers Capteurs et composants

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 6 invités

cron