In diesem Tutorial werden wir eine Schaltung mit Kraftsensor, Arduino Uno und einem Servomotor entwickeln. Es wird ein Servosteuerungssystem sein, bei dem die Position der Servowelle durch das auf dem Kraftsensor vorhandene Gewicht bestimmt wird. Bevor wir fortfahren, sprechen wir über das Servo und andere Komponenten.
Servomotoren werden dort eingesetzt, wo eine genaue Bewegung oder Position der Welle erforderlich ist. Diese werden für Hochgeschwindigkeitsanwendungen nicht vorgeschlagen. Diese werden für niedrige Drehzahlen, mittleres Drehmoment und genaue Positionsanwendung vorgeschlagen. Diese Motoren werden in Roboterarmmaschinen, Flugsteuerungen und Steuerungssystemen eingesetzt. Servomotoren werden auch in einigen Druckern und Faxgeräten verwendet.
Servomotoren sind in verschiedenen Formen und Größen erhältlich. Ein Servomotor hat hauptsächlich dort Drähte, einer für positive Spannung, ein anderer für Masse und der letzte für die Positionseinstellung. Das ROTE Kabel ist an die Stromversorgung angeschlossen, das schwarze Kabel ist an Masse angeschlossen und das GELBE Kabel ist an das Signal angeschlossen.
Ein Servomotor ist eine Kombination aus Gleichstrommotor, Lageregelungssystem und Zahnrädern. Die Position der Welle des Gleichstrommotors wird von der Steuerelektronik im Servo basierend auf dem Tastverhältnis des PWM-Signals des SIGNAL-Pins eingestellt. Einfach gesagt, die Steuerelektronik passt die Wellenposition durch Steuern des Gleichstrommotors an. Diese Daten bezüglich der Position der Welle werden über den SIGNAL-Stift gesendet. Die Positionsdaten an die Steuerung sollten in Form eines PWM-Signals über den Signalstift des Servomotors gesendet werden.
Die Frequenz des PWM-Signals (Pulse Width Modulated) kann je nach Typ des Servomotors variieren. Wichtig hierbei ist das PFLICHTVERHÄLTNIS des PWM-Signals. Basierend auf dieser PFLICHTRATION stellt die Steuerelektronik die Welle ein.
Wie in der folgenden Abbildung gezeigt, muss die Einschaltration 1 / 18.ie betragen, damit die Welle auf 9 Uhr bewegt werden kann. 1 Millisekunde 'EIN-Zeit' und 17 Millisekunde 'AUS-Zeit' in einem 18-ms-Signal.
Damit die Welle auf 12 Uhr gestellt werden kann, muss die EIN-Zeit des Signals 1,5 ms und die AUS-Zeit 16,5 ms betragen.
Dieses Verhältnis wird von der Steuerung im Servo dekodiert und passt die Position basierend darauf an.
Diese PWM hier wird mit ARDUINO UNO generiert.
Im Moment wissen wir also, dass wir die SERVO MOTOR-Welle steuern können, indem wir das Tastverhältnis des von UNO erzeugten PWM-Signals variieren.
Lassen Sie uns nun über Kraftsensor oder Gewichtssensor sprechen.
Um einen FORCE-Sensor mit ARDUINO UNO zu verbinden, verwenden wir in arduno uno die 8-Bit-ADC-Funktion (Analog to Digital Conversion).
Ein FORCE-Sensor ist ein Wandler, der seinen Widerstand ändert, wenn Druck auf die Oberfläche ausgeübt wird. Der FORCE-Sensor ist in verschiedenen Größen und Formen erhältlich.
Wir werden eine der billigeren Versionen verwenden, da wir hier nicht viel Genauigkeit benötigen. FSR400 ist einer der billigsten Kraftsensoren auf dem Markt. Das Bild des FSR400 ist in der folgenden Abbildung dargestellt.
Nun ist es wichtig zu beachten, dass der FSR 400 entlang der Länge empfindlich ist. Die Kraft oder das Gewicht sollte auf das Labyrinth in der Mitte des Auges des Sensors konzentriert sein, wie in der Abbildung gezeigt.
Wenn die Kraft zu falschen Zeiten angewendet wird, kann das Gerät dauerhaft beschädigt werden.
Ein weiterer wichtiger Punkt ist, dass der Sensor Ströme mit hoher Reichweite ansteuern kann. Beachten Sie daher bei der Installation die Antriebsströme. Außerdem hat der Sensor eine Kraftgrenze von 10 Newton. Wir können also nur 1 kg Gewicht auftragen. Bei Gewichten von mehr als 1 kg kann der Sensor Abweichungen aufweisen. Wenn es mehr als 3 kg erhöht ist. Der Sensor kann dauerhaft beschädigt werden.
Wie bereits erwähnt, wird dieser Sensor verwendet, um Druckänderungen zu erfassen. Wenn also das Gewicht auf den FORCE-Sensor aufgebracht wird, ändert sich der Widerstand drastisch. Der Widerstand des FS400 gegenüber dem Gewicht ist in der folgenden Grafik dargestellt:
Wie in der obigen Abbildung gezeigt, nimmt der Widerstand zwischen den beiden Kontakten des Sensors mit dem Gewicht ab oder die Leitfähigkeit zwischen zwei Kontakten des Sensors nimmt zu.
Der Widerstand eines reinen Leiters ist gegeben durch:
Wo, p- Widerstand des Leiters
l = Länge des Leiters
A = Leiterfläche.
Stellen Sie sich nun einen Leiter mit dem Widerstand „R“ vor. Wenn auf den Leiter etwas Druck ausgeübt wird, nimmt die Fläche des Leiters ab und die Länge des Leiters nimmt aufgrund des Drucks zu. Nach der Formel sollte sich der Widerstand des Leiters erhöhen, da der Widerstand R umgekehrt proportional zur Fläche und auch direkt proportional zur Länge l ist.
Damit erhöht sich für einen Leiter unter Druck oder Gewicht der Widerstand des Leiters. Diese Änderung ist jedoch im Vergleich zum Gesamtwiderstand gering. Für eine beträchtliche Änderung werden viele Leiter zusammengestapelt.
Dies geschieht innerhalb der in der obigen Abbildung gezeigten Kraftsensoren. Bei genauem Hinsehen sieht man viele Linien im Sensor. Jede dieser Linien repräsentiert einen Leiter. Die Empfindlichkeit des Sensors wird in Leiternummern angegeben.
In diesem Fall nimmt der Widerstand jedoch mit dem Druck ab, da das hier verwendete Material kein reiner Leiter ist. Die FSR sind hier robuste Polymer-Dickschichtvorrichtungen (PTF). Das sind also keine reinen Leitermaterialvorrichtungen. Diese bestehen aus einem Material, das mit zunehmender Kraft, die auf die Oberfläche des Sensors ausgeübt wird, eine Abnahme des Widerstands aufweist.
Dieses Material zeigt Eigenschaften wie in der Grafik des FSR gezeigt.
Diese Änderung des Widerstands kann nichts nützen, wenn wir sie nicht lesen können. Der vorliegende Regler kann nur die Spannungschancen ablesen und nicht weniger, dafür verwenden wir eine Spannungsteilerschaltung, mit der wir die Widerstandsänderung als Spannungsänderung ableiten können.
Der Spannungsteiler ist eine Widerstandsschaltung und ist in der Abbildung dargestellt. In diesem Widerstandsnetzwerk haben wir einen konstanten Widerstand und einen anderen variablen Widerstand. Wie in der Abbildung gezeigt, ist R1 hier ein konstanter Widerstand und R2 ist ein FORCE-Sensor, der als Widerstand wirkt.
Der Mittelpunkt der Verzweigung wird zur Messung gebracht. Mit R2-Änderung haben wir Änderung bei Vout. Damit haben wir eine Spannung, die sich mit dem Gewicht ändert.
Hierbei ist zu beachten, dass der vom Controller für die ADC-Konvertierung verwendete Eingang nur 50 µAmp beträgt. Dieser Belastungseffekt des auf Widerstand basierenden Spannungsteilers ist wichtig, da der aus Vout des Spannungsteilers entnommene Strom den Fehlerprozentsatz erhöht, da wir uns jetzt nicht um den Belastungseffekt kümmern müssen.
Wenn nun die Kraft auf den FORCE SENSOR ausgeübt wird, ändert die Spannung am Teilerende diesen Pin, wenn er mit dem ADC-Kanal von UNO verbunden ist. Wir erhalten einen anderen digitalen Wert als ADC von UNO, wenn sich die Kraft auf den Sensor ändert.
Dieser ADC-Digitalwert ist an das Tastverhältnis des PWM-Signals angepasst, sodass wir die SERVO-Positionssteuerung in Bezug auf die auf den Sensor ausgeübte Kraft haben.
Komponenten
Hardware: UNO, Stromversorgung (5 V), 1000 uF Kondensator, 100 nF Kondensator (3 Stück), 100 kΩ Widerstand, SERVOMOTOR (SG 90), 220 Ω Widerstand, FSR400 Kraftsensor.
Software: Atmel Studio 6.2 oder Aurdino pro Nacht.
Schaltplan und Arbeitserklärung
Das Schaltbild für die Servomotorsteuerung durch einen Kraftsensor ist in der folgenden Abbildung dargestellt.
Die Spannung am Sensor ist nicht vollständig linear. es wird laut sein. Um das Rauschen herauszufiltern, werden Kondensatoren über jeden Widerstand in der Teilerschaltung gelegt, wie in der Abbildung gezeigt.
Hier nehmen wir die vom Teiler bereitgestellte Spannung (Spannung, die das Gewicht linear darstellt) und speisen sie in einen der ADC-Kanäle von Arduino Uno ein. Nach der Konvertierung nehmen wir diesen digitalen Wert (der das Gewicht darstellt) und beziehen ihn auf den PWM-Wert und liefern dieses PWM-Signal an den SERVO-Motor.
Mit dem Gewicht haben wir also einen PWM-Wert, der sein Tastverhältnis abhängig vom digitalen Wert ändert. Je höher der digitale Wert, desto höher das Tastverhältnis von PWM. Bei einem PWM-Signal mit höherem Tastverhältnis sollte die Servowelle gemäß der in der Einleitung angegebenen Abbildung ganz rechts oder ganz links liegen.
Wenn das Gewicht niedriger ist, haben wir ein niedrigeres PWM-Tastverhältnis und gemäß der Abbildung in der Einleitung sollte das Servo ganz rechts reichen.
Damit haben wir eine SERVO-Positionskontrolle durch GEWICHT oder KRAFT.
Dazu müssen wir einige Anweisungen im Programm festlegen und werden im Folgenden ausführlich darauf eingehen.
ARDUINO verfügt über sechs ADC-Kanäle (siehe Abbildung). In diesen kann einer oder alle von ihnen als Eingänge für die analoge Spannung verwendet werden. Der UNO-ADC hat eine Auflösung von 10 Bit (also die ganzzahligen Werte von (0- (2 ^ 10) 1023)). Dies bedeutet, dass Eingangsspannungen zwischen 0 und 5 Volt auf ganzzahlige Werte zwischen 0 und 1023 abgebildet werden (5/1024 = 4,9 mV) pro Einheit.
Hier verwenden wir A0 von UNO. Wir müssen ein paar Dinge wissen.
|
Erstens haben die Arduino Uno ADC-Kanäle einen Standardreferenzwert von 5V. Dies bedeutet, dass wir für die ADC-Wandlung an jedem Eingangskanal eine maximale Eingangsspannung von 5 V angeben können. Da einige Sensoren Spannungen von 0 bis 2,5 V liefern, erhalten wir bei einer 5-V-Referenz eine geringere Genauigkeit, sodass wir eine Anweisung haben, mit der wir diesen Referenzwert ändern können. Um den Referenzwert zu ändern, haben wir ("analogReference ();"). Im Moment belassen wir ihn als.
Standardmäßig erhalten wir die maximale ADC-Auflösung der Karte von 10 Bit. Diese Auflösung kann mithilfe des Befehls ("analogReadResolution (bits);") geändert werden. Diese Auflösungsänderung kann in einigen Fällen nützlich sein. Im Moment belassen wir es als.
Wenn nun die obigen Bedingungen auf Standard gesetzt sind, können wir den Wert vom ADC des Kanals '0' lesen, indem wir direkt die Funktion "analogRead (pin);" aufrufen. Hier steht "pin" für den Pin, an den wir das analoge Signal angeschlossen haben, in diesem Fall für den wäre "A0". Der Wert von ADC kann als „int SENSORVALUE = analogRead (A0)“ in eine Ganzzahl übernommen werden. ”, Durch diesen Befehl wird der Wert nach ADC in der Ganzzahl“ SENSORVALUE ”gespeichert.
Die PWM von UNO kann an jedem der Pins erreicht werden, die auf der Leiterplatte als „~“ symbolisiert sind. Es gibt sechs PWM-Kanäle in UNO. Wir werden PIN3 für unseren Zweck verwenden.
analogWrite (3, VALUE); |
Aus dem obigen Zustand können wir das PWM-Signal direkt am entsprechenden Pin erhalten. Der erste Parameter in Klammern dient zur Auswahl der Pin-Nummer des PWM-Signals. Der zweite Parameter dient zum Schreiben des Tastverhältnisses.
Der PWM-Wert von Arduino Uno kann von 0 auf 255 geändert werden. Mit "0" als niedrigster Wert auf "255" als höchster Wert. Mit 255 als Tastverhältnis erhalten wir 5 V an PIN3. Wenn das Tastverhältnis mit 125 angegeben wird, erhalten wir 2,5 V an PIN3.
Lassen Sie uns nun über die Servomotorsteuerung sprechen. Der Arduino Uno verfügt über eine Funktion, mit der wir die Servoposition steuern können, indem wir nur den Gradwert angeben. Angenommen, das Servo soll 30 sein, wir können den Wert direkt im Programm darstellen. Die SERVO-Header-Datei übernimmt intern alle Berechnungen des Tastverhältnisses. Weitere Informationen zur Servomotorsteuerung mit Arduino finden Sie hier.
Jetzt kann sich der sg90 von 0-180 Grad bewegen, wir haben das ADC-Ergebnis 0-1024.
Der ADC ist also ungefähr sechsmal so hoch wie die SERVO-POSITION. Wenn Sie also das ADC-Ergebnis durch 6 teilen, erhalten Sie die ungefähre SERVO-Handposition. Daher haben wir ein PWM-Signal, dessen Tastverhältnis sich linear mit WEIGHT oder FORCE ändert. Da dies dem Servomotor gegeben ist, können wir den Servomotor durch einen Kraftsensor steuern.