Mesure Précise de Fréquence et Rapport Cyclique avec Arduino UNO
Composants et Fournitures
| Arduino UNO | ×1 |
| Écran LCD Alphanumérique 20×4 | ×1 |
Outils Nécessaires
- Plaque d'Essai 270 Points
Applications et Services en Ligne
- Arduino IDE
À Propos du Projet
L'Arduino trouve des applications dans de nombreux domaines, dont la mesure : grandeurs électriques (tension, courant, puissance), physiques (température, humidité, luminosité) ou valeurs de composants électroniques.
Cet article démontre la mesure de fréquence et de rapport cyclique (duty cycle) de signaux d'impulsion avec Arduino. La mesure de fréquence est cruciale en communications. Le rapport cyclique (largeur d'impulsion) est essentiel pour le contrôle de vitesse moteur DC, position servo, ou vérification de symétrie de signaux numériques (récepteurs, répéteurs).
Le projet mesure : fréquence, temps haut (Ton), temps bas (Toff), rapport cyclique, et affiche sur LCD 16×4 (le texte mentionne 16×4, le composant listé est 20×4).

Description du Circuit
- Arduino UNO + LCD 16×4 (ou 20×4)
- Signal d'impulsion → Pin numérique 7 de l'Arduino
- LCD : RS → Pin 9, Enable → Pin 8, RW → GND, D4-D7 → Pins 10-13
- Rétroéclairage LCD (pin 15) et VCC (pin 2) → 5V Arduino
- GND LCD (pins 1, 16) → GND
- Potentiomètre 1 kΩ sur Vo (pin 3) pour contraste
Fonctionnement
- Au démarrage : affichage « Freq: », « Ton: », « Toff: », « Duty: » sur 4 lignes.
- À l'arrivée d'impulsions sur pin 7 : attente front montant.
- Mesure durée niveau haut → Ton (µs).
- Mesure durée niveau bas → Toff (µs).
- Période = Ton + Toff.
- Fréquence = 1 / Période (en Hz, période en secondes).
- Rapport cyclique = Ton / (Ton + Toff) × 100 (%).
- Affichage des 4 paramètres sur LCD.
- Répétition chaque seconde → mesure continue.
Code Arduino
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 10, 11, 12, 13); // RS, EN, D4, D5, D6, D7
#define pulse_ip 7
int ontime, offtime, duty;
float freq, period;
void setup() {
pinMode(pulse_ip, INPUT);
lcd.begin(16, 4); // ou 20, 4 selon votre écran
lcd.clear();
lcd.print("Freq:");
lcd.setCursor(0,1); lcd.print("Ton:");
lcd.setCursor(0,2); lcd.print("Toff:");
lcd.setCursor(0,3); lcd.print("Duty:");
}
void loop() {
ontime = pulseIn(pulse_ip, HIGH);
offtime = pulseIn(pulse_ip, LOW);
period = ontime + offtime;
freq = 1000000.0 / period; // Période en µs → Fréquence en Hz
duty = (ontime / period) * 100;
lcd.setCursor(5,0); lcd.print(freq); lcd.print("Hz");
lcd.setCursor(4,1); lcd.print(ontime); lcd.print("us");
lcd.setCursor(5,2); lcd.print(offtime); lcd.print("us");
lcd.setCursor(6,3); lcd.print(duty); lcd.print('%');
delay(1000);
}
Schéma de Câblage

Processus de fabrication
- Mesure de la fréquence et de la phase dans les systèmes de puissance AC
- Système de pointage RFID fiable avec Arduino et Python (base de données phpMyAdmin)
- Construire une télécommande Android universelle avec Arduino, 1Sheeld et contrôle IR
- Construire un Voltmètre Intelligent avec Arduino et Smartphone – Projet DIY Facile
- Bocal Intelligent IoT avec ESP8266, Arduino et Capteur Ultrasonique – Surveillance Temps Réel
- Mesure Précise de Fréquence et Rapport Cyclique avec Arduino UNO
- Contrôlez un rover Arduino avec Firmata et une manette Xbox One
- Mesurer la masse de la Terre avec Arduino : Guide DIY étape par étape
- Construire une Boussole Numérique Temps Réel avec Arduino et Processing