Etiquetas:

Um interruptor de inclinação é utilizado para detectar a orientação ou inclinação de um sistema. É frequentemente utilizado para indicar se um sistema (tal como um veículo agrícola) está fora do seu alcance de funcionamento, ou para detectar a orientação de um visor e assim alterar a sua disposição. Não dá tanta informação como um acelerómetro mas é mais robusto e não requer um programa especial para processar.

Material

  • Computador
  • Arduino UNO
  • Cabo USB A Masculino
  • Interruptor de Inclinação

Como funciona

O interruptor de inclinação (interruptor de inclinação ou sensor de esfera ou de mercúrio) consiste numa esfera (ou massa de mercúrio) e num contactor. Quando a orientação em relação ao horizonte muda, a bola, sujeita à gravidade, move-se e entra em contacto com dois pólos. Isto provoca um curto-circuito nos pólos e fecha o interruptor.

ball-tilt-switch-overview Usando um Interruptor de Inclinação com Arduino

Esquema

O interruptor de inclinação é ligado, como um botão de pressão, de preferência a um pino digital do microcontrolador porque devolve um estado alto ou baixo, fechado ou aberto.

  • Ligando o solo e um pino digital (aqui o pino 2)
arduino-tilt-switch_bb Usando um Interruptor de Inclinação com Arduino
  • Utilização de uma resistência de tracção externa (se o microcontrolador ou pino utilizado não tiver uma tracção interna)
arduino-tilt-switch-pullup_bb Usando um Interruptor de Inclinação com Arduino

Código

O interruptor de inclinação funciona como um interruptor. O código de funcionamento do sensor assemelhar-se-á, portanto, estreitamente ao de um botão de pressão. É bom notar que, geralmente, uma bola faz o contacto e fecha o interruptor. Acontece que esta bola salta quando o estado muda. Para evitar ter em conta estes ressaltos parasitas, utilizamos uma lógica anti-pulo.

//Parameters
const int tiltPin = 2;

//Variables
bool tiltStatus = false;
bool oldTiltStatus = false;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;

void setup() {
  //Init Serial USB
  Serial.begin(9600);
  Serial.println(F("Initialize System"));
  //Init digital input
  pinMode(tiltPin, INPUT);
}

void loop() {
  debounceTilt();
}

void debounceTilt( ) { /* function debounceTilt */
  ////debounce TiltSwitch
  int reading = digitalRead(tiltPin);
  if (reading != oldTiltStatus) {
    lastDebounceTime = millis();
  }
  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading != tiltStatus) {
      tiltStatus = reading;
      Serial.print(F("Sensor state : ")); Serial.println(tiltStatus);
    }
  }
  oldTiltStatus = reading;
}

Resultados

Ao inclinar o sensor de esfera, deverá ver o seu estado alterado no monitor de série. Ao fazer vários testes, deverá ser capaz de ajustar o parâmetro debounceDelay para assegurar que o estado lido é fiável.

Aplicações

  • Detectar a orientação de um objecto

Fontes