I denne vejledning skal vi udvikle et kredsløb ved hjælp af FLEX-sensor, Arduino Uno og en servomotor. Dette projekt er et servostyringssystem, hvor servoakslens position bestemmes af FLEX-sensorens bøjning eller bøjning.
Lad os først tale lidt om servomotorer. Servomotorer bruges, hvor der er behov for nøjagtig akselbevægelse eller position. Disse foreslås ikke til applikationer med høj hastighed. Disse foreslås til lav hastighed, medium drejningsmoment og nøjagtig placeringsanvendelse. Disse motorer bruges i maskiner med robotarm, flyvekontrol og kontrolsystemer. Servomotorer bruges i indlejrede systemer som automater osv.
Servomotorer fås i forskellige former og størrelser. En servomotor vil hovedsagelig have ledninger, den ene er for positiv spænding, den anden er for jord, og den sidste er for positionsindstilling. Den RØDE ledning er tilsluttet strøm, den sorte ledning er forbundet til jord og GUL ledning er forbundet til signalet.
En servomotor er en kombination af jævnstrømsmotor, positionskontrolsystem, gear. Jævnstrømsmotorens aksel justeres af styreelektronikken i servoen, baseret på PWM-signalets driftsforhold SIGNAL-stiften.
Simpelthen justerer styreelektronikken akselpositionen ved at styre jævnstrømsmotoren. Disse data vedrørende skaftets position sendes gennem SIGNAL-stiften. Positionsdataene til styringen skal sendes i form af PWM-signal gennem servomotorens signalstift.
Frekvensen af PWM-signal (Pulse Width Modulated) kan variere afhængigt af servomotorens type. Den vigtige ting her er Pligt-signalets Pligtforhold. Baseret på denne DUTY RATION justerer styreelektronikken akslen. For at skaftet skal flyttes til 9o uret, skal TÆND TIL RATION være 1 / 18.ie. 1 milli sekund af 'ON-tid' og 17 milli sekund af 'OFF-tid' i et 18 ms-signal.
For at skaftet skal flyttes til 12o uret, skal signalets ON-tid være 1,5ms og OFF-tiden skal være 16,5ms. Dette forhold afkodes af styresystemet i servo, og det justerer positionen ud fra det.
Denne PWM herinde genereres ved hjælp af ARDUINO UNO. Så for nu ved vi det, at vi kan styre servomotorakslen ved at variere arbejdsforholdet mellem PWM-signal genereret af Arduino Uno. UNO har en særlig funktion, der gør det muligt for os at give SERVO position uden at forstyrre PWM-signalet. Det er dog vigtigt at kende forholdet mellem PWM-toldration og servostilling. Vi vil tale mere om det i beskrivelsen.
Lad os nu tale om FLEX SENSOR. For at interface en FLEX-sensor til ARDUINO UNO skal vi bruge 8 bit ADC (Analog til Digital konvertering) til at udføre jobbet. En FLEX-sensor er en transducer, der ændrer dens modstand, når dens form ændres. En FLEX-sensor er 2,2 inches lang eller fingerlængde. Det er vist i figur.
Flex-sensor er en transducer, der ændrer modstand, når den lineære overflade er bøjet. Deraf navnet flex-sensor. Simpelthen øges sensorens terminalmodstand, når den er bøjet. Dette er vist i nedenstående figur.
Denne ændring i modstand kan ikke gøre noget godt, medmindre vi kan læse dem. Styringen ved hånden kan kun læse chancerne i spænding og intet mindre, for dette skal vi bruge spændingsdelerkredsløb, med det kan vi udlede modstandsændringen som spændingsændring.
Spændingsdeler er et resistivt kredsløb og er vist i figur. I dette resistive netværk har vi en konstant modstand og anden variabel modstand. Som vist i figur er R1 her en konstant modstand, og R2 er FLEX-sensor, der fungerer som en modstand.
Grænsens midtpunkt føres til måling. Med R2-ændring har vi ændring hos Vout. Så med dette har vi en spænding, der ændres med vægten.
Nu er det vigtigt at bemærke her, at inputet fra controlleren til ADC-konvertering er så lavt som 50 µAmp. Denne belastningseffekt af modstandsbaseret spændingsdeler er vigtig, da strømmen trukket fra Vout af spændingsdeler øger fejlprocenten, for nu behøver vi ikke bekymre os om belastningseffekt.
FLEX SENSOR, når dens bøjning ændrer sig. Med denne transducer tilsluttet et spændingsdelerkredsløb har vi en skiftende spænding med FLEX på transduceren. Denne variable spænding er FED til en af ADC-kanaler, vi har en digital værdi relateret til FLEX.
Vi matcher denne digitale værdi til servoposition, med denne vil vi have servokontrol ved flex.
Komponenter
Hardware: Arduino Uno , Strømforsyning (5v), 1000 uF kondensator, 100nF kondensator (3 stykker), 100KΩ modstand, SERVO MOTOR (SG 90), 220Ω modstand, FLEX-sensor.
Software: Atmel studio 6.2 eller Aurdino om natten.
Kredsløbsdiagram og forklaring
Den kredsløbsdiagram for servomotor kontrol FLEX sensor er vist i figuren nedenfor.
Spændingen på tværs af sensoren er ikke helt lineær; det vil være støjende. For at filtrere støjen placeres kondensatorer på tværs af hver modstand i delerkredsløbet som vist i figuren.
Her skal vi tage spændingen fra skillelinjen (spænding, der repræsenterer vægten lineært) og føre den ind i en af ADC-kanaler fra Arduino UNO. Vi skal bruge A0 til dette. Efter ADC-initialiseringen har vi digital værdi, der repræsenterer den bøjede sensor. Vi tager denne værdi og matcher den med servoposition.
For at dette skal ske, er vi nødt til at oprette få instruktioner i programmet, og vi vil tale om dem i detaljer nedenfor.
ARDUINO har seks ADC-kanaler, som vist i figuren. I dem kan en eller alle af dem bruges som indgange til analog spænding. UNO ADC har en 10 bit opløsning (så heltalets værdier fra (0- (2 ^ 10) 1023)). Dette betyder, at det vil kortlægge indgangsspændinger mellem 0 og 5 volt i heltalsværdier mellem 0 og 1023. Så for hver (5/1024 = 4,9 mV) pr. Enhed.
Her skal vi bruge A0 fra UNO.
Vi har brug for at vide et par ting.
|
Først og fremmest har UNO ADC-kanalerne en standardreferenceværdi på 5V. Dette betyder, at vi kan give en maksimal indgangsspænding på 5V til ADC-konvertering på enhver indgangskanal. Da nogle sensorer leverer spændinger fra 0-2,5V, med en 5V-reference får vi mindre nøjagtighed, så vi har en instruktion, der gør det muligt for os at ændre denne referenceværdi. Så for at ændre den referenceværdi, vi har ("analogReference ();") For nu lader vi det være.
Som standard får vi den maksimale ADC-opløsning på kortet, der er 10 bit, denne opløsning kan ændres ved hjælp af instruktion (“analogReadResolution (bits);”). Denne opløsningsændring kan komme til nytte i nogle tilfælde. For nu lader vi det være.
Hvis ovenstående betingelser nu er indstillet til standard, kan vi læse værdien fra ADC af kanal '0' ved direkte at kalde funktionen "analogRead (pin);", her "pin" repræsenterer pin, hvor vi forbinder analogt signal, i dette tilfælde er det ville være “A0”.
Værdien fra ADC kan tages i et heltal som “int SENSORVALUE = analogRead (A0); ”, Ved denne instruktion lagres værdien efter ADC i heltalet“ SENSORVALUE ”.
Lad os nu tale om SERVO, UNO har en funktion, der gør det muligt for os at kontrollere servopositionen ved blot at give gradværdien. Sig, hvis vi vil have servoen til 30, kan vi direkte repræsentere værdien i programmet. SERVO-headerfilen tager sig af alle beregninger af toldforholdet internt.
#omfatte
Servo servo; servo. vedhæft (3); servo.write (grader); |
Første sætning repræsenterer headerfilen til styring af SERVO MOTOR.
Anden erklæring er navngivning af servoen; vi efterlader det som servo selv.
Tredje erklæring angiver, hvor servosignalstiften er forbundet; dette skal være en PWM-pin. Her bruger vi PIN3.
Fjerde udsagn giver kommandoer til positionering af servomotor og er i grader. Hvis den gives 30, roterer servomotoren 30 grader.
Nu kan sg90 bevæge sig fra 0-180 grader, vi har ADC-resultat 0-1024
Så ADC er cirka seks gange SERVO-POSITIONEN. Så ved at dividere ADC-resultatet med 6 får vi den omtrentlige SERVO-håndposition.
Med dette får vi servopositionsværdien til servomotoren, som er i forhold til bøjning eller bøjning. Når denne flex-sensor er monteret på handsken, kan vi styre servoposition ved håndbevægelse.