Un interrupteur tilt permet de détecter l’orientation ou l’inclinaison d’un système. Il est souvent utilisé pour indiquer si un système (comme un véhicule agricole) dépasse sa plage d’inclinaison de fonctionnement ou pour détecter l’orientation d’un écran et, ainsi, modifier sa mise en page. Il ne donne pas autant d’information qu’un accéléromètre mais est plus robuste et ne nécessite pas de programme particulier pour être traité.
Matériel
- Ordinateur
- Arduino UNO
- Câble USB A Mâle/B Mâle
- Tilt Switch
Principe de fonctionnement
L’interrupteur tilt (tilt switch ou ball tilt ou capteur à bille ou encore capteur à mercure) est composé d’une bille (ou d’une masse de mercure) et d’un contacteur. Lorsque l’orientation par rapport à l’horizon change, la bille, soumise à la gravité, bouge et rentre en contact avec deux pôles. Ce qui court-circuite ces derniers et ferme l’interrupteur.
Schéma
L’interrupteur tilt se branche, comme un bouton poussoir, de préférence sur une broche digitale du microcontrôleur car il retourne un état haut ou bas, fermé ou ouvert.
- En reliant la masse et une broche digitale (ici pin 2)
- En utilisant une résistance de pullup externe (si le microcontrôleur ou la broche utilisée n’a pas de pullup interne)
Code
L’interrupteur tilt fonctionne comme un interrupteur. Le code de gestion du capteur va donc fortement ressembler à celui d’un bouton poussoir. Il est bon de noter que , généralement, une bille fait le contact et ferme l’interrupteur. Il arrive que cette bille rebondisse au changement d’état. Pour éviter de prendre en compte ces rebonds parasites, nous utilisons une logique anti-rebond.
//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; }
Résultats
En inclinant le capteur à bille, vous devriez voir son état changé sur le moniteur série. En faisant plusieurs tests, vous devriez pourvoir régler le paramètre debounceDelay afin de garantir que l’état lu est fiable
Applications
- Détecter l’orientation d’un objet