I denne vejledning udvikler vi et kredsløb ved hjælp af Force sensor, Arduino Uno og en servomotor. Det vil være et servostyringssystem, hvor servoakslens position bestemmes af den vægt, der findes på kraftføleren. Lad os tale om servo og andre komponenter, inden vi går videre.
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 også i nogle af printere og faxmaskiner.
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.
Som vist i nedenstående figur skal TÆND TIL RATION være 1 / 18.ie for at skaftet skal flyttes til 9o ur. 1milli sekund af 'ON-tid' og 17milli sekund af 'OFF-tid' i et 18ms-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 SERVO MOTOR-akslen ved at variere toldforholdet for PWM-signal genereret af UNO.
Lad os nu tale om kraftføler eller vægtføler.
For at interface en FORCE-sensor med ARDUINO UNO skal vi bruge 8 bit ADC (Analog til Digital konvertering) funktion i arduno uno.
En FORCE-sensor er en transducer, der ændrer dens modstand, når der påføres tryk på overfladen. FORCE-sensor fås i forskellige størrelser og former.
Vi skal bruge en af de billigere versioner, fordi vi ikke har brug for meget nøjagtighed her. FSR400 er en af de billigste kraftfølere på markedet. Billedet af FSR400 er vist i nedenstående figur.
Nu er det vigtigt at bemærke, at FSR 400 er følsom langs længden. Kraften eller vægten skal koncentreres på labyrinten midt på sensoren som vist i figuren.
Hvis kraften påføres på forkerte tidspunkter, kan enheden beskadiges permanent.
En anden vigtig ting at vide, at sensoren kan køre strømme med høj rækkevidde. Så husk kørestrømmene under installationen. Sensoren har også en grænse for kraft, der er 10 Newton. Så vi kan kun anvende 1 kg vægt. Hvis der anvendes vægte højere end 1 kg, kan sensoren muligvis vise nogle afvigelser. Hvis det øges mere end 3 kg. sensoren kan beskadiges permanent.
Som tidligere fortalt bruges denne sensor til at registrere ændringer i tryk. Så når vægten påføres oven på FORCE-sensoren, ændres modstanden drastisk. Modstanden af FS400 over vægt er vist i nedenstående graf:
Som vist i ovenstående figur falder modstanden mellem sensorens to kontakter med vægten, eller konduktansen mellem to sensorkontakter øges.
Modstanden fra en ren leder er givet af:
Hvor, p- Ledningsmodstand
l = lederens længde
A = lederområde.
Overvej nu en leder med modstand “R”, hvis der påføres noget tryk oven på lederen, falder arealet på lederen, og lederens længde øges som et resultat af tryk. Så ved formel skal lederens modstand øges, da modstanden R er omvendt proportional med arealet og også direkte proportional med længden l.
Så med dette for en leder under tryk eller vægt øges lederens modstand. Men denne ændring er lille sammenlignet med den samlede modstand. For en betydelig ændring er mange ledere stablet sammen.
Dette er hvad der sker inde i Force Sensors vist i ovenstående figur. Når man ser nøje, kan man se mange linjer inde i sensoren. Hver af disse linjer repræsenterer en leder. Sensorens følsomhed er i ledertal.
Men i dette tilfælde vil modstanden falde med tryk, fordi det anvendte materiale ikke er en ren leder. FSR her er robuste polymer tyk film (PTF) enheder. Så dette er ikke rene ledningsmaterialeindretninger. Disse består af et materiale, der udviser et fald i modstand med øget kraft, der påføres sensorens overflade.
Dette materiale viser karakteristika som vist i grafen for FSR.
Denne ændring i modstand kan ikke gøre noget godt, medmindre vi kan læse dem. Controlleren 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 FORCE-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.
Når kraften påtrykkes nu på FORCE SENSOR, ændrer spændingen ved skilleenden denne pin som tilsluttet til ADC-kanalen i UNO, vi får en anden digital værdi fra ADC for UNO, hver gang kraften på sensoren ændres.
Denne ADC digitale værdi matches med PWM-signalets arbejdsforhold, så vi har SERVO-positionskontrol i forhold til kraft, der påføres på sensoren.
Komponenter
Hardware: UNO, strømforsyning (5v), 1000uF kondensator, 100nF kondensator (3 stykker), 100KΩ modstand, SERVO MOTOR (SG 90), 220Ω modstand, FSR400 kraftføler.
Software: Atmel studio 6.2 eller aurdino om natten.
Kredsløbsdiagram og arbejdsforklaring
Den kredsløbsdiagram for servomotor kontrol kraftsensor 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 der kondensatorer på tværs af hver modstand i delerkredsløbet som vist i figur.
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 i Arduino Uno. Efter konvertering vil vi tage den digitale værdi (repræsenterer vægt) og relatere den til PWM-værdi og give dette PWM-signal til SERVO-motoren.
Så med vægten har vi en PWM-værdi, der ændrer dens toldforhold afhængigt af den digitale værdi. Jo højere den digitale værdi er højere PWM-arbejdsforholdet. Så med PWM-signal med højere belastningsforhold, skal servoakslen nå længst til højre eller længst til venstre ifølge figuren, der er angivet i introduktionen.
Hvis vægten er lavere, har vi et lavere PWM-toldforhold, og som i figuren i introduktionen skal servoen nå helt til højre.
Med dette har vi en SERVO positionskontrol efter VÆGT eller KRAFT.
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 Arduino Uno ADC-kanaler 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 ”.
PWM fra UNO kan opnås ved en hvilken som helst af benene, der er symboliseret som “~” på printkortet. Der er seks PWM-kanaler i UNO. Vi skal bruge PIN3 til vores formål.
analogWrite (3, VALUE); |
Fra ovenstående tilstand kan vi direkte få PWM-signalet ved den tilsvarende pin. Den første parameter i parentes er at vælge pin-nummeret på PWM-signalet. Anden parameter er til at skrive toldforhold.
PWM-værdien på Arduino Uno kan ændres fra 0 til 255. Med "0" som lavest til "255" som højest. Med 255 som toldforhold får vi 5V ved PIN3. Hvis toldforholdet er angivet som 125, får vi 2,5 V ved PIN3.
Lad os nu tale om servomotorstyring, Arduino 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. Du kan lære mere om servomotorstyring med arduino her.
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. Derfor har vi et PWM-signal, hvis arbejdsforhold ændres lineært med VÆGT eller FORCE. Dette gives til servomotor, og vi kan styre servomotoren ved hjælp af tvangssensor.