Controlando Servo Motor usando Freeduino

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:

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.
Conversor analógico para digital

À 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

Pinagem Freeduino

Servocontrole usando Arduino

Imagens

IMAGENS:

Controlando Servo Motor usando Freeduino

Placa de ensaio com resistor variável

Controlando Servo Motor usando Freeduino

Placa de ensaio e servo motor

Controlando Servo Motor usando Freeduino

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

}

###

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.