In dem Versuch wird die Drehzahl eines Motors gemessen. Die Messung und notwendige Berechnungen übernimmt
Arduino Nano. Eine entsprechende Schaltung kann mit wenigen Komponenten schnell zusammengestellt werden. An die Ausgänge
des Arduino D10 und D11 wird eine aus vier Digits bestehende 7-Segmentanzeige angeschlossen. Bei der hier eingesetzten
Anzeige handelt es sich um ein fertiges Modul, das neben den Anzeige-Elementen auch einen passenden Treiber enthält.
Es ist der Anzeigetreiber TM1637. Die Kommunikation zwischen dem Arduino und dem Treiber wird mithilfe der zwei Leitungen
(Arduino Anschlüsse D10 und D11) erfolgen. Die Ansteuerung der einzelnen Segmente der Anzeige wird von dem Treiber komplett
übernommen. Das Modul enthält auch die notwendigen Vorwiderstände für die Anzeigeelemente. Einbau von zusätzlichen externen
Widerständen ist nicht notwendig.
Das Prinzip der Messung ist ganz einfach. An der Motorachse wird ein Gegenstand, der nach jeder einzelnen
360°-Drehung ein Signal generiert, angebracht. In unserem
Fall übernimmt die Aufgabe eine einfache Schraube, die nach jeder Drehung einen Näherungsschalter betätigt. Bei dem
Näherungsschalter handelt e sich um einen induktiven Näherungssensor von Turck mit der Bezeichnung 4602033. Hier könnte
man z.B. auch eine Lichtschranke oder einen Laser einsetzen. Ein mechanischer Endschalter würde dagegen wegen Prellung
keine akzeptable Alternative darstellen. Das Arduino-Programm arbeitet in dem Fall mit einem Interrupt. Jede Betätigung
eines prellenden Schalters würde zu mehreren Signalen und damit folglich zu falschen Ergebnissen führen. Die
Signalleitung wird an Pin D2 des Arduino angeschlossen.
Die Schraube, die eine volle Umdrehung markiert, wird von einem 12 VDC – Motor bewegt. Der Motor JGB37 (Getriebemotor)
soll bei 12 V eine Drehzahl von 200 U/Min erreichen. Diese Angabe werden wir im Test überprüfen.
Die Testschaltung wird mit einem festen 12V-Netzteil mit Spannung versorgt. Die unterschiedlichen Motordrehzahlen
werden mithilfe eines verstellbaren Netzteils im Bereich von 0 bis 12V eingestellt.
// ***********************************************************************
// Drehzahlmessung mit Arduino
// 7-Segmentanzeige mit TM1637
// Arduino Nano IDE 1.8.13
// ***********************************************************************
#include<TM1637Display.h> // Display Bibliothek
#define CLK 10 // Anzeige CLK
#define DIO 11 // Anzeige DIO
TM1637Display display(CLK, DIO);
int PinA = 2; // Signal vom Sensor
String Ausgabe;
unsigned long Zeit_Gemessen; // Zeit seit letzter Messung
unsigned long Letzte_Messung; // Letzte Zeitmessung
unsigned long Drehzahl; // Aktuelle Drehzahl
void setup() {
display.setBrightness(10);
display.clear();
pinMode(PinA, INPUT);
attachInterrupt(digitalPinToInterrupt(PinA), Berechnung, RISING);
}
void Berechnung () {
Zeit_Gemessen = millis() - Letzte_Messung; // Zeit in ms
Letzte_Messung = millis();
Drehzahl = 60000 / Zeit_Gemessen; // Aktuelle Drehzahl
}
void loop() {
Ausgabe = String(Drehzahl);
display.showNumberDecEx(Ausgabe.toInt(), 0b00000000, false, 4, 4);
}
// ***********************************************************************
Für die Aufgabe wird nur ein kleines Programm benötigt. Das Hauptprogramm „loop()“ beschäftigt sich lediglich
mit der Ausgabe der errechneten Drehzahl auf der 7-Segmentanzeige.
Die eigentliche Berechnung der Drehzahl erfolgt in dem Unterprogramm „Berechnung ()“. Das Programm wird einmal pro
eine volle Umdrehung der Achse aufgerufen. Für den Aufruf sorgt ein Interrupt, das in „setup()“ aktiviert wurde. Der Aufruf
erfolgt jeweils bei steigender Flanke des Signals, das am Eingang D2 überwacht wird. Sobald die steigende Flanke erkannt
wird, wird das Unterprogramm „Berechnung()“ aufgerufen und auf der Basis der Zeit, die seit der letzten Flanke verstrichen
ist, die Drehzahl errechnet. Die Zeit wird in Millisekunden erfasst.
Auf der Basis der Messdaten kann man die Abhängigkeit der Drehzahl von Spannung grafisch darstellen: