Artigos

Controlar um servomotor com Raspberry Pi

O que é um servomotor?

Um servomotor ou “servo” é um motor eletrónico de pouca inércia com o qual se pode controlar tanto a velocidade como a posição dentro do seu alcance operacional.

O corpo dos servo motores está formado por um motor elétrico, uma caixa de velocidades com engrenagens e um circuito eletrónico de controlo. Os servomotores são normalmente utilizados em modelismo para controlar os sistemas de direção, por exemplo o comando de um barco ou os ailerons de um avião.

Os servos usam a modulação por largura de pulso (PWM) para controlar a posição do motor elétrico.

 

Montagem e ligações

Hà pouco tempo, eu estava a trabalhar num projeto de uma câmara de segurança controlada por um Raspberry Pi. A meio do projeto, ocorreu-me que seria interessante que o utilizador pudesse mover a camára simplesmente pressionando uns botões da interface web, assim a cãmara poderia cobrir um maior ângulo de visão, para esta modificação pensei que um servomotor poderia fazer bem o trabalho. O servomotor que usei foi um TOWER PRO SG90.

Os cabos são de cor castanha (GND), vermelha (VCC) e amarela (SIGNAL). Este servo alimenta-se de 5V por isso é o ideal para usar com Raspberry ou Arduino. O seu ângulo de rotação é de 180º mas pode-se modificar e fazer com que rode 360º. Tem uma força de rotação de 1.5kg/cm. Para controlar o servomotor, montei o seguinte esquema:

 

Controlar o servomotor con Python

Para poder controlar o servo, vamos utilizar a livraria RPI.GPIO, este pequeno código em Python mostra como controlar o servo, colocando-o em 3 posições, esquerda, direita e centro.

import RPi.GPIO as GPIO    #Importamos a livraria RPi.GPIO
import time                #Importamos time para poder usar time.sleep

GPIO.setmode(GPIO.BOARD)   #Colocamos o Raspberry em modo BOARD
GPIO.setup(21,GPIO.OUT)    #Colocamos o pin 21 como saída
p = GPIO.PWM(21,50)        #Colocamos o pin 21 em modo PWM e enviamos 50 pulsos por segundo
p.start(7.5)               #Colocamos um pulso de 7.5% para centrar o servo

try:                 
    while True:      #iniciamos un loop infinito

        p.ChangeDutyCycle(4.5)    #Enviamos uma pressão de 4.5% para rodar o servo para a esquerda
        time.sleep(0.5)           #pausa de meio segundo
        p.ChangeDutyCycle(10.5)   #Enviamos uma pressão de 10.5% para rodar o servo para a direita
        time.sleep(0.5)           #pausa de meio segundo
        p.ChangeDutyCycle(7.5)    #Enviamos uma pressão de 7.5% para centrar o servo de novo
        time.sleep(0.5)           #pausa de meio segundo

except KeyboardInterrupt:         #Se o utilizador pressiona CONTROL+C então...
    p.stop()                      #Prendemos o servo 
    GPIO.cleanup()                #Limpamos os pinos GPIO do Raspberry e fechamos o script

Gostaram deste artigo ? Deixem o vosso comentário no formulário a baixo.

Não se esqueçam de fazer like na nossa página no facebook.

Todos os produtos utilizados neste artigo podem ser encontrados na loja de componentes eletrónicos ElectroFun.

Comments

comments

Deixar uma resposta

Este site utiliza o Akismet para reduzir spam. Fica a saber como são processados os dados dos comentários.