I denne opplæringen skal vi utvikle en krets med FLEX-sensor, Arduino Uno og en Servomotor. Dette prosjektet er et servostyringssystem hvor servoakselposisjonen bestemmes av bøyningen eller bøyningen eller avviket til FLEX-sensoren.
La oss først snakke litt om servomotorer. Servomotorer brukes der det er behov for nøyaktig akselbevegelse eller posisjon. Disse er ikke foreslått for applikasjoner med høy hastighet. Disse er foreslått for lav hastighet, middels dreiemoment og nøyaktig påføring av posisjon. Disse motorene brukes i robotarmmaskiner, flykontroller og kontrollsystemer. Servomotorer brukes i innebygde systemer som salgsautomater etc.
Servomotorer er tilgjengelige i forskjellige former og størrelser. En servomotor vil hovedsakelig ha ledninger, den ene er for positiv spenning, den andre er for bakken og den siste er for posisjonsinnstilling. Den RØDE ledningen er koblet til strøm, den svarte ledningen er koblet til jord og GUL ledningen er koblet til signalet.
En servomotor er en kombinasjon av DC-motor, posisjonskontrollsystem, gir. Posisjonen til akselen til DC-motoren justeres av kontrollelektronikken i servoen, basert på PWM-signalets signalforhold SIGNAL-pinnen.
Enkelt sagt justerer kontrollelektronikken akselposisjonen ved å kontrollere DC-motoren. Disse dataene angående akselens posisjon sendes gjennom SIGNAL-pinnen. Posisjonsdataene til kontrollen skal sendes i form av PWM-signal gjennom signalpinnen til servomotoren.
Frekvensen av PWM (Pulse Width Modulated) signal kan variere avhengig av type servomotor. Det viktige her er plikten for PWM-signalet. Basert på denne plikten, justerer kontrollelektronikken akselen. For at skaftet skal flyttes til 9o klokke, må TURN ON RATION være 1 / 18.ie. 1 milli sekund av 'PÅ tid' og 17 milli sekund av 'AV tid' i et 18 ms signal.
For at akselen skal flyttes til 12o klokke må ON-tiden for signalet være 1,5ms og OFF-tiden skal være 16,5ms. Dette forholdet dekodes av styresystemet i servo, og det justerer posisjonen basert på det.
Denne PWM her inne er generert ved bruk av ARDUINO UNO. Så for nå vet vi at vi kan kontrollere servomotorakselen ved å variere pliktforholdet til PWM-signal generert av Arduino Uno. UNO har en spesiell funksjon som gjør det mulig for oss å gi posisjonen til SERVO uten å forstyrre PWM-signalet. Det er imidlertid viktig å kjenne til forholdet mellom PWM plikt-rasjon og servostilling. Vi vil snakke mer om det i beskrivelsen.
La oss nå snakke om FLEX SENSOR. For å koble en FLEX-sensor til ARDUINO UNO, skal vi bruke 8-biters ADC (Analog til Digital konvertering) -funksjon for å gjøre jobben. En FLEX-sensor er en svinger som endrer motstand når formen endres. En FLEX-sensor er 2,2 inches lang eller fingerlengde. Det er vist i figur.
Flex-sensor er en svinger som endrer motstanden når den lineære overflaten er bøyd. Derav navnet flex sensor. Enkelt sagt øker sensorterminalmotstanden når den er bøyd. Dette er vist i figuren nedenfor.
Denne endringen i motstand kan ikke gjøre noe bra med mindre vi kan lese dem. Kontrolleren ved hånden kan bare lese sjansene i spenning og ikke noe mindre, for dette skal vi bruke spenningsdelerkrets, med det kan vi utlede motstandsendringen som spenningsendring.
Spenningsdeler er en resistiv krets og er vist i figur. I dette resistive nettverket har vi en konstant motstand og annen variabel motstand. Som vist i figur, er R1 her en konstant motstand og R2 er FLEX-sensor som fungerer som en motstand.
Grensens midtpunkt blir tatt til måling. Med R2-endring har vi endring på Vout. Så med dette har vi en spenning som endres med vekten.
Nå er det viktig å merke seg at inngangen som er tatt av kontrolleren for ADC-konvertering er så lav som 50 µAmp. Denne belastningseffekten av motstandsbasert spenningsdeler er viktig da strømmen hentet fra Vout av spenningsdeleren øker feilprosentandelen, for nå trenger vi ikke bekymre oss for belastningseffekt.
FLEX SENSOR når bøyd motstand endres. Med denne transduseren koblet til en spenningsdelerkrets, vil vi ha en skiftende spenning med FLEX på transduseren. Denne variable spenningen er FED til en av ADC-kanalene, vi vil ha en digital verdi relatert til FLEX.
Vi vil matche denne digitale verdien til servoposisjonen, med denne vil vi ha servokontroll ved fleks.
Komponenter
Maskinvare: Arduino Uno , Strømforsyning (5v), 1000 uF kondensator, 100nF kondensator (3 stk), 100KΩ motstand, SERVO MOTOR (SG 90), 220Ω motstand, FLEX-sensor.
Programvare: Atmel studio 6.2 eller Aurdino nattlig.
Kretsdiagram og forklaring
Det koblingsskjema for servomotorkontroll ved FLEX sensor er vist i figuren nedenfor.
Spenningen over sensoren er ikke helt lineær; det vil være bråkete. For å filtrere ut støyen, plasseres kondensatorer over hver motstand i delerkretsen som vist på figuren.
Her skal vi ta spenningen fra skillelinjen (spenning som representerer vekt lineært) og mate den inn i en av ADC-kanaler fra Arduino UNO. Vi skal bruke A0 til dette. Etter ADC-initialiseringen vil vi ha digital verdi som representerer den bøyde sensoren. Vi vil ta denne verdien og matche den med servoposisjonen.
For at dette skal skje, må vi etablere noen instruksjoner i programmet, og vi vil snakke om dem i detalj nedenfor.
ARDUINO har seks ADC-kanaler, som vist i figuren. I disse kan en eller alle av dem brukes som innganger for analog spenning. UNO ADC har 10-biters oppløsning (så heltallverdiene fra (0- (2 ^ 10) 1023)). Dette betyr at den vil kartlegge inngangsspenninger mellom 0 og 5 volt til heltall mellom 0 og 1023. Så for hver (5/1024 = 4,9 mV) per enhet.
Her skal vi bruke A0 av UNO.
Vi trenger å vite noen få ting.
|
Først og fremst har UNO ADC-kanalene en standard referanseverdi på 5V. Dette betyr at vi kan gi en maksimal inngangsspenning på 5V for ADC-konvertering på hvilken som helst inngangskanal. Siden noen sensorer gir spenninger fra 0-2,5V, med en 5V referanse får vi mindre nøyaktighet, så vi har en instruksjon som gjør det mulig for oss å endre denne referanseverdien. Så for å endre referanseverdien vi har (“analogReference ();”) For nå lar vi det være.
Som standard får vi den maksimale ADC-oppløsningen på kortet som er 10 bit, denne oppløsningen kan endres ved å bruke instruksjoner (“analogReadResolution (bits);”). Denne oppløsningsendringen kan være nyttig i noen tilfeller. For nå lar vi det være.
Nå hvis de ovennevnte forholdene er satt til standard, kan vi lese verdien fra ADC for kanalen '0' ved direkte å kalle funksjonen "analogRead (pin);", her representerer "pin" pin der vi koblet til analogt signal, i dette tilfellet er det ville være “A0”.
Verdien fra ADC kan tas inn i et helt tall som “int SENSORVALUE = analogRead (A0); ”, Ved denne instruksjonen blir verdien etter ADC lagret i heltallet“ SENSORVALUE ”.
La oss nå snakke om SERVO, UNO har en funksjon som gjør det mulig for oss å kontrollere servoposisjonen ved bare å gi gradverdien. Si at hvis vi vil at servoen skal være 30, kan vi direkte representere verdien i programmet. SERVO-headerfilen tar seg av alle beregninger av avgiftsforholdet internt.
#inkludere
Servo servo; servo.attach (3); servo.write (grader); |
Første uttalelse representerer toppfilen for å kontrollere SERVO MOTOR.
Andre uttalelse er å navngi servoen; vi lar det være som servo selv.
Tredje uttalelse sier hvor servosignalpinnen er koblet til; dette må være en PWM-pin. Her bruker vi PIN3.
Fjerde uttalelse gir kommandoer for posisjonering av servomotor og er i grader. Hvis den er gitt 30, roterer servomotoren 30 grader.
Nå kan sg90 bevege seg fra 0-180 grader, vi har ADC-resultat 0-1024
Så ADC er omtrent seks ganger SERVO-POSISJONEN. Så ved å dele ADC-resultatet med 6, får vi den omtrentlige SERVO-håndposisjonen.
Med dette vil vi få servostillingsverdien til servomotoren, som er proporsjonal med bøyning eller bøyning. Når denne flex-sensoren er montert på hansken, kan vi kontrollere servoposisjonen ved å bevege oss i hånden.