Manual

do

Maker

.

com

Sensor de inclinação com Arduino, Raspberry, Digispark etc.

Sensor de inclinação com Arduino, Raspberry, Digispark etc.

Já coloco logo o nome de todo mundo no título porque esse sensor é fácil demais de codificar em qualquer plataforma. Mas deixe-me citar algo importante; cada sensor tem seu propósito. Por exemplo, você pode detectar uma inclinação usando um giroscópio ou um acelerômetro, mas além do custo ser maior para um propósito simples, a codificação já não é tão rápida e direta quanto esse sensor.

Aplicação

Você pode utilizar esse sensor em máquinas de pinball, alarmes em portas ou alarmes em coisas móveis, para detectar movimento.

Material

Para esse tutorial vou utilizar um Digispark, mas o código é o mesmo para Arduino. Os links são referências para compra:

Bem, o sensor de vibração funciona do mesmo jeito que o sensor de inclinação, mas suas interrupções oscilam bem mais porque internamente ele possui um tipo de "mola flácida", de modo que quando o meio em que está vibra, a mola toca as paredes do sensor gerando a interrupção. Já o sensor de inclinação possui uma esfera metálica em seu interior. Quando essa esfera metálica corre para o lado dos terminais, ele fecha o circuito e gera a interrupção do mesmo modo que um botão, um reed switch ou uma chave. É simples assim. Aliás, é tão simples que utilizaremos o código do Digispark para sensor de nível d'água.

Existe também um modelo (recomendado no link mais abaixo) que utiliza mercúrio invés da esfera metálica. É bacana também, dá pra ver o mercurio dentro da cúpula de vidro e o funcionamento é o mesmo.

Sensor de tilt por inclinação

Repare que o módulo tem um trimpot para ajuste da sensibilidade e já possui alguns resistores e diodos, de modo que você não precisa se preocupar com nada. Você pode entrar com qualquer tensão até 5V, então é transparente utilizá-lo com ESP8266 por exemplo.

Wiring

O sensor possui 3 pinos, sendo VCC (até 5V), GND e DO (Digital Out). Escolha um pino digital e conecte o sensor a ele. VCC e GND dispensam explicação, hum?

Código para o sensor de tilt por inclinação

Do modo que está estamos usando a técnica de polling. Assim, o estado é verificado a cada loop. Já que a MCU está dedicada a essa função, não há problema algum em utilizar essa técnica, mas se sua MCU executa outras tarefas que consumam tempo no loop, a melhor opção é utilizar interrupção. Se não manja de interrupções, dê uma olhada nesses artigos:

O código é basicamente esse:

//exemplo com o Digispark usando o P2 no sensor
int sensor  = 0;
int counter = 0;
int alarm   = 0;

void setup(){
    pinMode(1,OUTPUT); //modelo b
    pinMode(0,OUTPUT); //modelo a
    pinMode(2,INPUT);
}

void loop(){
    sensor += digitalRead(2);
    if (sensor > 2){
      if (counter > 2){
        digitalWrite(1,HIGH);
        digitalWrite(0,HIGH);
        alarm  = 1;
        sensor = 0;
      }
    }
    else{
      alarm = 0;
    }
    if (alarm == 0){ 
        counter = 0;
        sensor  = 0;
        digitalWrite(0,LOW);
        digitalWrite(1,LOW);
    }
    delay(10);
}

Se você leu o artigo sobre o sensor de nível d'água, vai ver que é mais do que familiar; é idêntico! Para utilizar no Arduino o código é o mesmo, apenas troque o P2 pelo D7 do UNO por exemplo.

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.