Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.
Aankoopadvies: Als u meerdere servomotoren gebruikt, raden we aan de PCA9685 16 Channel PWM Servo Driver Module te gebruiken om MCU-pinnen te besparen en de bedrading te vereenvoudigen.
Over Servo Motor en Rotary Encoder
Als u nog niet bekend bent met servo motor en rotary encoder (pinout, werking, programmeren, ...), leer er dan meer over in de volgende tutorials:
Deze afbeelding is gemaakt met Fritzing. Klik om de afbeelding te vergroten.
Arduino Code
/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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;}
Snel aan de slag
Verbind Arduino met uw pc via een USB-kabel
Open de Arduino IDE, selecteer het juiste board en de juiste poort
Kopieer bovenstaande code en open deze met de Arduino IDE
Klik op de Upload-knop in de Arduino IDE om de code naar de Arduino te uploaden
Open de Seriële Monitor
Draai aan de rotary encoder
Bekijk de beweging van de servo motor
Zie het resultaat in de Seriële Monitor
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')
Lees de regel-voor-regel uitleg in de commentaarregels van de broncode!
Video Tutorial
We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.
U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!