Servo é um tipo especial de motor que converte sinais elétricos em posições de eixo.
Os servos podem ser amplamente classificados como servos industriais e servos de nível hobby.
Servos industriais são geralmente servos CA ou CC de alta potência para serviços pesados, amplamente utilizados para braços robóticos precisos.
Servos de nível hobby são amplamente utilizados em hobbies RC, como aviões RC, carros, helicópteros, multirotores, barcos, embarcações flutuantes, etc.
Eles são usados principalmente para controlar superfícies de controle (aviões RC) ou para mecanismos de vetorização de empuxo (hovercraft, barcos, multirotores) ou para mecanismos de direção (carros RC).
Os servos de nível hobby são classificados como micro, padrão e gigantes com base no torque que podem fornecer, porém seu princípio de funcionamento é o mesmo.BCom base na velocidade de operação, eles são classificados como servos analógicos ou digitais. Os servos digitais fornecem maior velocidade, mas consomem mais energia.
A velocidade de um servo motor é definida como o tempo que o eixo leva para se mover de 00 para 600 após a aplicação do sinal.
Neste artigo usaremos um ARDUINO placa de clone viz. FREEDUINO.
A placa freeduino usada é baseada na placa arduino duemilanove e usa microcontrolador IC atmega 328PA.
A característica mais marcante de uma plataforma Arduino é sua facilidade de uso, já que o Arduino foi projetado para artistas em vez de engenheiros, torna-se mais interessante e divertido aprender programação Arduino e fazer projetos baseados nele.
Conselho Freeduino:
Descrição
Descrição:
Servo é o atuador mais amplamente utilizado em projetos como braços robóticos, avião RC, autobalanceador, etc.
Ele usa um mecanismo de feedback negativo para manter a posição do eixo com erro mínimo.
O servo motor possui três fios, diferentemente dos motores PMDC normais que possuem dois fios.
Entre esses 3 fios, 2 fios fornecem alimentação ao motor e um é usado para enviar sinais ao motor para as posições de eixo necessárias.
Esses sinais são sinais PWM de ciclo de trabalho variável e frequência de 40-50 Hz (servos analógicos) ou 400-500 Hz (servos digitais).
Os servos analógicos são mais baratos e consomem menos energia e os servos digitais fornecem torque e velocidade relativamente altos e são normalmente usados como servos de cauda de helicóptero.
O eixo é girado em um ângulo dependendo do tempo de ativação do pulso.
1ms = 00
1,5 ms = 900
2ms = 1800
Entrada (ADC):
O Arduino possui um conversor analógico para digital (ADC) integrado de 10 bits, portanto, pode fornecer valores digitais de 0 a 1023. (desde 2 ^ 10 = 1024)
Também podemos definir a tensão de referência ADC no Arduino, mas aqui deixaremos usar o valor padrão.
O resistor variável (preset ou potenciômetro) possui três pinos; os dois pinos externos são conectados ao terra e Vcc.
Isto forma um divisor de potencial e obtemos a tensão (Vout) correspondente ao botão do resistor.
À medida que giramos o botão do resistor variável, a tensão no pino do meio vai de 0-5V e o ADC do arduino a converte em 1024 valores, ou seja, 0-1023 valores digitais.
Agora usaremos esses valores 1024 para controlar nosso servo motor.
Saída (PWM):
Para acionar um servo, precisamos obter um sinal PWM da placa, isso geralmente é feito usando a função de temporizador do microcontrolador, mas o Arduino torna isso muito fácil.
O Arduino fornece uma biblioteca de servo na qual temos que atribuir apenas o ângulo do servo e o servo gira nesse ângulo, todos os cálculos PWM são tratados pela biblioteca de servo e obtemos um sinal PWM limpo de acordo com o ângulo desejado.
O Arduino possui um gerador PWM de 8 bits, então podemos obter até 256 sinais PWM distintos
Precisamos de 0-180 graus de rotação servo.
Agora, como estamos obtendo 1.024 valores do ADC que precisamos usar para girar o eixo do servo em 0-180 graus, usaremos uma função chamada mapeamento para mapear esses 1.024 valores distintos para 180 valores.
A função Map tem uma sintaxe: map(mapping_values,(intervalo de valores),(intervalo para o qual deve ser mapeado)
Exemplo: No nosso caso, a função map será semelhante a angle=map(pot_value,0,1023,0,180);
se você deseja alterar a direção do ângulo do servo em relação ao botão do potenciômetro, altere a fiação ou escreva a função de mapeamento como, angle=map(pot_values,0,1023,180,0);
Agora, conforme mudamos o resistor variável, a tensão na entrada ADC irá de 0 a 5V (analógico), 0-1023 (digital) e então será mapeada para 0-180 (servo ângulo).
O potenciômetro é um dispositivo mais simples para entender o funcionamento de um dispositivo analógico, depois de nos familiarizarmos com ele podemos usar outros dispositivos analógicos como LDR, sensores infravermelhos de distância, sensores de temperatura, acelerômetros como nosso dispositivo de entrada e fazer outros projetos interessantes como robô de autoequilíbrio, seguidor de linha , evitador de obstáculos, rastreador solar, etc.
Componentes e Circuito
Componentes:
Placa Freeduino (Atmega 328)
Características:
Microcontrolador |
ATmega328 |
Tensão operacional |
5V |
Tensão de entrada (recomendado) |
7-12V |
Tensão de entrada (limites) |
6-20 V |
Pinos de E/S digitais |
14 (dos quais 6 fornecem saída PWM) |
Pinos de entrada analógica |
6 |
Corrente CC por pino de E/S |
40 mA |
Corrente DC para pino de 3,3 V |
50 mA |
Memória flash |
32 KB (ATmega328) dos quais 0,5 KB usados pelo bootloader |
SRAM |
2KB (ATmega328) |
EEPROM |
1KB (ATmega328) |
Velocidade do relógio |
16MHz |
Servo: Torre pro 9G Micro-servo.
Potenciômetro: Resistor variável de 10K (preset ou potenciômetro)
O CIRCUITO
Imagens
IMAGENS:
Placa de ensaio com resistor variável
Placa de ensaio e servo motor
Circuito baseado em Arduino
Vídeo
Código-fonte do projeto
###
#incluir
//inclui biblioteca de servos para controlar servos
Servo sajidservo; //define seu servo
int pote=0; //potenciômetro conectado no pino nº 0 do ADC
configuração nula
{
sajidservo.attach(9); //conecte seu servo a um pino PWM (aqui pino nº 9)
Serial.begin(9600); //exclua isso se você não quiser ver os valores ADC no monitor serial
}
loop vazio
{
int val=analogRead(pot); // Lê os valores do ADC e salva na variável val
int pos=mapa(val,0,1023,0,180); // mapeia o intervalo do ADC com pwm
sajidservo.write(pos); //escreve no servo
Serial.println(val); //exclui se não quiser ver os valores ADC
}
###