Composants utilisés
- 1 Fourche optique
- 1 Roue dentée et moteur
- 1 Carte Arduino Uno + câble USB
- 1 Câble de branchement Femelle Dupont
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é
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.
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
- 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 :
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