Arduino Alkoholsensor

Fra Kommunikation-IT Holstebro HTX
Skift til: navigering, søgning
Alkoholsensor fra dx.com [1]

En alkoholsensor er en type sensor som kan måle ethanol i luften. Den fungerer ved at ethanolen i luften skaber en kemisk reaktion i sensoren. Dette skaber en spænding hvorved en værdi udsendes, bestemt af mængden af ethanol. Alkohol sensoren her er en MQ-3. MQ-3’en kan bruges som en alkometer, der kan måle mængden af alkoholet i åndedræt, ligesom politiets, Den kan også måle koncentrationen af andre stoffer i luften. MQ-3’en er en følsom sensor med hurtig responstid.

Modulet er købt på dx.com færdigt og samlet hos dx.com. [1]

Sensorens mekanisme

Forskellige typer alkoholsensorer virker med forskellige mekanismer. MQ-3 gas sensoren virker med brug af en brændselscelle teknologi. Elektrisk energi produceres inden i cellen ved oxidationsreaktionen med ethanol (alkohol).

Billedefradatablad.jpg[2]

Fuelcell.jpg[3]

De vigtigste dele af mekanismen er anoden, som er lavet af platin, og katoden, som er af guld. Når ethanol kommer i kontakt med anoden, sker en kemisk reaktion, som omdanner det til ethanal, protoner og frie elektroner.

CH3CH2OH → CH3CHO + 2H+ + 2e-

Ethanalen kommer tilbage i luften. Protonerne bevæger sig over mod katoden gennem en elektrolyt, mens elektronerne skal igennem en ekstern ledning. På katoden reagerer de med O2 i luften for at danne vand. Strømmen kommer fra elektronerne, som tvinges igennem ledningen. Spændingen stiger lineært med koncentrationen af alkohol i luften. Jo flere ethanol molekyler der er, jo flere elektroner sendes igennem ledningen på en gang. Dette øger strømstyrke, som medfører i et fald i modstanden. Derfor ville den registrerede modstand, Rs falde proportional med koncentrationen af ethanol i luften. Maskinen kan også registrere koncentrationen af andre stoffer. Metan, benzen, carbonmonoxid, m.m reagerer også med anoden, og giver en spænding. Dog varierer den registrerede modstand for en bestemt koncentration fra stof til stof. Ethanol er det stof, beskrevet i databladet, som giver den størst fald i modstand pr. mg. En anden vigtig del af sensoren er en spole lavet af Ni-Cr, som skaber varme ud fra input strømmen. Dette er nødvendig, fordi reaktionen kræver varme for at foregå.

Datablad

Databladet henvises til fra sparkfun.com. [2]

Databladet beskriver sensorens tekniske specifikationer. Beskrivelse af hvordan man anvender og kalibrerer sensoren. Diagrammer over komponenten, med beskrivelse af de forskellige deles funktioner og materialer. Den indeholder også grafer over den registrerede modstand for forskellige koncentrationer af forskellige stoffer.

Softwareeksempel

Softwareeksemplet består i bund og grund i at omregne den analoge værdi fra modulet til en densitet i enheden mg/L. Herefter printes resultatet ud.

Der sker nogle konverteringer af den analoge værdi igennem koden. Hver af disse konverteringer er essentielle at forstå. Her er en kort forklaring af hvilke konverteringer, der foregår:

Analog værdi => spænding over modulet => modstand fra det kemiske modul => densitet af alkohol i luften [mg/L]

Analog værdi => spænding over modulet

Den første konvertering er den simpleste. Da det analoge input er en værdi mellem 0-1023, og 0 beskriver en spænding på 0V, og 1023 beskriver en spænding på 5V(det er det, der bliver leveret af arduinoen), kan man finde den spænding der er over den kemiske reaktion i sensoren således:

sensor_value / 1024 * 5.0

Spænding over modulet => modstand fra det kemiske modul

Til denne konvertering bliver spændingsdelerformlen brugt. [4] Alkoholsensoren er bygget op, som vist på dette diagram:

Diagramafspaendingsdelerformlen.jpg

Tavletegning af Anders Benjamin Clausen

hvor:

Uin er spændingen arduinoen leverer over komponentet

Uout er spændingen, der kommer ud af modulet, altså spændingen over den konstante modstand som afhænger af den modstand hvor den kemiske reaktion indgår

R1 er den variable modstand (den kemiske)

R2 er den konstante modstand, der ligger inde i modulet (1k ohm i vores tilfælde)

Vi bruger nu spændingsdelerformlen, til at finde modstanden R1:

Mapleudregning.jpg

Det kan videre siges:

Mapleudregning1.png

Modstand fra det kemiske modul => densitet af alkohol i luften

Vi brugte herefter en graf fra modulets datablad:

Graffradatablad.png

Vi definerede herefter en formel for densiteten, som er en regression på data, der følger formlen: log10(y) = k * log10(x) + log10(c), og fandt frem til formlen:

Formelafdensitet.png

R0 (Modstanden over kemien ved 0.4mg/L) blev bestemt eksperimentielt til 3413.79 ohm. OBS. Den kan være forskellig fra sensor til sensor, så det er en god idé at bestemme denne værdi selv.

Kode

Koden herunder realiserer et simpelt eksempel på en anvendelse af alkoholsensoren.

I setup() sættes indgange på, og der klargøres til kommunikation på den serielle port.

I loop() klargøres til en summation af måleværdier, og der sættes en konstant. Herefter måles 100 værdier fra sensoren, der omregnes til en spænding. Ud fra spændingen regnes modstanden ud fra formlerne der blev udledt i sidste afsnit. Der summeres 100 af disse modstandsværdier, og efter for-loopet beregnes en gennemsnitsværdi af de 100 målinger.

På baggrund af gennemsnitsværdien beregnes koncentrationen (density), igen ud fra de udledte formler.

Hvis den digitale indgang tillader det, så udskrives koncentrationen på den serielle port, så den kan ses i Serial Monitor.

Der loopes hvert sekund ved at indføre et delay(1000).

Den viste software kan hentes i denne ZIP-fil.

void setup() {
  pinMode(A0, INPUT);
  pinMode(3, INPUT);

  Serial.begin(9600);
}

double sensor_value;
double sensor_volt; 

double R1;
double RS;
double R0;

double density;

void loop()
{
  RS = 0;
  R0 = 3413.79; //R0 er en kontrolværdi, der beskriver hvor stor en modstand, der er på det kemiske modul, når der er
                //0,4mg alkohol per L luft. Dette er eksperimentielt bestemt
  
  for(int i = 0; i < 100; i++){
    sensor_value = analogRead(A0); //sensor_value bliver sat til den værdi, der bliver læst fra alkoholsensoren
    sensor_volt = sensor_value / 1024 * 5.0; //her konverteres den analoge værdi til en spænding over modulet
  
    R1 = 5000/sensor_volt-1000; //modstanden over det kemiske modul udregnes
    RS = RS + R1;
  }
  
  RS = RS / 100; //Sensorværdien læses 100 gange, og man findes den gennemsnitlige værdi over de 100 målinger. Dette
                 //tager højde for usikkerheden i målingerne.

  //densiteten udregnes i enheden mg(alkohol)/L(luft) ud fra forholdet mellem R0 og RS
  density = 1.421483497 * pow(10, -14) * pow(exp(1), 1.614512179 * log(R0/RS) + 30.97295333);
  

  if(!digitalRead(3)){
    Serial.println("Density over 10 mg/L...");
  }else{
    Serial.print("Density: ");
    Serial.print(density);
    Serial.println(" mg/L");
  }

  delay(1000);
}

Test af sensoren

Her vises et eksempel på et output fra dette softwareeksempel. Alkoholsensoren blev her styret hen imod, og væk fra, en pøl af rent ethanol.

Output.png

Hardware

Opkobling

Alkoholsesoren har fire ben. To til strømforsyning og to til output. Den forsynes med +5V på VCC benet. DOUT giver digital output, som giver en høj signal når den registrerer, at spændingen (stiger med alkoholkoncentrationen i luften) kommer over en bestemt grænse. AOUT giver analog output i form en spænding mellem 0 og 5 V. Dette svarer til et tal mellem 0 1023, når det læses inde i Arduinoen.

Diagram over opkoblingen af alkoholsensoren til en Arduino UNO
Diagram over opkoblingen af alkoholsensoren til en Arduino UNO

VCC og GND sættes til +5V og ground på arduinoen. DOUT i diagrammet er sat til D13, men kan sættes til ethvert ben mellem D0 og D13. D0 og D1 er upraktiske at anvende, da visse komponenter kun kan sættes til de to ben. AOUT er sat til A0, men kan sættes i alle benene mellem A0 og A5. A4 og A5 er upraktiske at anvende, da visse komponenter kun kan sættes til de to ben.

Krav

- Spænding: 5V ± 0,1

- Opvarmningseffekt: < 750 mW

- Operativ temperaturområde: -10 °C - 50 °C

- Lagrings temperaturområde: -20 °C - 70 °C

- Luftfugtighed: < 95%

- Oxygen koncentration: 21%

- Alkoholkoncentration: 0,05 mg/L - 10 mg/L

Alle krav taget fra databladet. [2]

Referencer

  1. 1,0 1,1 Købsside ved dx.com til modulet
  2. 2,0 2,1 2,2 Datablad for modulet
  3. Billede fra Wikipedia
  4. Spændingsdelerformlen