In deze tutorial gaan we een circuit ontwikkelen met behulp van FLEX-sensor, Arduino Uno en een Servomotor. Dit project is een servobesturingssysteem waarbij de positie van de servo-as wordt bepaald door de buiging of kromming of afwijking van de FLEX-sensor.
Laten we eerst even praten over servomotoren. Servomotoren worden gebruikt waar een nauwkeurige asbeweging of -positie nodig is. Deze worden niet voorgesteld voor toepassingen met hoge snelheid. Deze worden voorgesteld voor lage snelheid, gemiddeld koppel en nauwkeurige positietoepassing. Deze motoren worden gebruikt in robotarmmachines, vluchtbesturingen en besturingssystemen. Servomotoren worden gebruikt in embedded systemen zoals automaten etc.
Servomotoren zijn verkrijgbaar in verschillende soorten en maten. Een servomotor heeft voornamelijk draden, een is voor positieve spanning, een andere is voor aarde en de laatste is voor positie-instelling. De RODE draad is verbonden met de voeding, de zwarte draad is verbonden met aarde en de GELE draad is verbonden met het signaal.
Een servomotor is een combinatie van DC-motor, positieregelsysteem, versnellingen. De positie van de as van de DC-motor wordt aangepast door de besturingselektronica in de servo, gebaseerd op de duty-ratio van het PWM-signaal de SIGNAL-pin.
Simpel gezegd, de besturingselektronica past de aspositie aan door de DC-motor te regelen. Deze gegevens met betrekking tot de positie van de as worden via de SIGNAL-pin verzonden. De positiegegevens naar de besturing moeten worden verzonden in de vorm van een PWM-signaal via de signaalpen van de servomotor.
De frequentie van het PWM-signaal (Pulse Width Modulated) kan variëren op basis van het type servomotor. Het belangrijkste hier is de DUTY RATIO van het PWM-signaal. Op basis van deze WERKREGELING past de besturingselektronica de as aan. Om de schacht naar 9 uur te verplaatsen, moet de INSCHAKELING 1 / 18. ie. 1 milli seconde 'AAN tijd' en 17 milli seconde 'UIT tijd' in een 18 ms signaal.
Om de schacht naar 12o-klok te verplaatsen, moet de AAN-tijd van het signaal 1,5 ms zijn en de UIT-tijd 16,5 ms. Deze verhouding wordt gedecodeerd door het besturingssysteem in servo en het past de positie daarop aan.
Deze PWM hier wordt gegenereerd door ARDUINO UNO te gebruiken. Dus voor nu weten we dat we de servomotoras kunnen besturen door de duty-ratio van het PWM-signaal gegenereerd door Arduino Uno te variëren. De UNO heeft een speciale functie waarmee we de positie van SERVO kunnen bepalen zonder het PWM-signaal te storen. Het is echter belangrijk om de relatie tussen PWM-dienstverhouding en servopositie te kennen. We zullen er in de beschrijving meer over praten.
Laten we het nu hebben over FLEX SENSOR. Om een FLEX-sensor te koppelen aan ARDUINO UNO, gaan we de 8-bits ADC-functie (analoog naar digitaal conversie) gebruiken om het werk te doen. Een FLEX-sensor is een transducer die zijn weerstand verandert wanneer zijn vorm verandert. Een FLEX-sensor is 2,2 inch lang of heeft een vingerlengte. Het wordt getoond in figuur.
Flex-sensor is een transducer die zijn weerstand verandert wanneer het lineaire oppervlak wordt gebogen. Vandaar de naam flex sensor. Simpel gezegd, de weerstand van de sensor-aansluiting neemt toe als deze gebogen is. Dit wordt weergegeven in onderstaande afbeelding.
Deze verandering in weerstand kan geen goed doen tenzij we ze kunnen lezen. De controller bij de hand kan alleen de kansen in spanning aflezen en niets minder, hiervoor gaan we een spanningsdelercircuit gebruiken, waarmee we de weerstandsverandering kunnen afleiden als spanningsverandering.
Spanningsdeler is een resistief circuit en wordt weergegeven in de afbeelding. In dit resistieve netwerk hebben we een constante weerstand en een andere variabele weerstand. Zoals weergegeven in de afbeelding, is R1 hier een constante weerstand en is R2 een FLEX-sensor die als weerstand fungeert.
Het middelpunt van de tak wordt gemeten. Met R2-verandering hebben we verandering bij Vout. Hiermee hebben we dus een spanning die verandert met het gewicht.
Het belangrijkste om hier op te merken is dat de input van de controller voor ADC-conversie zo laag is als 50 µAmp. Dit belastingseffect van een op weerstand gebaseerde spanningsdeler is belangrijk omdat de stroom die wordt getrokken uit Vuit van de spanningsdeler het foutpercentage verhoogt, voorlopig hoeven we ons geen zorgen te maken over het laadeffect.
FLEX SENSOR wanneer gebogen, verandert de weerstand. Als deze transducer is aangesloten op een spanningsdelercircuit, hebben we een veranderende spanning met FLEX op de transducer. Deze variabele spanning is FED naar een van de ADC-kanalen, we hebben een digitale waarde met betrekking tot FLEX.
We zullen deze digitale waarde matchen met de servopositie, hiermee hebben we servobesturing door flex.
Componenten
Hardware: Arduino Uno , Voeding (5v), 1000 uF condensator, 100nF condensator (3 stuks), 100KΩ weerstand, SERVO MOTOR (SG 90), 220Ω weerstand, FLEX sensor.
Software: Atmel studio 6.2 of Aurdino nightly.
Schakelschema en uitleg
Het schakelschema voor servomotorbesturing door FLEX-sensor wordt weergegeven in de onderstaande afbeelding.
De spanning over de sensor is niet volledig lineair; het zal luidruchtig zijn. Om de ruis weg te filteren, worden condensatoren over elke weerstand in het delercircuit geplaatst, zoals weergegeven in de afbeelding.
Hier gaan we de spanning nemen die door de verdeler wordt geleverd (spanning die het gewicht lineair vertegenwoordigt) en deze in een van de ADC-kanalen van Arduino UNO voeren. Hiervoor gaan we A0 gebruiken. Na de ADC-initialisatie hebben we een digitale waarde die de gebogen sensor vertegenwoordigt. We nemen deze waarde en matchen deze met de servopositie.
Om dit te laten gebeuren, moeten we enkele instructies in het programma vastleggen en we zullen er hieronder in detail over praten.
ARDUINO heeft zes ADC-kanalen, zoals weergegeven in de afbeelding. Daarin kunnen ze allemaal worden gebruikt als ingangen voor analoge spanning. De UNO ADC heeft een resolutie van 10 bits (dus de gehele waarden van (0- (2 ^ 10) 1023)). Dit betekent dat het ingangsspanningen tussen 0 en 5 volt zal omzetten in gehele waarden tussen 0 en 1023. Dus voor elke (5/1024 = 4,9 mV) per eenheid.
Hier gaan we A0 van UNO gebruiken.
We moeten een paar dingen weten.
|
Allereerst hebben de UNO ADC-kanalen een standaard referentiewaarde van 5V. Dit betekent dat we een maximale ingangsspanning van 5V kunnen geven voor ADC-conversie op elk ingangskanaal. Aangezien sommige sensoren spanningen leveren van 0-2,5V, krijgen we met een 5V-referentie een kleinere nauwkeurigheid, dus we hebben een instructie waarmee we deze referentiewaarde kunnen wijzigen. Dus voor het wijzigen van de referentiewaarde hebben we (“analogReference ();”) Voorlopig laten we het zoals.
Standaard krijgen we de maximale ADC-resolutie van het bord, die 10 bits is, deze resolutie kan worden gewijzigd met behulp van instructies ("analogReadResolution (bits);"). Deze resolutiewijziging kan in sommige gevallen van pas komen. Voor nu laten we het zo.
Als de bovenstaande voorwaarden nu op de standaard zijn ingesteld, kunnen we de waarde van ADC van kanaal '0' lezen door de functie "analogRead (pin);" direct aan te roepen, hier staat "pin" voor pin waar we het analoge signaal hebben aangesloten, in dit geval zou "A0" zijn.
De waarde van ADC kan worden opgevat in een geheel getal als “int SENSORVALUE = analogRead (A0); ”, Door deze instructie wordt de waarde na ADC opgeslagen in het gehele getal“ SENSORVALUE ”.
Laten we het nu hebben over de SERVO, de UNO heeft een functie waarmee we de servopositie kunnen regelen door alleen de graadwaarde te geven. Stel dat als we willen dat de servo op 30 staat, we de waarde direct in het programma kunnen weergeven. Het SERVO-headerbestand zorgt intern voor alle berekeningen van de duty ratio.
# omvatten
Servo servo; servo.attach (3); servo.write (graden); |
De eerste instructie vertegenwoordigt het header-bestand voor het besturen van de SERVO MOTOR.
De tweede verklaring is het benoemen van de servo; we laten het als servo zelf achter.
De derde verklaring geeft aan waar de servosignaalpen is aangesloten; dit moet een PWM-pin zijn. Hier gebruiken we PIN3.
Vierde verklaring geeft opdrachten voor het positioneren van servomotor en is in graden. Als het 30 wordt gegeven, draait de servomotor 30 graden.
Nu de sg90 kan bewegen van 0-180 graden, hebben we ADC-resultaat 0-1024
ADC is dus ongeveer zes keer de SERVO POSITIE. Dus door het ADC-resultaat door 6 te delen, krijgen we de geschatte SERVO-handpositie.
Hiermee wordt de servopositiewaarde naar de servomotor gestuurd, die in verhouding staat tot de buiging of kromming. Wanneer deze flex-sensor op een handschoen is gemonteerd, kunnen we de servopositie regelen door de hand te bewegen.