Inhaltsverzeichnis:
Video: Funktionierender RC-Auto-Tachometer - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:19
Dies ist ein kurzes Projekt, das ich als Teil eines größeren RC-Builds eines Lightweight Land Rover erstellt habe. Ich entschied, dass ich mir einen funktionierenden Tachometer im Armaturenbrett vorstellte, aber ich wusste, dass ein Servo es nicht schneiden würde. Es gab nur eine vernünftige Option: das Arduino einsetzen!
Ein bisschen Hintergrundwissen zu Beginn… Ich bin kein Programmierer oder Elektroniker. Ich denke immer noch an Strom in Bezug auf Wasserfluss und bin von Widerständen etwas verwirrt. Das heißt, wenn sogar ich in der Lage war, das zum Laufen zu bringen, dann sollten Sie es auch können!
LISTE DER EINZELTEILE:
Mikrocontroller: Ich habe einen ATTiny85-Chip verwendet, der jeweils etwa 1 Pfund kostet.
Mikrocontroller-Programmierer: Um den Code auf den Chip zu bekommen, müssen Sie ihn programmieren. Bei normalem Arduino ist dies nur ein USB-Kabel, aber für den ATTiny-Chip benötigen Sie etwas zusätzliches. Sie können dafür ein anderes Arduino verwenden oder, wie ich, einen Tiny AVR-Programmierer von Sparkfun verwenden.
learn.sparkfun.com/tutorials/tiny-avr-prog…
Ich würde dies empfehlen, da ich versucht habe, sie mit verschiedenen Methoden zu programmieren, und diese ist die einfachste. Das Board ist etwas teuer, aber eine gute Investition, wenn Sie viele ATTiny-Projekte durchführen.
8 Pin Chipsockel: Wer den Chip in einen Sockel steckt, anstatt ihn direkt zu verlöten, kann sich einige Fehler bei der Montage leisten. Aus Erfahrung gesprochen - niemand will Chips entlöten, um sie neu zu programmieren.
Kondensator: Es wird ein Entkopplungskondensator von 100nF (Code 104) verwendet. Ich verstehe nicht ganz warum, aber ich habe im Internet gelesen, dass Entkopplungskondensatoren wichtig sind, also muss es stimmen…
Widerstand: Ein 10kΩ Widerstand wird verwendet, um die Leitung in das Arduino zu ziehen. Wieder ein weiteres Rätsel der Elektronik.
Perfboard/Stripboard: Eine Grundplatte, auf der Sie Ihre Schaltung montieren können.
Wicklungsdraht: Normaler ummantelter Draht ist zu dick zum Anlöten an den Motor. Die Verwendung von feinem Lackdraht reduziert die Belastung der Motorklemmen und erleichtert Ihnen das Leben.
Servokabel: Ein dreiadriges Band, das in eine 3-polige JR-Buchse mündet. Ich habe meine von einem ausgebrannten Servo bekommen, das ich "modifiziert" habe.
Schrittmotor: Ich habe einen 6mm bipolaren Nidec-Schrittmotor verwendet. Jeder kleine Stepper sollte funktionieren, obwohl er klein gehalten wird, da der Stepper direkt vom Arduino angetrieben wird.
Header-Pins: Nicht unbedingt erforderlich, aber wenn Sie Ihren Stepper mit 4 Header-Pins verdrahten und eine Buchse an Ihrem Stromkreis anbringen, können Sie Ihr Armaturenbrett für eine einfache Installation einfach trennen.
Computer: Um Ihr Board zu programmieren, benötigen Sie einen Computer. Möglicherweise mit der Arduino-IDE. Und vielleicht ein USB-Kabel. Wenn es auch ein Stromkabel hat, dann noch besser.
Schritt 1: Das System
Der grundlegende Entwurf des von mir erstellten Systems war eine Methode, bei der das vom RC-Empfänger kommende Pulsweitenmodulationssignal (PWM) über einen ATTiny 85-Mikrocontroller (uC) in einen Schrittmotor-Sweep umgewandelt wird.
Hier ist eine Ressource zu PWM-Signalen und RC, aber um dies zu replizieren, müssen Sie es nicht unbedingt verstehen.
en.wikipedia.org/wiki/Servo_control
Der ATTiny ist meine Lieblingsvariante von Arduino, weil er klein ist und immer noch genug I / O-Pins hat, um grundlegende Dinge zu tun, und passt daher perfekt in kleine Modelle und RC-Projekte. Der Hauptnachteil des ATTiny ist, dass es etwas mehr Setup erfordert, um einen zu programmieren, aber wenn Sie ihn einmal eingerichtet haben, sind sie so billig, dass Sie Stapel davon für alle möglichen Projekte kaufen können.
Die Größe der Tachoscheibe ist zu klein für einen Getriebemotor mit Feedback, so dass für ein proportionales Ansprechverhalten ein Schrittmotor verwendet werden musste. Ein Schrittmotor ist ein Motor, der in diskreten Schritten (oder Schritten…!) bewegt wird, was ihn ideal für ein solches System ohne Rückkopplung macht. Die einzige Einschränkung besteht darin, dass die "Schritte" dazu führen, dass die resultierende Bewegung ruckartig und nicht glatt ist. Wenn Sie einen Stepper mit genügend Schritten pro Umdrehung erhalten, fällt das nicht auf, aber mit dem Stepper, den ich in diesem Projekt verwendet habe, der nur 20 Schritte in einer vollen Umdrehung hat, ist der Winkelsprung ziemlich schlecht.
Das System lässt beim Einschalten den Stepper zwei Umdrehungen rückwärts laufen, um die Nadel auf Null zu stellen. Der Tacho braucht einen Raststift, wo die Nullmarke sein soll, sonst dreht er sich einfach ewig. Dann bildet es die Vorwärts- und Rückwärts-PWM-Signale auf eine festgelegte Anzahl von Schritten des Motors ab. Einfach richtig…?
Schritt 2: Die Software
Haftungsausschluss: Ich bin kein Programmierer. Für dieses Projekt bin ich das digitale Äquivalent von Dr. Frankenstein und stelle etwas zusammen, das aus verschiedenen gefundenen Codestücken funktioniert.
Mein herzlichster Dank geht also an Duane B, der den Code für die Interpretation von RC-Signalen erstellt hat:
rcarduino.blogspot.com/
Und an Ardunaut, der den Code für den Betrieb eines Steppers als analoges Messgerät erstellt hat:
arduining.com/2012/04/22/arduino-driving-a…
Und bei beiden entschuldige ich mich aufrichtig für das, was ich mit Ihrem Code gemacht habe.
Nun, das ist aus dem Weg, hier ist, was Sie auf den ATTiny hochladen können:
#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = DIGITAL PIN 2 - verwende die Interrupt-Nummer in attachInterrupt#define THROTTLE_SIGNAL_IN_PIN 2 // INTERRUPT 0 = DIGITAL PIN 2 - verwende die PIN-Nummer in digitalRead #define NEUTRAL_THROTTLE 1500 // dies ist die Dauer in Mikrosekunden Neutralgas bei einem elektrischen RC-Car #define UPPER_THROTTLE 2000 // Dies ist die Dauer in Mikrosekunden der maximalen Drosselung bei einem elektrischen RC-Car #define LOWER_THROTTLE 1000 // Dies ist die Dauer in Mikrosekunden für die minimale Drosselung bei einem elektrischen RC-Car #define DEADZONE 50 // Dies ist die Drossel-Totzone. Die Gesamttotzone ist doppelt so groß. #include #define STEPS 21 // Schritte pro Umdrehung (begrenzt auf 315°) Ändern Sie dies, um den maximalen Weg des Tachos einzustellen. #define COIL1 3 // Spulenstifte. Der ATTiny verwendet die Pins 0, 1, 3, 4 für den Stepper. Pin 2 ist der einzige Pin, der Interrupts verarbeiten kann, also muss es der Eingang sein. #define COIL2 4 // Versuchen Sie, diese zu ändern, wenn der Schrittmotor nicht richtig läuft. #define COIL3 0 #define COIL4 1 // eine Instanz der Stepper-Klasse erstellen: Stepper stepper(STEPS, COIL1, COIL2, COIL3, COIL4); intpos = 0; // Position in Schritten (0-630) = (0°-315°) int SPEED = 0; float ThrottleInAvg = 0; int MeasurementsToAverage = 60; float Resetzähler = 10; // Zeit zum Zurücksetzen im Leerlauf Int Resetval = 0; volatile int ThrottleIn = LOWER_THROTTLE; volatile unsigned long StartPeriod = 0; // im Interrupt setzen // wir könnten nThrottleIn = 0 in der Schleife anstelle einer separaten Variablen verwenden, aber mit bNewThrottleSignal angeben, dass wir ein neues Signal haben // ist für dieses erste Beispiel klarer void setup () { // dem Arduino sagen wir möchten, dass die Funktion calcInput aufgerufen wird, wenn INT0 (digitaler Pin 2) von HIGH zu LOW oder von LOW zu HIGH wechselt // Wenn wir diese Änderungen abfangen, können wir berechnen, wie lange der Eingangsimpuls ist attachInterrupt (THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed(50); // Stellen Sie die Motordrehzahl auf 30 U / min (ca. 360 PPS) ein. stepper.step (SCHRITTE * 2); // Position zurücksetzen (X Schritte gegen den Uhrzeigersinn). aufrechtzuerhalten. Void Schleife () { Resetval = Millis; for (int i = 0; i (NEUTRAL_THROTTLE + DEADZONE) && ThrottleInAvg < UPPER_THROTTLE) { SPEED = map(ThrottleInAvg, (NEUTRAL_THROTTLE + DEADZONE), UPPER_THROTTLE, 0, 255); Rücksetzwert = 0; } // Umgekehrtes Mapping else if (ThrottleInAvg LOWER_THROTTLE) { SPEED = map(ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Rücksetzwert = 0; } // Außerhalb des oberen Bereichs sonst if (ThrottleInAvg > UPPER_THROTTLE) { SPEED = 255; Rücksetzwert = 0; } // Außerhalb des unteren Bereichs sonst if (ThrottleInAvg Resetcounter) { stepper.step (4); // Ich versuche, dem Stepper mitzuteilen, dass er sich selbst zurücksetzen soll, wenn sich das RC-Signal für längere Zeit in der Totzone befindet. Ich bin mir nicht sicher, ob dieser Teil des Codes tatsächlich funktioniert. } } int val = GESCHWINDIGKEIT; // den Potentiometerwert abrufen (Bereich 0-1023) val = map (val, 0, 255, 0, STEPS * 0,75); // Pot-Bereich im Stepper-Bereich abbilden. if (abs(val - pos) > 2) {//wenn die Differenz größer als 2 Schritte ist. if ((val - pos) > 0) { stepper.step (-1); // gehe einen Schritt nach links. pos++; } if ((val - pos) < 0) { stepper.step (1); // gehe einen Schritt nach rechts. pos--; } } // Verzögerung (10); aufrechtzuerhalten. Void calcInput () {// wenn der Pin hoch ist, ist es der Beginn eines Interrupts if (digitalRead(THROTTLE_SIGNAL_IN_PIN) == HIGH) {// die Zeit mit Mikros abrufen - wenn unser Code wirklich beschäftigt wird, wird dies ungenau, aber für die aktuelle Anwendung ist es // leicht zu verstehen und funktioniert sehr gut StartPeriod = micros(); } else { // Wenn der Pin niedrig ist, ist dies die fallende Flanke des Impulses. Jetzt können wir die Impulsdauer berechnen, indem wir die // Startzeit ulStartPeriod von der aktuellen Zeit subtrahieren, die von micros () zurückgegeben wird if (StartPeriod) { ThrottleIn = (int)(micros() - StartPeriod); StartPeriode = 0; } } }
Weitere Informationen zum Programmieren eines ATTiny85 finden Sie hier:
learn.sparkfun.com/tutorials/tiny-avr-prog…
Schritt 3: Die Hardware
Beziehen Sie sich auf den Schaltplan für den Aufbau der Schaltung. Wie Sie es zusammenbauen, liegt bei Ihnen, aber ich würde vorschlagen, ein bisschen Stripboard / Perfboard zu verwenden, das für das Prototyping von Leiterplatten verwendet wird, und den Chip in einem Sockel zu montieren.
C1 = 100nF
R1 = 10kΩ
Der Kondensator sollte so nah wie möglich am Chip montiert werden, um am effektivsten zu sein.
Beim Anlöten der Lackdrähte an den Motor ist äußerste Vorsicht geboten, da die Klemmen an den Motoren gerne abbrechen und den Spulendraht zum Motor durchtrennen. Um dies zu beheben, besteht eine gute Lösung darin, die Drähte anzulöten und dann einen großen Klecks 2-Komponenten-Epoxid über die Verbindung zu legen, aushärten zu lassen und dann die Drähte zusammenzudrehen. Dies reduziert die Belastung der einzelnen Endverbindungen und sollte ein Abreißen verhindern. Wenn Sie dies nicht tun, werden sie garantiert zum ungünstigsten Zeitpunkt abgebrochen.
Wenn Sie den Header-Pin-Anschluss herstellen und die Pins so einrichten: [Ca1, Cb1, Ca2, Cb2] wobei Ca1 für Spule A, Draht 1 usw. steht. Dies ermöglicht Ihnen, die Drehrichtung des Messgeräts durch Vertauschen des Steckers zu ändern um herum.
Das Messgerät benötigt einen Endanschlag, um die Nullposition zu kalibrieren. Ich würde empfehlen, die Nadel nach Möglichkeit aus Metall zu machen. Dadurch wird verhindert, dass es sich biegt, wenn es auf den Endanschlag trifft. Eine Möglichkeit, die Nadel in eine gute Position zu bringen, besteht darin, die Nadel vorübergehend auf die Achse zu kleben, das Modul hochzufahren, es zur Ruhe kommen zu lassen und dann die Nadel zu entfernen und wieder auf die Achse zu kleben, wobei die Nadel gegen die Endstation. Dadurch wird die Nadel mit dem magnetischen Rasten des Motors ausgerichtet und gewährleistet, dass Ihre Nadel immer am Anschlag zur Anlage kommt.
Schritt 4: Epilog
Hoffentlich haben Sie dieses kurze instructable genossen und fanden es nützlich. Wenn Sie eines davon bauen, lassen Sie es mich wissen!
Viel Glück!