Um interruptor de inclinação é utilizado para detectar a orientação ou inclinação de um sistema. É frequentemente utilizado para indicar se um sistema (como um veículo agrícola) está para além da sua gama de inclinação operacional, ou para detectar a orientação de um ecrã e assim alterar a sua disposição. Não fornece tanta informação como um acelerómetro, mas é mais robusto e não requer qualquer programa especial para ser processado.
Hardware
- Computador
- Arduino UNO
- Cabo USB A macho
- Interruptor de inclinação
Princípio de funcionamento
O interruptor de inclinação é constituído por uma esfera (ou uma massa de mercúrio) e um contactor. Quando a sua orientação em relação ao horizonte muda, a bola, sujeita à gravidade, desloca-se e entra em contacto com dois pólos. Isto provoca um curto-circuito nos pólos e fecha o interruptor.

Diagrama
O interruptor de inclinação é ligado, como um botão de pressão, de preferência a um pino digital no microcontrolador, porque devolve um estado alto ou baixo, fechado ou aberto.
- Ligando a terra e um pino digital (neste caso, o pino 2)

- Utilizando uma resistência pull-up externa (se o microcontrolador ou o pino utilizado não tiver um pull-up interno)

Código
O interruptor de inclinação funciona como um interruptor. Por conseguinte, o código de gestão do sensor assemelha-se muito ao de um botão de pressão. Vale a pena notar que, geralmente, uma bola faz contacto e fecha o interruptor. Por vezes, esta bola salta quando o estado muda. Para evitar ter em conta estes saltos parasitas, utilizamos uma lógica anti-salto.
//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 esferas, deverá ver a alteração do seu estado no monitor de série. Ao efectuar vários testes, deverá ser possível ajustar o parâmetro debounceDelay para garantir que a leitura do estado é fiável.
Aplicações
- Detectar a orientação de um objecto