Sensor Hall KY-003 com Servo Tower Pro SG-5010 18

Sensor Hall é um sensor que utiliza o efeito hall para verificar se foi detectado algum campo magnético na área do sensor. No Arduino, podemos utilizar o Sensor Hall como um prático dispositivo para determinar se algum objeto magnético se aproximou do sensor, e assim acionar outras portas do Arduino. O sensor funciona com uma simples chave ou botão, sendo que, na ausência de campo magnético, o sensor envia o sinal 1 (HIGH) para o Arduino, e ao detectar algum campo magnético, a porta vai à nível 0 (LOW).

Sensor Hall

Como é comum em outros módulos para o Arduino, o Sensor Hall KY-003 tem apenas 3 pinos : Vcc, GND e Sinal, sendo que este módulo funciona com tensões de 4,5 à 24 volts DC. O módulo também possui um led que permanece aceso ao detectar um campo magnético.

Detectar a abertura de portas e janelas em um sistema de alarme ou montar um contador de RPM para motores são algumas das aplicações sugeridas. Neste post, ilustramos a utlização deste sensor de efeito hall em conjunto com um Servo Tower Pro com rotação infinita, onde fixamos um ímã no motor, e a cada acionamento do sensor, o sentido de rotação é invertido.

Montagem Sensor Hall e Servo Tower Pro

Lembrando que no servo motor que estamos utilizando, o Tower Pro SG-5010, o fio laranja corresponde ao pino de dados/controle, o fio vermelho ao Vcc 5v, e o fio marrom ao GND.

Circuito Sensor Hall - Servo Motor

O programa utiliza apenas a biblioteca Servo, já que o sensor hall não exige biblioteca própria. No ínicio do programa definimos os pinos do sensor (pino_hall) e o de controle do servo (sinal_servo). Dentro do loop, uma rotina inverte o valor da variável estado a cada acionamento do sensor, e essa variável, por sua vez, é responsável por inverter o sentido de rotação do motor, por meio da variável sentido.

// Programa : Sensor Hall com Servo Tower Pro SG-5010
// Autor : MakerHero

#include <Servo.h>

Servo myservo;

int sinal_servo = 2; //Pino de sinal para o servo
int pino_hall = 4;   //Pina de sinal do sensor
int leitura;         //Armazena informações sobre a leitura do sensor
int estado = 0;      //Variavel auxiliar    
int sentido = 0;     //Armazena o sentido de rotacao

void setup()
{
  pinMode(sinal_servo, OUTPUT); //Define o pino como saida
  pinMode(pino_hall, INPUT);      //Define o pino como entrada
  myservo.attach(2);
  myservo.write(0);
}

void loop()
{
  leitura = digitalRead(pino_hall);
  if (leitura != 1)
  {
    if (estado == 0)
    { 
      sentido = 180;
      estado = !estado;
      myservo.write(sentido);
    }
    else if (estado == 1)
    {
      sentido = 0;
      estado = !estado;
      myservo.write(sentido);
  }
  delay(300);
  } 
}

Você pode utilizar o mesmo princípio de funcionamento e utilizar o sensor hall para contar o número de rotações do motor, por exemplo, ou para executar determinada tarefa um certo número de vezes.

 Gostou? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

18 Comentários

  1. Hola, muy práctico su proyecto, Felicitaciones !!!. Estoy aprendiendo arduino y robotica, por lo que estaba buscando la forma de usar un sensor hall como potenciómetro para mover un servo de 0º a 180º. Tengo un sensor hall 49E y dos imanes de neodimio, si lo hacerco por el frente disminuye la lectura, si lo acerco desde atras aumenta, pero en ninguno de los casos se mueve el servo desde 0 a 180. ¿Tendrá algún consejo o idea que me ayude, o bien alguna página de donde sacar información?
    Desde ya muchas gracias.

  2. Boa noite caríssimo mestre em programas de arduino, você é dez

  3. Bom dia. Seria possível utilizar este sensor hall de forma analógica para detectar com precisão a distância linear entre o sensor e um imã?

    1. Olá Caio!

      Com esse é possível:
      https://www.makerhero.com/produto/sensor-de-efeito-hall-us1881/

      Abraços!

      André – Equipe MakerHero

  4. Adilson , Boa-Noite , Eu Fiz Um Pulsador Para Limpeza De Bicos Injetores Automotivos , Usei Um Platinado Como Interruptor Para Fazer O Corte Na Alimentação Dos Bicos , No Caso 12-Volts ; Eu Queria Saber Qual Sensor De Efeito Hall Posso Usar Para Substiuir O Platinado , O Aparelho Está Funcionando Bem Só Que Devido Ao Abre E Fecha Do Platinado Ficou Barulhento , Eu Não Tinha Conhecimento Destes Sensores Ainda , Até Tinha Pensado Em Usar Um Sensor Automotivo , Porém Eu Iria Precisar De Uma Caixa Muito Maior Do Que A Que Eu Tinha , Se Puder Me Esclarecer Esta Dúvida Será De Grande-Valia , Muito-Obrigado Por Hora .
    Eduardo

  5. Boa tarde, estou fazendo um projeto que utilizo os três componentes. É uma lixeira que separa metais e não-metais. O sensor vou para detectar a entrada e quero colocar um imã do outro lado da entrada para induzir o campo no material, porém estou com dúvida de como vou desconsiderar o campo magnético gerado pelo imã na programação, você saberia? O servo motor seria para abrir uma porta quando detectasse o metal.

  6. Boa tarde,
    Quando se aproxima um ímã do sensor, o sensor vai de 1 para 0. Isso é desejável.
    Contudo, ao se manter o ímã próximo ao sensor, esse fica disparando pulsos seguidos de 0.
    Em um velocímetro, ou contador de rpm, quando o campo magnético de um ímã vai se aproximando do sensor, o sensor detecta, e já começa a disparar esses pulsos até que o ímã se afaste novamente e o sensor deixe de detectar o campo magnético.
    Ou seja, o sensor detecta o campo magnético a medida em que ele vai se aproximando, cruza o sensor e vai se distanciando. Nesse período, múltiplos pulsos são disparados e o contador do programa conta a mais.
    Há alguma maneira de fazer com que o sensor marque apenas um pulso enquanto o ímã permanece constantemente a frente do sensor; ou, marque apenas um pulso a cada revolução?
    Att,
    Bruno

    1. Bruno, você pode tentar implementar a mesma lógica do exemplo “StateChangeDetection” do Arduino. Assim ele só vai contar quando mudar o estado do sensor.

      Depois voce precisará fazer o calculo do rpm

      //rpm = (60 * 1000 ) / (millis() – timeold) * Counter;

      const int sensorPin = 2;

      int Counter = 0;
      int sensorState = 0;
      int lastSensorState = 0;

      void setup() {
      pinMode(sensorPin, INPUT);
      Serial.begin(9600);
      }

      void loop() {

      sensorState = digitalRead(sensorPin);

      if (sensorState != lastSensorState) {

      if (sensorState == HIGH) {
      Counter++;
      Serial.print(“pulses: “);
      Serial.println(Counter);
      }

      }
      lastSensorState = sensorState;

      }

  7. qual a area de detecção do campo deste sensor?

  8. Alguém sabe como ficaria a programação para utilizar esse módulo como um velocímetro?

  9. Olá, estou com um problema de diferença de rotação entre dois motores DCs. A solução mais viável que possuo é utilizar sensores hall nas rodas para igualar a rotação desses dois motores. Estou com dificuldades para criar um código no arduíno. Alguém poderia me dizer como solucionar esse problema?

    Aguardo.

  10. ola como vai, gostei do projeto apresentado faz algum tempo que acompanho site de vocês e gostaria de dar os parabéns pela a iniciativa de divulgar projetos interessante e fácil de executar e dizer obrigado.

  11. Olá. Excelente trabalho.
    Tem jeito de fazer um velocímetro com o servo? Tipo… o sensor hall conta quantas voltas por segundo dá o motor e o servo fica numa posição diferente pra cada velocidade. Me ajuda ai????

    1. É preciso colocar o imã no eixo de transmissão do eixo ou roda de tração para coletar o dado. Lembre de que haverá um fator de pulso. Ou seja, haverá um determinado número de pulsos por km rodado.

  12. I’m impressed! You’ve managed the almost impossible.

  13. One thing I would like to say is that before getting more pc memory, look at the machine in which it can be installed. If the machine can be running Windows XP, for instance, the particular memory limit is 3.25GB. Applying in excess of this would just constitute a waste. Make sure that one’s mother board can handle this upgrade volume, as well. Great blog post.

  14. I could read a book about this without finding such real-world apprcaohes!

Trackbacks and Pingbacks

  1. […] de componentes, os quais podem ser utilizados para outras diversas funções, como utilizar um Sensor Hall com Servo Motor ou Medir Temperatura e demonstrá-la em um […]