ESP32Servo
examples
Knob
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
57
ESP32PWM::allocateTimer
(0);
58
ESP32PWM::allocateTimer
(1);
59
ESP32PWM::allocateTimer
(2);
60
ESP32PWM::allocateTimer
(3);
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
ESP32PWM::allocateTimer
static void allocateTimer(int timerNumber)
Definition:
ESP32PWM.cpp:25
Servo::write
void write(int value)
Definition:
ESP32Servo.cpp:131
potPin
int potPin
Definition:
Knob.ino:47
val
int val
Definition:
Knob.ino:52
Servo::setPeriodHertz
void setPeriodHertz(int hertz)
Definition:
ESP32Servo.h:138
ESP32Servo.h
myservo
Servo myservo
Definition:
Knob.ino:42
setup
void setup()
Definition:
Knob.ino:54
ADC_Max
int ADC_Max
Definition:
Knob.ino:48
loop
void loop()
Definition:
Knob.ino:69
Servo::attach
int attach(int pin)
Definition:
ESP32Servo.cpp:73
servoPin
int servoPin
Definition:
Knob.ino:45
Servo
Definition:
ESP32Servo.h:121
Generated by
1.8.13