ESP32Servo
Knob.ino
Go to the documentation of this file.
1 /*
2  Controlling a servo position using a potentiometer (variable resistor)
3  by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
4 
5  modified on 8 Nov 2013
6  by Scott Fitzgerald
7 
8  modified for the ESP32 on March 2017
9  by John Bennett
10 
11  see http://www.arduino.cc/en/Tutorial/Knob for a description of the original code
12 
13  * Different servos require different pulse widths to vary servo angle, but the range is
14  * an approximately 500-2500 microsecond pulse every 20ms (50Hz). In general, hobbyist servos
15  * sweep 180 degrees, so the lowest number in the published range for a particular servo
16  * represents an angle of 0 degrees, the middle of the range represents 90 degrees, and the top
17  * of the range represents 180 degrees. So for example, if the range is 1000us to 2000us,
18  * 1000us would equal an angle of 0, 1500us would equal 90 degrees, and 2000us would equal 1800
19  * degrees.
20  *
21  * Circuit: (using an ESP32 Thing from Sparkfun)
22  * Servo motors have three wires: power, ground, and signal. The power wire is typically red,
23  * the ground wire is typically black or brown, and the signal wire is typically yellow,
24  * orange or white. Since the ESP32 can supply limited current at only 3.3V, and servos draw
25  * considerable power, we will connect servo power to the VBat pin of the ESP32 (located
26  * near the USB connector). THIS IS ONLY APPROPRIATE FOR SMALL SERVOS.
27  *
28  * We could also connect servo power to a separate external
29  * power source (as long as we connect all of the grounds (ESP32, servo, and external power).
30  * In this example, we just connect ESP32 ground to servo ground. The servo signal pins
31  * connect to any available GPIO pins on the ESP32 (in this example, we use pin 18.
32  *
33  * In this example, we assume a Tower Pro SG90 small servo connected to VBat.
34  * The published min and max for this servo are 500 and 2400, respectively.
35  * These values actually drive the servos a little past 0 and 180, so
36  * if you are particular, adjust the min and max values to match your needs.
37  */
38 
39 // Include the ESP32 Arduino Servo Library instead of the original Arduino Servo Library
40 #include <ESP32Servo.h>
41 
42 Servo myservo; // create servo object to control a servo
43 
44 // Possible PWM GPIO pins on the ESP32: 0(used by on-board button),2,4,5(used by on-board LED),12-19,21-23,25-27,32-33
45 int servoPin = 18; // GPIO pin used to connect the servo control (digital out)
46 // Possible ADC pins on the ESP32: 0,2,4,12-15,32-39; 34-39 are recommended for analog input
47 int potPin = 34; // GPIO pin used to connect the potentiometer (analog in)
48 int ADC_Max = 4096; // This is the default ADC max value on the ESP32 (12 bit ADC width);
49  // this width can be set (in low-level oode) from 9-12 bits, for a
50  // a range of max values of 512-4096
51 
52 int val; // variable to read the value from the analog pin
53 
54 void setup()
55 {
56  // Allow allocation of all timers
61  myservo.setPeriodHertz(50);// Standard 50hz servo
62  myservo.attach(servoPin, 500, 2400); // attaches the servo on pin 18 to the servo object
63  // using SG90 servo min/max of 500us and 2400us
64  // for MG995 large servo, use 1000us and 2000us,
65  // which are the defaults, so this line could be
66  // "myservo.attach(servoPin);"
67 }
68 
69 void loop() {
70  val = analogRead(potPin); // read the value of the potentiometer (value between 0 and 1023)
71  val = map(val, 0, ADC_Max, 0, 180); // scale it to use it with the servo (value between 0 and 180)
72  myservo.write(val); // set the servo position according to the scaled value
73  delay(200); // wait for the servo to get there
74 }
75 
static void allocateTimer(int timerNumber)
Definition: ESP32PWM.cpp:25
void write(int value)
Definition: ESP32Servo.cpp:131
int potPin
Definition: Knob.ino:47
int val
Definition: Knob.ino:52
void setPeriodHertz(int hertz)
Definition: ESP32Servo.h:138
Servo myservo
Definition: Knob.ino:42
void setup()
Definition: Knob.ino:54
int ADC_Max
Definition: Knob.ino:48
void loop()
Definition: Knob.ino:69
int attach(int pin)
Definition: ESP32Servo.cpp:73
int servoPin
Definition: Knob.ino:45