I den här handledningen ska vi utveckla en krets med FLEX-sensor, Arduino Uno och en Servomotor. Detta projekt är ett servostyrningssystem där servoaxelläget bestäms av flex eller böjning eller avvikelse från FLEX-sensorn.
Låt oss först prata lite om servomotorer. Servomotorer används där det finns behov av exakt axelrörelse eller position. Dessa föreslås inte för höghastighetsapplikationer. Dessa föreslås för låg hastighet, medelvridande vridmoment och korrekt positionstillämpning. Dessa motorer används i robotarmsmaskiner, flygkontroller och styrsystem. Servomotorer används i inbyggda system som varuautomater etc.
Servomotorer finns i olika former och storlekar. En servomotor kommer huvudsakligen att ha ledningar, en är för positiv spänning en annan är för mark och den sista är för lägesinställning. Den RÖDA ledningen är ansluten till ström, den svarta ledningen är ansluten till jord och den Gula ledningen är ansluten till signalen.
En servomotor är en kombination av likströmsmotor, lägesstyrsystem, växlar. Positionen på DC-motorns axel justeras av styrelektroniken i servon, baserat på PWM-signalens arbetsförhållande SIGNAL-stiftet.
Enkelt sagt justerar styrelektroniken axelns position genom att styra likströmsmotorn. Dessa data angående axelns position skickas genom SIGNAL-stiftet. Positionsdata till kontrollen ska skickas i form av PWM-signal via servomotorns signalstift.
Frekvensen för PWM-signalen (Pulse Width Modulated) kan variera beroende på typ av servomotor. Det viktiga här är PUTM-signalen. Baserat på denna DUTY RATION justerar styrelektroniken axeln. För att axeln ska flyttas till 9o klockan måste TURN ON RATION vara 1 / 18.ie. 1 milli sekund av 'PÅ-tid' och 17 milli sekund av 'AV-tid' i en 18 ms-signal.
För att axeln ska flyttas till 12o-klockan måste signalens PÅ-tid vara 1,5ms och OFF-tiden ska vara 16,5ms. Detta förhållande avkodas av styrsystemet i servo och det justerar positionen baserat på det.
Denna PWM här skapas med ARDUINO UNO. Så nu vet vi att vi kan styra servomotoraxeln genom att variera arbetsförhållandet för PWM-signal genererad av Arduino Uno. UNO har en speciell funktion som gör det möjligt för oss att tillhandahålla positionen för SERVO utan att störa PWM-signalen. Det är dock viktigt att känna till förhållandet mellan PWM och ration - servoposition. Vi kommer att prata mer om det i beskrivningen.
Låt oss nu prata om FLEX SENSOR. För att ansluta en FLEX-sensor till ARDUINO UNO ska vi använda 8-bitars ADC (Analog till Digital omvandling) -funktion för att göra jobbet. En FLEX-sensor är en givare som ändrar dess motstånd när dess form ändras. En FLEX-sensor är 2,2 tum lång eller fingerlängd. Det visas i figur.
Flex-sensor är en givare som ändrar dess motstånd när den linjära ytan är böjd. Därav namnet flex sensor. Enkelt sagt ökar sensorns terminalmotstånd när den är böjd. Detta visas i bilden nedan.
Denna förändring i motstånd kan inte nytta om vi inte kan läsa dem. Styrenheten till hands kan bara läsa chanserna i spänning och inget mindre, för detta kommer vi att använda spänningsdelarkrets, med det kan vi härleda motståndsförändringen som spänningsförändring.
Spänningsdelaren är en resistiv krets och visas i figuren. I detta resistiva nätverk har vi ett konstant motstånd och ett annat variabelt motstånd. Som visas i figuren är R1 här ett konstant motstånd och R2 är FLEX-sensor som fungerar som ett motstånd.
Grenens mittpunkt tas till mätning. Med R2-förändring har vi förändring på Vout. Så med detta har vi en spänning som ändras med vikten.
Nu är det viktigt att notera att ingången från styrenheten för ADC-konvertering är så låg som 50 µAmp. Denna belastningseffekt av motståndsbaserad spänningsdelare är viktig eftersom strömmen från Vout av spänningsdelaren ökar felprocentandelen, för nu behöver vi inte oroa oss för belastningseffekten.
FLEX SENSOR när böjt ändras. Med denna givare ansluten till en spänningsdelarkrets kommer vi att ha en växlande spänning med FLEX på givaren. Denna variabla spänning är FED till en av ADC-kanalerna, vi kommer att ha ett digitalt värde relaterat till FLEX.
Vi kommer att matcha detta digitala värde till servoposition, med detta kommer vi att ha servokontroll genom flex.
Komponenter
Hårdvara: Arduino Uno , strömförsörjning (5v), 1000 uF kondensator, 100nF kondensator (3 delar), 100KΩ motstånd, SERVO MOTOR (SG 90), 220Ω motstånd, FLEX-sensor.
Programvara: Atmel studio 6.2 eller Aurdino varje natt.
Kretsschema och förklaring
Den kretsschema för servomotorkontroll genom FLEX sensorn visas i figuren nedan.
Spänningen över sensorn är inte helt linjär; det blir en högljudd. För att filtrera bort bruset placeras kondensatorer över varje motstånd i delarkretsen som visas i figuren.
Här ska vi ta spänningen från delaren (spänning som representerar vikten linjärt) och mata den in i en av ADC-kanalerna i Arduino UNO. Vi ska använda A0 för detta. Efter ADC-initialiseringen kommer vi att ha ett digitalt värde som representerar den böjda sensorn. Vi tar detta värde och matchar det med servoposition.
För att detta ska hända måste vi skapa några instruktioner i programmet och vi kommer att prata om dem i detalj nedan.
ARDUINO har sex ADC-kanaler, som visas i figuren. I dessa kan någon eller alla användas som ingångar för analog spänning. UNO ADC har 10 bitars upplösning (så heltalets värden från (0- (2 ^ 10) 1023)). Detta innebär att den kommer att mappa ingångsspänningar mellan 0 och 5 volt i helvärden mellan 0 och 1023. Så för varje (5/1024 = 4,9 mV) per enhet.
Här ska vi använda A0 för UNO.
Vi behöver veta några saker.
|
Först och främst har UNO ADC-kanalerna ett standardreferensvärde på 5V. Det betyder att vi kan ge en maximal ingångsspänning på 5V för ADC-omvandling vid vilken ingångskanal som helst. Eftersom vissa sensorer ger spänningar från 0-2,5V, med en 5V-referens får vi mindre noggrannhet, så vi har en instruktion som gör att vi kan ändra detta referensvärde. Så för att ändra referensvärdet vi har (“analogReference ();”) För nu lämnar vi det som.
Som standard får vi den maximala ADC-upplösningen som är 10 bitar, denna upplösning kan ändras med instruktioner (“analogReadResolution (bits);”). Denna upplösningsändring kan komma till nytta i vissa fall. För nu lämnar vi det som.
Nu om ovanstående villkor är inställda som standard kan vi läsa värdet från ADC för kanal '0' genom att direkt kalla funktionen "analogRead (pin);", här "pin" representerar stift där vi kopplade analog signal, i det här fallet är det skulle vara “A0”.
Värdet från ADC kan tas in i ett heltal som “int SENSORVALUE = analogRead (A0); ”, Genom denna instruktion värdet efter ADC lagras i heltalet“ SENSORVALUE ”.
Låt oss nu prata om SERVO, UNO har en funktion som gör det möjligt för oss att kontrollera servopositionen genom att bara ge gradvärdet. Säg att om vi vill att servon ska vara 30 kan vi direkt representera värdet i programmet. SERVO-rubrikfilen tar hand om alla beräkningar av arbetsförhållandet internt.
#omfatta
Servoservo; servo.attach (3); servo.write (grader); |
Första uttalandet representerar rubrikfilen för styrning av SERVO MOTOR.
Andra uttalandet är namngivning av servon; vi lämnar det som servo själv.
Tredje uttalandet anger var servosignalstiftet är anslutet; detta måste vara en PWM-stift. Här använder vi PIN3.
Fjärde uttalandet ger kommandon för positionering av servomotor och är i grader. Om det ges 30, roterar servomotorn 30 grader.
Nu kan sg90 röra sig från 0-180 grader, vi har ADC-resultat 0-1024
Så ADC är ungefär sex gånger SERVO-POSITIONEN. Så genom att dela ADC-resultatet med 6 får vi ungefärlig SERVO-handposition.
Med detta får vi servolägesvärde matas till servomotorn, vilket är i proportion till flex eller böjd. När den här flexsensorn är monterad på handsken kan vi styra servoläget med handrörelse.