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

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

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 hall 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 : FILIPEFLOP

#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? Conte-nos sua experiência com este post e visite nossa loja FILIPEFLOP!

5
Sensor Hall KY-003 com Servo Tower Pro SG-5010
12 votos, 4.08 classificação média (81% pontuação)

Formado em Ciência da Computação pela Universidade de Mogi das Cruzes, atualmente responsável pelo departamento técnico da FILIPEFLOP.

Compartilhe este Post

11 Comentários

  1. Bruno - 10 de abril de 2017

    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

    • Bruno - 6 de junho de 2017

      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;

      }

  2. Evandro - 20 de julho de 2016

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

  3. Arthur - 17 de maio de 2016

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

  4. Gabriel - 4 de setembro de 2015

    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.

  5. wilson domingos machado - 25 de agosto de 2015

    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.

  6. leonardo - 30 de junho de 2015

    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????

    • Claudio - 24 de agosto de 2015

      É 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.

  7. order zovirax - 29 de abril de 2015

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

  8. life insurance policies - 14 de abril de 2015

    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.

  9. Lorin - 25 de março de 2015

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

Deixe uma resposta