Dans ce tutoriel, nous allons apprendre à programmer un Arduino pour faire tourner un moteur servo en fonction de la valeur de sortie de l'encodeur rotatif.
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.
Note d'achat: Si vous utilisez plusieurs servomoteurs, nous recommandons d'utiliser le PCA9685 16 Channel PWM Servo Driver Module pour économiser les broches du MCU et faciliter le câblage.
À propos du moteur servo et de l'encodeur rotatif
Si vous ne connaissez pas le moteur servo et le codeur rotatif (brochage, fonctionnement, programmation...), renseignez-vous sur ces derniers dans les tutoriels suivants :
Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Code Arduino
/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino/arduino-rotary-encoder-servo-motor*/#include <Servo.h>#define CLK_PIN 2#define DT_PIN 3#define SW_PIN 4#define SERVO_PIN 9#define DIRECTION_CW 0 // clockwise direction#define DIRECTION_CCW 1 // counter-clockwise directionint counter = 0;intdirection = DIRECTION_CW;int CLK_state;int prev_CLK_state;Servo servo; // create servo object to control a servovoidsetup() {Serial.begin(9600);// configure encoder pins as inputspinMode(CLK_PIN, INPUT);pinMode(DT_PIN, INPUT);// read the initial state of the rotary encoder's CLK pin prev_CLK_state = digitalRead(CLK_PIN); servo.attach(SERVO_PIN); // attaches the servo on pin 9 to the servo object servo.write(0);}voidloop() {// read the current state of the rotary encoder's CLK pin CLK_state = digitalRead(CLK_PIN);// If the state of CLK is changed, then pulse occurred// React to only the rising edge (from LOW to HIGH) to avoid double countif (CLK_state != prev_CLK_state && CLK_state == HIGH) {// if the DT state is HIGH// the encoder is rotating in counter-clockwise direction => decrease the counterif (digitalRead(DT_PIN) == HIGH) { counter--;direction = DIRECTION_CCW; } else {// the encoder is rotating in clockwise direction => increase the counter counter++;direction = DIRECTION_CW; }Serial.print("DIRECTION: ");if (direction == DIRECTION_CW)Serial.print("Clockwise");elseSerial.print("Counter-clockwise");Serial.print(" | COUNTER: ");Serial.println(counter);if (counter < 0) counter = 0;elseif (counter > 180) counter = 180;// sets the servo angle according to the counter servo.write(counter); }// save last CLK state prev_CLK_state = CLK_state;}
Étapes rapides
Connectez l'Arduino au PC via le câble USB
Ouvrez l'IDE Arduino, sélectionnez la bonne carte et le bon port
Copiez le code ci-dessus et ouvrez-le avec l'IDE Arduino
Cliquez sur le bouton Upload sur l'IDE Arduino pour téléverser le code sur l'Arduino
Ouvrez le moniteur série
Tournez l'encodeur rotatif
Observez la rotation du moteur servo
Consultez le résultat sur le moniteur série
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !