Raspberry & sensores: tacômetro efeito Hall

Seguindo com o projeto que começou a ser descrito nos posts aqui e aqui, vamos falar do uso de sensores digitais no RPi.

Foi dito no último post que os servo-motores de giro contínuo não têm uma referência, ou seja, eles não "sabem" a sua posíção quando a gente os liga.

Se queremos usá-lo para tracionar um carrinho, por exemplo, sem problema, porque normalmente a gente sabe onde o carrinho está (vendo-o ou com algum esquema de monitoramento, como um GPS) e o motor só precisa girar a roda obedecendo a comandos.

Mas se queremos usar um servo 360 para posicionamento, devemos dar a ele uma referência, ou seja, um modo de identificar uma determinada posição como "0". Aí ele pode se deslocar relativamente a esse ponto, e toda vez que perder essa referência ele pode procurá-la novamente, zerando a posição.

Existem muitos (mesmo!) jeitos de se fazer isso. Um dos mais comuns é usar um sensor de efeito Hall. Como conta no artigo do link o grande Newton C. Braga (de quem eu já lia os artigos quando era adolescente e me iniciava nos mistérios da eletrônica), o sensor Hall é um dispositivo que detecta a presença de um campo magnético. Por ser muito pequeno, barato e consumir pouquíssima energia, ele é muito utilizado em circuitos, estando presentes em todos os veículos carros fabricados, por exemplo.

Abaixo, imagens da montagem:

Sensor Hall A3144
 Para gerar o sinal magnético no sensor, coloquei um pequeno ímã no CD qu está preso ao motor. O suporte foi feito em alumínio, porque este material estava literalmente "na mão", se é que vocês me entendem... quem disse que ímã não gruda em metais não ferrosos não conhecia os poderes de uma boa fita dupla-face... ;)

Abaixo, imagens do sensor e do ímã, este último retirado do falante de um fone de ouvido.



Para testar a montagem, fiz um programa que implementa um tacômetro, ou seja, conta as voltas dadas pelo CD.

# -*- coding: utf-8 -*-
import RPIO
from RPIO import PWM
import time

# pino do sensor Hall (número GPIO)

pinHall = 4

# pino do servo
servoPin = 24

inputValue = True

servo = PWM.Servo()

# Define o pino do Hall como entrada (RPIO.IN) e seta
# o pullup (mais sobre isso nesse blog, dê uma pesquisada
# em pulldown.

RPIO.setup(pinHall, RPIO.IN, pull_up_down=RPIO.PUD_UP)

i = 0

# aciona o servo com velocidade alta

servo.set_servo(servoPin, 2000)
time.sleep(1)

while(True):

# O Raspberry retorna True para o sensor desativado,
# por causa do pullup. Quando fica False é que o ímã está
# passando pelo sensor. Assim, o while abaixo fica rolando
# até que o ímã passe pelo sensor. O comando RPIO.input
# lê o valor do sensor (ativado/desativado) e coloca
# em inputValue.

    while(inputValue):
        inputValue= RPIO.input(pinHall)        

# Saindo do while(imputValue) => passagem pelo sensor,
# ou seja, conta-se mais uma volta.

    i=i+1
    print(i)

# Para que o while de espera pela passagem do íma aconteca
# novamente...

    inputValue=True
 
Abaixo, por fim como usual neste blog, o vídeo da coisa funcionando.


É isso!

Comentários

Postar um comentário

Postagens mais visitadas deste blog

Controle PID de Potência em Corrente Alternada - Arduino e TRIAC - Parte III

Controle PID de Potência em Corrente Alternada - Arduino e TRIAC - Parte I

Dividindo um programa (sketch) do Arduino em mais de um arquivo