I2C strain gauge

Fra HTX Arduino
Spring til navigation Spring til søgning

Strain gauges bruges til at lave målinger, og virker på en speciel måde, måden hvorpå den virker er man nødt til at vide inden man kan bruge den. En mekanisk strain gauge, som den vi har brugt i projekt har intet display eller noget hvor man kan læse vægten, den bliver påvirket med. Det er dette problem vi har prøvet at komme i møde i vores projekt, dette har vi forsøgt at gøre med I2C. Teorien som vi har været nødt til at kende, har vi også beskrevet kort. Da en strain gauge er ikke meget værd alene derfor er man nødt til at lave et modul hvori der er andre ting der hjælper dig med f.eks. at aflæse den vægt strain gaugen bliver udsat for, i vores tilfælde er dette en forstærker. Der skal dog stadig være noget der kan analysere den rå data der kommer fra strain gaugen igennem forstærkeren, dette gøres vha. et ATTiny modul der kommunikere I2C til arduinoen. Vores arduino er her master og ATTiny modulet er slave. Hvordan modulet kommunikere med hinanden kan ses tegnet i afsnittet med blokdiagram.

En anden måde at få fat i signalet fra en vejecelle på er ved hjælp af en Arduino Vejecelleforstærker - men beskrivelsen her er ganske grundig, så læs lige den først.

Blokdiagram

Til vores projekt har vi lavet et blokdiagram til at vise hvordan vi havde tænkt os at det samlede modul skulle se ud. Her kan man også se funktionen af de forskellige moduler og hvilke af dem der skal "snakke" med hvem. Det ses at vores strain gauge kører igennem vores forstærker, som går ind i vores ATTiny modul, der kommunikerer med I2C til arduino. På blokdiagrammet ses også vores ide om at udskrive vægten til et display, så langt nåede vi uheldigvis ikke pga. meget arbejde med forstærkeren.

Denne side beskriver altså strain gaugen, forstærkeren og delvist I2C-kommunikationen mellem ATTiny og arduino. Resten er ikke færdigudviklet.

Teorien bag strain gaugen

En strain gauge kan bruges til at måle den mekaniske spænding/belastning i forskellige genstande, fx. en bjælke. Den består af en lang, flad ledningsbane, der er viklet op i et mønster som vist på figuren.

Ledningsbanen virker som en modstand, hvis størrelse afhænger af, hvor meget den er strukket ud. Desto mere den er strukket ud, desto større modstand - hvilket ses af formlen[1]:

Af formlen ses det, at strain gaugens modstand er proportional med den samlede længde af ledningsbanerne, L.

Dette udnytter man i praksis ved at lime strain gaugen meget tætsluttende fast på en genstand. Hvis genstanden bøjes, vil strain gaugen enten forlænges eller forkortes, og derfor ændres dens modstand. Ud fra dette billede kan man se hvordan den virker i praksis, for at få en bedre forståelse for strain gaugen.

Sammenhængen mellem den relative ændring af modstanden ΔR/R og den relative ændring af straing gaugens samlede længde ε=ΔL/L kan bestemmes ved formlen[2]::

hvor GF er en konstant kaldet gaugefaktoren, der oftest sættes til GF=2. Eksempel: Strain gaugene, der benyttes i dette modul, har en modstand på ca. 350Ω. Det kan vises, at hvis man yder en belastning på 5kg på modulets strain gauge, så vil strain gaugen have en modstandsændring på ΔR=0,7Ω. Den relative forlængelse af strain gaugen bliver dermed:

Det vil altså sige, at strain gaugens ledningsbaner i dette tilfælde er forlænget med 1mm pr. m.


For mere information omkring strain gauges kan du gå ind på den specifikke wiki-side til strain gauges [[1]]

På disse billeder ses flere forskellige eksempler på vægtsensorer, der er opbygget af strain gauges:

De går fra 0-500 gram, 0-5 kilogram og 0-50 kilogram. I dette modul er der taget udgangspunkt i den midterste vægtsensor.

Beskrivelse af modulet

Modulet består af en vægtsensor, en instrumentforstærker samt en mikrocontroller, der behandler input og kan kommunikere med en arduino.

Vægtsensoren

Vægtsensoren består af fire straingauges og er opbygget som en wheatstones målebro - i dette tilfælde en fuldbro. En fuldbro består af to spændingsdelere, der hver især er opbygget af to strain-gauges. Her er to af strain gaugene (R1 & R4) placeret på oversiden af vægtsensoren, mens de andre to (R2 & R3) er placeret på undersiden.

Når vægtsensoren bøjes vil modstanden af R1 og R4 blive større, mens modstanden af R2 og R3 vil blive lavere. Dermed opstår en spændingsforskel mellem U1 og U2. Det er denne spænding man måler som outputspænding fra enheden.

Vægtsensoren har fire ledninger, som set i forhold til diagrammet er:

Ledning Funktion
Rød 5V
Sort Stel
Grøn U1
Blå U2

Instrumentationsforstærker

Spændingsforskellen mellem U1 og U2 fra vægtsensoren er dog meget lille, maks 10mV. Derfor skal vægtsensorens outputsignaler kobles til en instrumentationsforstærker, der forstærker inputtet omkring 250 gange. Det betyder, at spændingen får et maksimalt udslag på 10mV*250=2,5V.

Diagrammet over vægtsensoren inklusiv forstærker kan ses på billedet under her.

Rent praktisk skal man benytte et potentiometer i stedet for R1 for at finjustere forstærkningen til 250.

Koblingen af potentiometeret R12 og modstanden R13 til venstre for vægtsensoren sørger for, at spændingsforskellen mellem U1 og U2 (inputspændingen) er 10mV, når vægtsensoren er ubelastet. Tilsvarende bliver outputspændingen er 2,5V. Man kan bruge potentiometeret R12 til at kalibrere outputspændingen, så den er 2,5V, når vægtsensoren er ubelastet.

Når vægtsensoren er belastet på den ene side med 5kg, vil outputspændingen være 5V. Hvis den belastes med 5kg på den anden side, vil outputspændingen være 0V. Belastningen på vægtsensoren m kan, udtrykt ved outputspændingen Uout, beregnes som:

I2C-kommunikation mellem ATTiny45 og arduino

Programmeringen af arduinoen og microcontrolleren er ikke færdiglavet for dette modul. Meningen med denne del af modulet er, at microcontrolleren skal analysere det analoge input fra instrumentationsforstærkeren og sende data via I2C til arduinoen.

Det følgende er en beskrivelse af de ikke-færdiglavede test-koder:

For at arduinoen kan kommunikere I2C til dens slave, skal den slaven have en adresse, disse adresser kan for det meste findes i databladet til den enhed man bruger. Vi har derefter brugt noget eksempel kode til at teste om kommunikationen virker. Dette gøres ved vha. biblioteket "Wire" i arduino, som det ses i koden nedenfor tilslutter arduinoen sig I2C bussen og derefter laves der et loop som først begynder transmission til slaven, den sender en byte og derefter slutter transmission igen, derefter beder den så slaven om at sende en byte tilbage og dette læses og skrives ud. For at kunne programmere en ATTiny som er en microcontroller skal den på et udviklingsboard, som kan findes på wikien [2], derudover kan man også have et såkaldt shield til sin arduino der gør det betydeligt nemmere at programmere sit microcontroller board, et eksempel på sådan et shield kan også findes på wikien [3].

Referencer


Atmel Microcontroller
Atmel udviklingsmiljø AVR Compiler - AVR Makefile - AVR udviklingsboard - AVR-batch - AVR-programmer Shield - WinAVR
Atmel-type Udviklingsboard - ATMega328 - ATTiny2313A - ATTiny24A - ATTiny45 - ATTiny461 - ATTiny48
I2C Moduler Arduino Display - Arduino DS1307 RTC - Arduino IO Expander - Arduino magnetisk kompas - Frekvensmodul - I2C barometer - I2C Display - I2C Lommeregner - I2C strain gauge - I2C tastatur - I2C-RF-modtager - IR Fjernbetjening - Mikrofon som Undervisningsudstyr