Drehzahlmesser mit Reed Kontakt und Multi Function Shield
Das Multi Function Shield, das ich ja bereits vorgestellt habe und das mittlerweile ja auch um einen Drehgeber erweitert wurde, bietet mit der Möglichkeit zur einfachen Anzeige von Daten auf seinem 4-fach-7-Segment-Display und den freien Anschlusspins eine gute Grundlage, Sensoren ausprobieren.Heute geht es um Reed Kontakte / Sensoren. Davon finden sich gleich zwei Bauteile in meiner 37-in-one-Sensoren-Bulk-Sammlung.
Hardware: Reed-Sensoren
Reed Sensoren sind kleine, meist in Glas eingeschmolzene Metallstreifen, die sich verbiegen, wenn ein Magnet in dessen Nähe gebracht wird und so die beiden Anschlussenden kurzschließen.
Die einfachste Bauform ist die rechts auf dem Foto: ein einfacher Reed-Kontakt, den man so für kleines Geld bekommt.
Dann gibt es das KY-021 Mini Magnet Reed Modul (auf dem Foto in der Mitte), welches so ein Reed Kontakt auf einer Platine verlötet hat und die drei Anschlüsse (von oben nach unten, Vorderseite oben, Pins rechts):
- S = Data / Signal
- = +5V
- - = GND
Zu guter Letzt gibt es noch das KY-025 Reed Modul (im Bild links), welches zusätzlich noch einen analogen Ausgang bietet. Der Analog-Ausgang liefert kleine Werte bei Kontakt bis hin zu 0 bei Kurzschluss / Berührung. Mit einem Potentiometer soll die Empfindlichkeit eingestellt werden können, ab welcher der digitale Ausgang geschaltet werden soll. Rechtsherum gedreht, wird die Empfindlichkeit erhöht, links herum verringert. Eine LED zeigt gleichzeitig die Durchschaltung des Digitalausganges an.
Die Anschlussbelegung des KY-025 ist (von oben nach unten, Vorderseite oben, Pins rechts):
- DO = Digital Out
- + = +5V
- G = GND
- DO = Analog Out
Fidget Spinner mit Multimeter
Dieser Versuchsaufbau benötigt keinen Arduino. Es reicht ein Multimeter, dass über eine Durchgangsprüf-Funktion verfügt, also bei Kurzschluss piept; und dies möglichst flink.Der Reed-Kontakt wird einfach an das Multimeter angeschlossen. Immer wenn der Reed durchschaltet - also wenn ein Magnet in die Nähe gebracht wird, wird ein Signalton ertönen.
Ich habe einen Magneten in ein Loch von einem Fidget Spinner gepresst. Jedesmal wenn dieser gedreht wird und der Magnet am Reed Kontakt vorbeigeführt wird, sollte es piepen.
Fidget Spinner mit Arduino
Nun möchte ich den Arduino zum Einsatz bringen und die Zeiten zwischen den Signalen vom Reed-Kontakt messen, um so die Zeit pro voller Umdrehung zu messen und daraus die Umdrehungsgeschwidigkeit in Umdrehungen pro Minute auszurechnen.Der Reed-Kontakt wird über Female-To-Male-Dupnt-Kabel und Krokodilklemmen an die beiden Ende des Reed-Sensors angeschlossen und an GND und Pin 5 des Multi Function Shield.
Mit dem weiter unten beschriebenen Programm komme ich zu folgendem Ergebnis:
Den Fidget Spinner bringen wir auf gut 1100 UPM und da kommt der Reed-Kontakt noch gut mit, kann also die Zustände "Magnet da" und "Magnet weg" auseinanderhalten.
Source-Code
Hier der Source-Code für den Umdrehungsmesser:////////////////////////////////////////////////////////
// (C) 2018 by Oliver Kuhlemann //
// Bei Verwendung freue ich mich über Namensnennung, //
// Quellenangabe und Verlinkung //
// Quelle: http://cool-web.de/arduino/ //
////////////////////////////////////////////////////////
#include <TimerOne.h> // für Timings und Interrupts
#include <MultiFuncShield.h> // API für das Multi Function Shield
#define PinData 5 // wo ist Data angeschlossen?
void setup() {
Timer1.initialize();
MFS.initialize(&Timer1); // initialize multi-function shield library
pinMode (PinData, INPUT_PULLUP);
}
void loop() {
MFS.beep(1, 5, 2); // bereit
long mic=0;
long micBef=micros();
long micDelta=0;
byte stateBef=HIGH;
byte state=HIGH;
float upm=0;
while (1) {
state=digitalRead(PinData);
// Pin 5 == low (Kurschluss) -> piepen, Beeper ist Pin 3
digitalWrite(3, state);
MFS.writeLeds(LED_1, !state);
// wenn Statusänderung
if (state != stateBef) {
// Zählbeginn, wenn Flanke auf LOW (=geschlossen) wechselt
if (state == LOW) {
mic=micros();
micDelta=mic-micBef;
micBef=mic;
upm=1./(micDelta/1000000.)*60.;
MFS.write( (int) upm);
}
}
stateBef=state;
}
}
Um immer verlässliche Werte am Signaleingang zu haben, aktiviere ich den Pullup-Widerstand an Input-Pin 5. Wenn der Reed-Kontakt also schließt, wird der Eingang LOW und ist normalerweise HIGH.Für die Signaltöne ist die MFS-API zu langsam, also schreibe ich direkt auf Pin 3, um Pieptöne auszugeben. Und auch auf einen Delay zwischen den Loop-Durchgängen verzichte ich, um einen möglichst genauen und hohen UPM-Wert möglich zu machen.
Festplatte mit Arduino
Erstaunt, wie flink der Reed-Kontakt doch bisher ist, wo er doch zum Teil aus mechanischen Komponenten besteht, habe ich mich an etwas noch schnelleres gewagt, die Messung der Drehzahl einer Festplatte. Ob er da auch noch mithält?In Wahrheit hat die 2340 (nicht "3240" wie im Video, sorry) aber 3322 UPM laut Datenblatt. Das passt gut zu den von mir gemessenen 3329 UPM, womit auch gleichzeitig bewiesen wäre, dass mein Programm anständig misst.
Hier noch einmal das Datenblatt der angestaubten Festplatte zum Vergleich:
Hard Drive: WESTERN DIGITAL: AC-2340 341MB 3.5"/SL IDE / AT
A C - 2 3 4 0 WESTERN DIGITAL
NO MORE PRODUCED Native| Translation
------+-----+-----+-----
Form 3.5"/SLIMLINE Cylinders 2233| 1010| |
Capacity form/unform 341/ MB Heads 4| 12| |
Seek time / track 13.0/ 4.0 ms Sector/track | 55| |
Controller IDE / AT Precompensation
Cache/Buffer 64 KB Landing Zone
Data transfer rate 1.250 MB/S int Bytes/Sector 512
5.750 MB/S ext
Recording method RLL 1/7 operating | non-operating
-------------+--------------
Supply voltage 5/12 V Temperature *C 5 55 | -40 60
Power: sleep 0.3 W Humidity % 8 80 | 5 95
standby 0.3 W Altitude km -0.305 3.048| -0.305 12.200
idle 1.5 W Shock g 10 | 70
seek W Rotation RPM 3322
read/write 3.0 W Acoustic dBA 36
spin-up 12.0 W ECC Bit REED SOLOMON
MTBF h 250000
Warranty Month 24
Lift/Lock/Park YES Certificates CSA,SDA,FCC,IEC950,TUV,UL1950
Ich bin positiv überrascht, dass der Read Switch auch eine Frequenz von 3300 UPM (55 Hertz) schafft. Ich hatte da bisher immer mehr den Einsatzzweck Fenstersicherung für Alarmanlagen vor Augen, wo es ja nun gar nicht auf Schnelligkeit ankommt, sondern mehr auf das Prinzip "Magnet weg -> Alarm auslösen".
Bisher dachte ich, für schnellere Wechsel / höhere Frequenzen bräuchte ich einen Hall Sensor (wird Thema eines der nächsten Blogs sein) und bin erfreut, für die allermeisten Anwendungen den günstigen Reed-Kontakt nutzen zu können.
Die Schließ- und Öffnungszeiten von einem gewöhnlichen Reedschalter liegen bei je rund 100 Mikrosekunden. Ein kompletter Schaltvorgang dauert also etwa 200 µs, d. h. ein Reed sollte etwa 5000 Schaltvorgänge pro Sekunde verarbeiten können, was einen Drehzahl von 300'000 UPM entspricht. Das sollte für die allermeisten Fälle reichen.