,

Servo motor SG90 hobby com ESP32

Posted by

Veremos como controlar o servo motor de hobby SG90 com ESP32, também a biblioteca e o conhecimento se aplicam à maioria dos servos pequenos. Um servo motor é um motor cujo controle é mais fino, usa um sistema de feedback para velocidade e posição.

Isso significa que você pode (como veremos) comandá-lo para parar e ficar em qualquer ângulo que desejar. Isso torna os servos muito especiais para obedecer ao controle fino de posição. Servos industriais, por exemplo, podem atingir posições de frações de graus.

Servo motor SG90
Servo motor SG90

O servo em questão neste artigo é o SG90, um modelo genérico (que pode ser comprado aqui, meu link de afiliado), cuja folha de dados está aqui. Ele é capaz de fazer uma rotação de 180 graus (90 graus para cada lado) e girar 60 graus em 120 milissegundos. Ele tem uma força de 1,8 kgf.cm.

O primeiro código que tentaremos deve ser instalado de dentro do Arduino IDE. Vá para “Sketch > Add library > Manage library” e digite “ESP32servo”. Instale o de Kevin Harrington; então abra o exemplo Sweep indo para “File > Examples > ESP32Servo > Sweep”. O código é replicado abaixo.

Observe que mudamos o número do pino de myservo.attach(9) para myservo.attach(D9) para o ESP32-C6. Ao testar, percebi que o pino D9 não estava funcionando, então mudei para o pino D3, como myservo.attach(D3).

Outro detalhe importante é o consumo de energia do servo. Esta fonte fala sobre 360mA em stall (corrente máxima, travado). Meu ESP32-C6 não consegue fornecer essa corrente sozinho, então usaremos uma fonte de alimentação externa de 5V. Então a placa de desenvolvimento do ESP32-C6 será alimentada por uma porta USB e o servo por outra porta USB.

O código

#include <ESP32Servo.h>

Servo myservo;  // create servo object to control a servo
// 16 servo objects can be created on the ESP32

int pos = 0;    // variable to store the servo position
// Recommended PWM GPIO pins on the ESP32 include 2,4,12-19,21-23,25-27,32-33 
// Possible PWM GPIO pins on the ESP32-S2: 0(used by on-board button),1-17,18(used by on-board LED),19-21,26,33-42
// Possible PWM GPIO pins on the ESP32-S3: 0(used by on-board button),1-21,35-45,47,48(used by on-board LED)
// Possible PWM GPIO pins on the ESP32-C3: 0(used by on-board button),1-7,8(used by on-board LED),9-10,18-21
#if defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3)
int servoPin = D3;
#elif defined(CONFIG_IDF_TARGET_ESP32C3)
int servoPin = D3;
#else
int servoPin = D3;
#endif

void setup() {
	// Allow allocation of all timers
	ESP32PWM::allocateTimer(0);
	ESP32PWM::allocateTimer(1);
	ESP32PWM::allocateTimer(2);
	ESP32PWM::allocateTimer(3);
	myservo.setPeriodHertz(50);    // standard 50 hz servo
	myservo.attach(servoPin, 1000, 2000); // attaches the servo on pin D3 to the servo object
	// using default min/max of 1000us and 2000us
	// different servos may require different min/max settings
	// for an accurate 0 to 180 sweep
}

void loop() {

	for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
		// in steps of 1 degree
		myservo.write(pos);    // tell servo to go to position in variable 'pos'
		delay(15);             // waits 15ms for the servo to reach the position
	}
	for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
		myservo.write(pos);    // tell servo to go to position in variable 'pos'
		delay(15);             // waits 15ms for the servo to reach the position
	}
}
Servo motor SG90 hobby com ESP32-C6
Setup do teste: ESP32-C6 e servo SG90

Observe o cabo USB cinza na imagem, este alimenta o servo. O preto à esquerda alimenta e se comunica com o ESP32-C6.

O resultado do código

No vídeo abaixo é possível ver o servo fazendo 90 graus para cada lado, e depois repetindo. Ele é lento e isso é normal, já que seu controle não é tão rápido e sua mecânica é toda de plástico.

Pra finalizar

Controlar um servo com um ESP32-C6 no ambiente Arduino é super fácil e direto. Você pode usar sua criatividade para criar mais exemplos, além do que foi mostrado aqui.

Quer saber mais sobre aplicações do ESP32-C6? confira este artigo. Além disso, se você quiser comprar um dos servos estudados neste artigo, use meu link de afiliado.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *