Letztes Jahr habe ich zu dem Sensor BMA020 bereits ein Code Beispiel für den Arduino gepostet. Nun dachte ich, da der so rum liegt, kann man den vielleicht auch mal für etwas verwenden. Also kam mir die Idee eine Lampe einzuschalten, in dem man gegen sie tippt oder leicht schlägt.
Zunächst skizzierte ich mir meine Schaltung und berechnete anhand des Schaltbildes die Widerstände. Dann sammelte ich meine benötigten Komponenten zusammen und steckte sie auf meinem Breadboard, um zu sehen ob meine Überlegung richtig ist.
| Versuchsaufbau der Schaltung |
Natürlich funktioniert die Schaltung nicht ohne einen Programmcode und daher musste ich mir zunächst etwas überlegen. Zum Beispiel wie ich aus den drei Achsen einen Wert berechne und wie hoch die Abweichung sein muss, um eine Bewegung als Tippen wahrzunehmen. Die Formel für den Gravitationsvektor half nicht sonderlich weiter. Am Ende kam ich auf ein simples Zusammenrechnen, wie es im Programmcode zu sehen ist.
| gravitySum = axisX / 3 + axisY / 3 + axisZ / 3; |
Dies habe ich mir auf den Serial Monitor ausgeben lassen und tippte solange gegen meinen Arduino mit dem Sensor, bis ich einen passenden Wert ermittelt hatte.
| Nach dem gegentippen bekam ich einen Wert von mehr als 9000 (echt |
Dann übernahm ich den Wert in die Bedingung für das Einschalten oder Ausschalten. Nun musste das Ganze noch auf eine Platine gelötet werden und das möglichst im kleinsten Raum und mit den LEDs, die ich dafür verwenden möchte. Als Hülle habe ich einen Teil von einer Plastikflasche verwendet.
Am Ende noch den fertigen Programmcode auf den ATMega326 bringen.
| #include <Wire.h> // I²C Adresse vom Beschleunigungssensor // Byte Array in dem die Ergebnisse gespeichert werden // Beim Einschalten muss der Sensor Kalibriert werden. // Wird nach dem Kalibrieren auf False gesetzt. // Die Beschleunigung wird zusammengerechnet, // Zeigt den maximalen berechneten Wert aus 'gravitySum' // Ruft ab, ob die Lampen eingeschaltet // An welchem Pin soll die LED void setup() void loop() // Liest den Beschleunigungssensor ein und schreibt das Ergebnis in ein Byte Array. for(int i = 0; i < 6; i++) |
Mit einem 9V Block Akku lässt sich dies leider nicht lange betreiben, da die LEDs zusammen 1W Leistung verbrauchen. Ein 9V Block ist spätestens nach einer halben Stunde leer. Besser eignet sich hier ein Netzteil (oder eine Batterie mit mehr Kapazität). Hier noch ein kurzer Zusammenschnitt als Video.
| |
Was vielleicht von Interesse sein könnte, sind die verwendeten Bauteile. Alternativ kann nach Bedarf das Aussehen bestimmt werden.
Materialliste:
- 1 x Arduino Duemilanove (Geht auch mit anderen)
- 1 x Beschleunigungssensor BMA020
- 1 x Spannungsregler LM317
- 1 x Quarz 16Mhz
- Widerstände: 1 x 47 Ohm, 1 x 4,7kOhm, 1 x 10Ohm, 2 x 2,2kOhm
- Transistoren: 1 x BC177A (PNP), 3 x BC547B (NPN)
- 1x Potentiometer 500Ohm
- 1x Streifenplatine
- 1 x DIODER (Name des IKEA Produktes mit den LED Flächen)
- 1 x Breadboard
- 1 x Platine
- 1 x 9V Block
- eine Menge Kabel
- 1 x Kunststoff Flasche