Nr. 32 – Der MQ-3 Alkoholsensor

Inhaltsverzeichnis

Einen MQ-03 Sensor an einen Arduino Mikrocontroller anschließen

Übersicht

Der MQ-03 Sensor ist ein Modul, das die Konzentration des Alkoholgehalts (Ethanolgehalts) in der Luft erfasst. Der Sensor gibt die erfassten Alkoholwerte als analogen Wert aus. Diese können im Anschluss im seriellen Monitor ausgegeben oder anderweitig verarbeitet werden.

Doch bevor wir uns diesem Teil der Anleitung widmen, blicken wir zuerst auf den Sensor selbst.

Pinbelegung

Der MQ-03 Sensor für Alkohol verfügt über vier Pins:

VCC = Pin für die Stromversorgung, anzuschließen an den 5V Pin des Arduinos
GND = Ground-Pin, anzuschließen an den GND Pin des Arduinos
A0 = Pin für den analogen Output, anzuschließen an den Pin A0 des Arduinos
D0 = Pin für den digitalen Output, anzuschließen an den Pin D0 des Arduinos

Zudem können wir den Schwellenwert, der über den Pin D0 als „1“ bzw. „0“ ausgegeben wird, mechanisch einstellen. 

Die Kalibrierung des Schwellenwertes erfolgt durch Drehen des Potentiometers, welches auf der Rückseite des Sensormoduls zu finden ist.

MQ-3-Sensor-fuer-Alkohol-bottom (2)

Nachdem wir unseren MQ-03 Sensor wie oben beschrieben an den Arduino Mikrocontroller angeschlossen haben, beginnen wir mit der Programmierung.

Beispielsketch 1

Im Prinzip möchten wir lediglich die erfassten Daten des MQ-03 auslesen. Dies erfolgt durch eine simple Abfrage.

int Analog = 0; 
int Schwellenwert;
int Wert;


void setup() {

Serial.begin(115200); // Baudrate wird auf 115200 festgelegt. Nur so werden die Werte korrekt ausgegeben.
pinMode(Analog, INPUT); // Der Analogpin (Pin 0, im Header festgelegt) dient nun als Input.

}

void loop()
{
Wert = analogRead(Analog); // Der analoge Sensorwert wird ausgelesen.

Schwellenwert = digitalRead(Analog); // Der digitale Sensorwert wird ausgelesen...

Serial.print("Alkoholwert: ");
Serial.println(Wert); // ... und anschließend ausgegeben.
Serial.print("Schwellenwert: ");
Serial.print(Schwellenwert); // An dieser Welle wird ausgegeben ob der Schwellenwert überschritten wurde (HIGH = 1).
Serial.print(" ");
delay(100);

}

Wenn wir uns nun die Werte im seriellen Monitor ansehen, werden wir feststellen, dass diese allein relativ nutzlos sind. Zu diesem Zeitpunkt liegt noch kein Referenzwert vor, der aussagt, wie gut oder schlecht die Luftqualität tatsächlich ist.

Daher müssen wir dem Sensor Frischluft zuführen und ihm somit ermöglichen, sich zu kalibrieren. Nachdem wir den Sensor jetzt an der frischen Luft haben ruhen lassen, können wir den erfassten Wert als Ausgangspunkt für die Bewertung der Luftqualität nutzen.

In unserem Fall lag dieser Wert bei ungefähr 100Dieser Wert kann jedoch variieren!

Aufgabe

Den zuvor erfassten Referenzwert nutzen wir nun, um uns eine kleine Kontrollstation zu basteln.

Sobald der Sensorwert über 100 liegt, soll eine rote LED für zwei Sekunden aufleuchten. Liegt der Sensorwert unter 100, leuchtet eine grüne LED zwei Sekunden lang auf.

Wir erweitern also unseren Aufbau um zwei LEDs und passen den Sketch entsprechend an.

Beispielsketch 2

int Null = 0; 
int Schwellenwert;
int Wert;
int LEDgruen = 13;
int LEDrot = 12;

void setup() 
{
Serial.begin(115200);       // Baudrate wird auf 115200 festgelegt. Nur so werden die Werte korrekt ausgegeben.
pinMode(Null, INPUT);       // Der Analogpin (Pin 0, im Header festgelegt) dient nun als Input.
pinMode(LEDgruen, OUTPUT);  // Die LEDs dienen als Output
pinMode(LEDrot, OUTPUT);
}

void loop()
{
Wert = analogRead(Null);            // Der analoge Sensorwert wird ausgelesen. 
Schwellenwert = digitalRead(Null);  // Der digitale Sensorwert wird ausgelesen...

Serial.print("Alkoholwert: ");
Serial.println(Wert); // ... und anschließend ausgegeben.
Serial.print("Schwellenwert: ");
Serial.print(Schwellenwert); // An dieser Welle wird ausgegeben ob der Schwellenwert überschritten wurde (HIGH = 1).
Serial.print(" ");

if (Wert < 100) // Sollte der Sensorwert kleiner/gleich 50 sein...

{
  digitalWrite(LEDrot, HIGH);
  delay(500);
  digitalWrite(LEDrot, LOW);
}

if (Wert > 100) // Sollte der Sensorwert größer/gleich 50 sein...

{
  digitalWrite(LEDgruen, HIGH);
  delay(500);
  digitalWrite(LEDgruen, LOW);
}

delay(100);

}

Funduino - Dein Onlineshop für Mikroelektronik

  • Dauerhaft 10% Rabatt für Schüler, Studenten und Lehrkräfte
  • Mehr als 3.500 Artikel sofort verfügbar!
  • Über 8 Jahre Erfahrung mit Arduino, 3D-Druck und co.
SALE