In diesem Tutorial werden wir eine Schaltung mit FLEX-Sensor, Arduino Uno und einem Servomotor entwickeln. Bei diesem Projekt handelt es sich um ein Servosteuerungssystem, bei dem die Position der Servowelle durch die Biegung oder Biegung oder Abweichung des FLEX-Sensors bestimmt wird.
Lassen Sie uns zunächst ein wenig über Servomotoren sprechen. 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 in eingebetteten Systemen wie Verkaufsautomaten usw. 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. Damit die Welle auf 9 Uhr bewegt werden kann, muss die Einschaltration 1 / 18.ie sein. 1 Millisekunde 'EIN-Zeit' und 17 Millisekunden '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 Servomotorwelle steuern können, indem wir das Tastverhältnis des von Arduino Uno erzeugten PWM-Signals variieren. Die UNO hat eine spezielle Funktion, die es uns ermöglicht, die Position von SERVO bereitzustellen, ohne das PWM-Signal zu stören. Es ist jedoch wichtig, die Beziehung zwischen PWM-Betriebsverhältnis und Servoposition zu kennen. Wir werden in der Beschreibung mehr darüber sprechen.
Lassen Sie uns nun über FLEX SENSOR sprechen. Um einen FLEX-Sensor an ARDUINO UNO anzuschließen, verwenden wir die 8-Bit-ADC-Funktion (Analog to Digital Conversion), um die Aufgabe zu erledigen. Ein FLEX-Sensor ist ein Wandler, der seinen Widerstand ändert, wenn sich seine Form ändert. Ein FLEX-Sensor ist 2,2 Zoll lang oder fingerlang. Es ist in der Abbildung dargestellt.
Der Flex-Sensor ist ein Wandler, der seinen Widerstand ändert, wenn die lineare Oberfläche gebogen wird. Daher der Name Flex Sensor. Einfach ausgedrückt erhöht sich der Widerstand der Sensorklemmen, wenn sie verbogen sind. Dies ist in der folgenden Abbildung dargestellt.
Diese Änderung des Widerstands kann nichts nützen, wenn wir sie nicht lesen können. Der vorliegende Controller kann nur die Spannungschancen ablesen und nicht weniger. Dazu 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 FLEX-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 sich der FLEX-SENSOR verbiegt, ändert sich sein Widerstand. Wenn dieser Wandler an eine Spannungsteilerschaltung angeschlossen ist, wird sich die Spannung mit FLEX am Wandler ändern. Diese variable Spannung wird an einen der ADC-Kanäle weitergeleitet. Wir haben einen digitalen Wert für FLEX.
Wir werden diesen digitalen Wert an die Servoposition anpassen, damit haben wir eine Servosteuerung durch Flex.
Komponenten
Hardware: Arduino Uno , Stromversorgung (5 V), 1000 uF Kondensator, 100 nF Kondensator (3 Stück), 100 kΩ Widerstand, SERVOMOTOR (SG 90), 220 Ω Widerstand, FLEX-Sensor.
Software: Atmel Studio 6.2 oder Aurdino jeden Abend.
Schaltplan und Erklärung
Das Schaltbild für die Servomotorsteuerung durch den FLEX-Sensor 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 jedem Widerstand in der Teilerschaltung angeordnet, 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. Wir werden dafür A0 verwenden. Nach der ADC-Initialisierung haben wir einen digitalen Wert, der den verbogenen Sensor darstellt. Wir werden diesen Wert nehmen und ihn mit der Servoposition abgleichen.
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.
|
Zunächst haben die 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.
Lassen Sie uns nun über das SERVO sprechen. Das 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.
#einschließen
Servo Servo; servo.attach (3); servo.write (Grad); |
Die erste Anweisung repräsentiert die Header-Datei zur Steuerung des SERVO-MOTORS.
Die zweite Anweisung nennt das Servo; wir lassen es als Servo selbst.
Die dritte Anweisung gibt an, wo der Servosignalstift angeschlossen ist. Dies muss ein PWM-Pin sein. Hier verwenden wir PIN3.
Die vierte Anweisung enthält Befehle zum Positionieren des Servomotors und ist in Grad angegeben. Wenn 30 angegeben ist, dreht sich der Servomotor um 30 Grad.
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.
Damit wird dem Servomotor ein Servopositionswert zugeführt, der proportional zum Biegen oder Biegen ist. Wenn dieser Flex-Sensor am Handschuh montiert ist, können wir die Servoposition durch Handbewegung steuern.