PRÁTICA 9 – ARDUÍNO E SERVO MOTOR 9g
Objetivos:
- Conectar um servo 9g no Arduíno.
- Controlar o servo 9g usando o código
- Usar um potenciômetro para controlar o servo 9g
INTRODUÇÃO
O servo 9g é um motor com um potenciômetro no mesmo eixo. Quando o servo gira, o potenciômetro também, o que permite saber em qual ângulo ou posição está o servo no momento. Dessa forma o ângulo pode ser controlado pelo arduino. Muito utilizado em braços mecânicos, controle de posição e outros.
O software pode enviar comandos para o servo indicando qual o ângulo que ele deve estar no momento. Isso é feito por um pulso gerado pelo Arduino (pela biblioteca servo.h). Esse pulso possui largura entre 1ms (que representa 0 graus) a 2ms (que representa 180 graus) como mostrado abaixo:
Esses sinais em azul são enviados pelo arduino e também são gerados internamente pelo servo. O circuito do servo compara ambos os sinais e gira o motor na direção indicada. Ou seja, se o potenciômetro estiver girado em 180 graus, o pulso gerado pelo servo terá 2ms, mas se o arduino enviar um pulso de 1ms isso significa que o servo deve ir para a posição zero graus. O circuito interno compara os dois sinais e gira o motor para zero graus.
Assim o servo pode ser controlado para ficar em qualquer posição entre zero e 180 graus.
Tarefas:
- Montar os circuitos abaixo (o protoboard que existe no circuito 1 é importante para montar o circuito 2)
Circuito 1 – Servo girando de 0 graus para 90 graus
Programa 1 – Servo girando de 0 graus para 90 graus
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <Servo.h> Servo servomotor; // Cria o objeto para controlar o servo void setup(){ servomotor.attach(8); // Associa o pino 8 ao objeto servomotor } void loop(){ // Gira para 0 graus servomotor.write(0); //Espera um tempo delay(1000); // Gira para 90 graus servomotor.write(90); //Espera um tempo delay(1000); } |
Circuito 2 – Servo controlado por potenciômetro
Programa 2 – Servo controlado por potenciômetro
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include <Servo.h> Servo servomotor; // Cria objeto para controlar o servo int readAnalog = 0; // Variável para armazenar o valor lido do potenciômetro void setup(){ servomotor.attach(8); // Associa o pino 8 ao objeto servomotor servomotor.write(0); // Inicia servomotor na posição zero } void loop(){ // Lê o valor do potenciômetro. Esse valor está entre 0 e 1023 (como em TODO analogRead) readAnalog = analogRead(0); // A função MAP Modifica a escala de 0 a 1023 para uma escala de 0 a 179 usado pelo servo readAnalog = map(readAnalog, 0, 1023, 0, 179); // Seta o sinal de controle de acordo com o potenciometro servomotor.write(readAnalog); //Espera um tempo até o próximo ajuste delay(100); } |