In deze tutorial zullen we een circuit ontwikkelen met behulp van Force sensor, Arduino Uno en een servomotor. Het wordt een servobesturingssysteem waarbij de positie van de servo-as wordt bepaald door het gewicht dat aanwezig is op de krachtsensor. Voordat we verder gaan, laten we het hebben over de servo en andere componenten.
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 ook gebruikt in sommige printers en faxmachines.
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.
Zoals weergegeven in de onderstaande afbeelding, moet de INSCHAKELRATIO 1/18 zijn om de as naar 9 uur te verplaatsen. 1 milli seconde 'AAN-tijd' en 17 milli seconde 'UIT-tijd' in een signaal van 18 ms.
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 SERVO MOTOR-as kunnen besturen door de duty-ratio van het PWM-signaal gegenereerd door UNO te variëren.
Laten we het nu hebben over krachtsensor of gewichtssensor.
Om een FORCE-sensor te koppelen aan ARDUINO UNO, gaan we de 8 bit ADC-functie (analoog naar digitaal conversie) gebruiken in arduno uno.
Een FORCE-sensor is een transducer die zijn weerstand verandert wanneer er druk op het oppervlak wordt uitgeoefend. FORCE-sensor is verkrijgbaar in verschillende maten en vormen.
We gaan een van de goedkopere versies gebruiken omdat we hier niet veel nauwkeurigheid nodig hebben. FSR400 is een van de goedkoopste krachtsensoren op de markt. De afbeelding van FSR400 wordt getoond in onderstaande afbeelding.
Nu is het belangrijk op te merken dat de FSR 400 over de lengte gevoelig is, de kracht of het gewicht moet worden geconcentreerd op het doolhof in het midden van het oog van de sensor, zoals weergegeven in de afbeelding.
Als de kracht op verkeerde momenten wordt uitgeoefend, kan het apparaat permanent worden beschadigd.
Een ander belangrijk ding om te weten is dat de sensor stromen met een hoog bereik kan aansturen. Houd dus bij het installeren rekening met de aandrijfstromen. Ook heeft de sensor een krachtlimiet die 10 Newton is. We kunnen dus slechts 1 kg gewicht toepassen. Als er gewichten hoger dan 1 kg worden toegepast, kan de sensor enkele afwijkingen vertonen. Als het meer dan 3 kg is toegenomen. de sensor kan permanent worden beschadigd.
Zoals eerder verteld wordt deze sensor gebruikt om de drukveranderingen waar te nemen. Dus wanneer het gewicht bovenop de FORCE-sensor wordt aangebracht, verandert de weerstand drastisch. De weerstand van FS400 over gewicht wordt weergegeven in onderstaande grafiek:
Zoals getoond in bovenstaande afbeelding, neemt de weerstand tussen de twee contacten van de sensor af met het gewicht of neemt de geleiding tussen twee contacten van de sensor toe.
De weerstand van een zuivere geleider wordt gegeven door:
Waar, p- Weerstandsvermogen van geleider
l = lengte van geleider
A = Gebied van geleider.
Beschouw nu een geleider met weerstand "R", als er wat druk wordt uitgeoefend op de geleider, neemt het oppervlak op de geleider af en neemt de lengte van de geleider toe als gevolg van druk. Dus volgens formule zou de weerstand van de geleider moeten toenemen, omdat de weerstand R omgekeerd evenredig is met het oppervlak en ook recht evenredig met lengte l.
Dus hiermee neemt voor een geleider onder druk of gewicht de weerstand van de geleider toe. Maar deze verandering is klein in vergelijking met de algehele weerstand. Voor een aanzienlijke verandering worden veel geleiders op elkaar gestapeld.
Dit is wat er gebeurt in de krachtsensoren die in de bovenstaande afbeelding worden getoond. Als je goed kijkt, zie je veel lijnen in de sensor. Elk van deze lijnen vertegenwoordigt een geleider. Gevoeligheid van de sensor is in geleidernummers.
Maar in dit geval neemt de weerstand af met de druk omdat het materiaal dat hier wordt gebruikt geen zuivere geleider is. De FSR zijn hier robuuste polymere dikke film (PTF) -apparaten. Dit zijn dus geen pure apparaten van geleidermateriaal. Deze zijn gemaakt van een materiaal dat een afname van de weerstand vertoont met toenemende kracht die op het oppervlak van de sensor wordt uitgeoefend.
Dit materiaal vertoont kenmerken zoals weergegeven in de grafiek van FSR.
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 FORCE-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.
Wanneer nu de kracht wordt uitgeoefend op de KRACHTSENSOR, verandert de spanning aan het uiteinde van de verdeler deze pin zoals verbonden met het ADC-kanaal van UNO, we krijgen een andere digitale waarde dan ADC van UNO, telkens wanneer de kracht op de sensor verandert.
Deze digitale ADC-waarde is afgestemd op de duty-ratio van het PWM-signaal, dus we hebben de SERVO-positieregeling in relatie tot de kracht die op de sensor wordt uitgeoefend.
Componenten
Hardware: UNO, voeding (5v), 1000uF condensator, 100nF condensator (3 stuks), 100KΩ weerstand, SERVO MOTOR (SG 90), 220Ω weerstand, FSR400 krachtsensor.
Software: Atmel studio 6.2 of aurdino nightly.
Schakelschema en werkuitleg
Het schakelschema voor servomotorbesturing door krachtsensor wordt getoond in onderstaande afbeelding.
De spanning over de sensor is niet volledig lineair; het zal luidruchtig zijn. Om de ruis eruit 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. Na de conversie gaan we die digitale waarde (die het gewicht vertegenwoordigt) nemen en deze relateren aan de PWM-waarde en dit PWM-signaal leveren aan de SERVO-motor.
Dus met het gewicht hebben we een PWM-waarde die de duty-ratio verandert afhankelijk van de digitale waarde. Hoe hoger de digitale waarde, hoe hoger de duty-ratio van PWM. Dus met een PWM-signaal met een hogere duty-ratio, moet de servo-as uiterst rechts of uiterst links reiken volgens de afbeelding in de inleiding.
Als het gewicht lager is, hebben we een lagere PWM-duty-ratio en volgens de figuur in de inleiding zou de servo uiterst rechts moeten bereiken.
Hiermee hebben we een SERVO positieregeling op GEWICHT of KRACHT.
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 Arduino 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 ”.
De PWM van UNO kan worden bereikt op elk van de pinnen die op de printplaat worden gesymboliseerd als "~". Er zijn zes PWM-kanalen in UNO. We gaan PIN3 gebruiken voor ons doel.
analogWrite (3, VALUE); |
Van bovenaf kunnen we het PWM-signaal direct op de bijbehorende pin krijgen. De eerste parameter tussen haakjes is voor het kiezen van het pinnummer van het PWM-signaal. De tweede parameter is voor de schrijfverhoudingen.
De PWM-waarde van Arduino Uno kan worden gewijzigd van 0 tot 255. Met "0" als laagste en "255" als hoogste. Met 255 als duty-ratio krijgen we 5V bij PIN3. Als de duty-ratio wordt gegeven als 125, krijgen we 2,5 V bij PIN3.
Laten we het nu hebben over de servomotorbesturing, de Arduino Uno heeft een functie waarmee we de servopositie kunnen regelen door alleen de graadwaarde op 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. U kunt hier meer leren over servomotorbesturing met arduino.
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. Daarom hebben we een PWM-signaal waarvan de duty-ratio lineair verandert met GEWICHT of KRACHT. Omdat dit aan de servomotor wordt gegeven, kunnen we de servomotor met een krachtsensor besturen.