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.
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)
- Utilização de uma resistência de tracção externa (se o microcontrolador ou pino utilizado não tiver uma tracção interna)
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