I denna handledning kommer vi att utveckla en krets med Force sensor, Arduino Uno och en servomotor. Det kommer att vara ett servostyrningssystem där servoaxelläget bestäms av vikten som finns på kraftsensorn. Låt oss prata om servon och andra komponenter innan vi går vidare.
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 också i vissa skrivare och faxmaskiner.
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.
Som visas i figuren nedan, för att axeln ska flyttas till 9o-klockan måste TURN ON RATION vara 1 / 18.ie. 1 mil sekund av 'PÅ-tid' och 17 mil 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 SERVO MOTOR-axeln genom att variera arbetsförhållandet för PWM-signal genererad av UNO.
Låt oss nu prata om kraftsensor eller viktsensor.
För att gränssnitt en FORCE-sensor med ARDUINO UNO ska vi använda 8-bitars ADC-funktion (Analog till Digital Conversion) i arduno uno.
En FORCE-sensor är en givare som ändrar sitt motstånd när ett tryck appliceras på ytan. FORCE-sensorn finns i olika storlekar och former.
Vi kommer att använda en av de billigare versionerna eftersom vi inte behöver mycket noggrannhet här. FSR400 är en av de billigaste kraftsensorerna på marknaden. Bilden på FSR400 visas i bilden nedan.
Nu är det viktigt att notera att FSR 400 är känslig längs längden, kraften eller vikten bör koncentreras till labyrinten mitt i sensorn, som visas i figuren.
Om kraften appliceras vid fel tidpunkter kan enheten skadas permanent.
En annan viktig sak att veta att sensorn kan driva strömmar med hög räckvidd. Så kom ihåg körströmmarna när du installerar. Sensorn har också en kraftbegränsning som är 10Newtons. Så vi kan bara använda 1 kg vikt. Om vikter högre än 1 kg tillämpas kan sensorn visa vissa avvikelser. Om det har ökat mer än 3 kg. sensorn kan skadas permanent.
Som tidigare nämnts används denna sensor för att känna av tryckförändringarna. Så när vikten appliceras ovanpå FORCE-sensorn ändras motståndet drastiskt. Motståndet för FS400 över vikt visas i nedanstående diagram:
Som visas i figuren ovan minskar motståndet mellan sensorns två kontakter med vikten eller så ökar konduktansen mellan sensorns två kontakter.
Motståndet hos en ren ledare ges av:
Var, p- Ledarens motståndskraft
l = Ledarens längd
A = Ledarområde.
Tänk nu på en ledare med motståndet "R", om något tryck appliceras ovanpå ledaren, minskar arean på ledaren och ledarens längd ökar till följd av tryck. Så med formeln bör ledarens motstånd öka, eftersom motståndet R är omvänt proportionellt mot arean och också direkt proportionellt mot längden l.
Så med detta för en ledare under tryck eller vikt ökar ledarens motstånd. Men denna förändring är liten jämfört med total motstånd. För en betydande förändring staplas många ledare tillsammans.
Detta är vad som händer inuti kraftsensorerna som visas i figuren ovan. När man tittar noga kan man se många linjer inuti sensorn. Var och en av dessa linjer representerar en ledare. Sensorkänsligheten är i ledarantal.
Men i detta fall kommer motståndet att minska med trycket eftersom materialet som används här inte är en ren ledare. FSR här är robusta enheter av polymer tjock film (PTF). Så dessa är inte rena ledningsmaterialanordningar. Dessa består av ett material som uppvisar en minskning av motståndet med ökad kraft som appliceras på sensorns yta.
Detta material visar egenskaper som visas i grafen för FSR.
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 figur är R1 här ett konstant motstånd och R2 är FORCE-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.
Nu när kraften appliceras på FORCE SENSOR, ändrar spänningen vid delarens ände denna stift som ansluten till ADO-kanalen för UNO, vi får ett annat digitalt värde från ADC för UNO, när kraften på sensorn ändras.
Detta digitala ADC-värde matchas till PWM-signalens arbetsförhållande, så vi har SERVO-positionskontroll i förhållande till kraft som appliceras på sensorn.
Komponenter
Hårdvara: UNO, strömförsörjning (5v), 1000uF kondensator, 100nF kondensator (3 delar), 100KΩ motstånd, SERVO MOTOR (SG 90), 220Ω motstånd, FSR400 kraftgivare.
Programvara: Atmel studio 6.2 eller aurdino nattligt.
Kretsschema och arbetsförklaring
Den kretsschema för servomotorkontroll genom kraftsensorn 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. Efter konvertering ska vi ta det digitala värdet (som representerar vikt) och relatera det till PWM-värdet och ge denna PWM-signal till SERVO-motorn.
Så med vikten har vi ett PWM-värde som ändrar dess arbetsförhållande beroende på det digitala värdet. Högre det digitala värdet högre arbetsförhållandet för PWM. Så med PWM-signal med högre arbetsförhållande bör servoaxeln nå längst till höger eller längst till vänster enligt figuren i inledningen.
Om vikten är lägre kommer vi att ha ett lägre PWM-arbetsförhållande och enligt figuren i inledningen ska servon nå längst till höger.
Med detta har vi en SERVO-positionskontroll med VIKT eller KRAFT.
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 Arduino Uno ADC-kanaler 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 ”.
PWM för UNO kan uppnås vid valfritt stift som symboliseras som “~” på PCB-kortet. Det finns sex PWM-kanaler i UNO. Vi ska använda PIN3 för vårt ändamål.
analogWrite (3, VALUE); |
Från ovanstående tillstånd kan vi direkt få PWM-signalen vid motsvarande stift. Den första parametern inom parentes är att välja PIN-nummer för PWM-signalen. Den andra parametern är för skrivförmåga.
PWM-värdet på Arduino Uno kan ändras från 0 till 255. Med "0" som lägst till "255" som högst. Med 255 som arbetsförhållande får vi 5V vid PIN3. Om tullförhållandet anges som 125 får vi 2,5V vid PIN3.
Låt oss nu prata om servomotorstyrningen, Arduino Uno har en funktion som gör att vi kan styra 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. Du kan lära dig mer om servomotorstyrning med arduino här.
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. Därför har vi en PWM-signal vars arbetsförhållande ändras linjärt med VIKT eller KRAFT. Detta ges till servomotor, vi kan styra servomotorn med kraftgivare.