Arduino nano+Mq135+display oled 0.96" ssd1306 128x64
Dopo aver smanettato per la prima volta con arduino e relativi sketch tipo blink ,etc ,durante questo periodo di quarantena ,ho deciso di iniziare a pubblicare i miei primissimi passi con questa fantastica schedina. Il linguaggio di programmazione di arduino non è propio facilissimo,però partendo dai primi skecth e facendo molta pratica (un pò di conoscenze e dimestichezza con l’elettronica sono necessarie),sto iniziando a mettere insieme un pò di sketch presi quà e là con risultati accettabili.Il passo successivo ai primi sketch di esempio è stato quello di iniziare ad utilizzare i sensori (DHT11,BMP180,MQ135,ETC) abbinati a display sia LCD che OLED.
In questo progetto utilizziamo un rilevatore di gas (sensore MQ135) abbinato ad un display OLED ssd1306 da 128x64 px ,il tutto montato su un Arduino nano(va bene anche arduino 1).
Elenco materiali utilizzati:
Arduino nano
sensore mq135
display oled 0.96" ssd1306 128x64px
breadboard
cavetti dupont
Collegamenti elettrici su breadboard:
sda =A4 (pin arduino cavo giallo)
Display pin sck = A5(pin arduino cavo verde)
Vcc =5 V(pin arduino cavo rosso)
GND=GND(pin arduino cavo nero)
A0=A0 pin arduino cavo arancio
Sensore mq135 pin Vcc=5V pin arduino cavo rosso
GND=GND pin arduino cavo nero
Per quanto riguarda lo sketch ho preso un esempio dalla libreria MQUnifiedsensor chiamato MQ135 ALL,ho aggiunto le librerie per il display (Adafruit_SSD1306.h,Adafruit_GFX.h),infine ho aggiunto le istruzioni per visualizzare sul display i risultati,di seguito lo sketch modificato;
******************************************************************
/*
MQUnifiedsensor Library - reading an MQ135
Demonstrates the use a MQ135 sensor.
Library originally by Miguel A Califa, Yersson Carrillo, Ghiordy Contreras, Mario Rodriguez
Wiring:
https://github.com/miguel5612/MQSensorsLib_Docs/blob/master/static/img/MQ_Arduino.PNG
Please take care, arduino A0 pin represent the analog input configured on #define pin
This example code is in the public domain.
*/
//Include the library
#include <MQUnifiedsensor.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
//Definitions
#define placa "Arduino Nano"
#define Voltage_Resolution 5
#define pin A0 //Analog input 0 of your arduino
#define type "MQ-135" //MQ135
#define ADC_Bit_Resolution 10 // For arduino UNO/MEGA/NANO
#define RatioMQ135CleanAir 3.6//RS / R0 = 3.6 ppm
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
//declare oled display
Adafruit_SSD1306 display(OLED_RESET);
//Declare Sensor
MQUnifiedsensor MQ135(placa, Voltage_Resolution, ADC_Bit_Resolution, pin, type);
//*************************************SETUP***********************************************//
void setup() {
Serial.begin(115200); //Init serial port
//Init the oled display
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);// initialize I2C addr to 0x3C ( for 128x64 Display )
display.display();
delay(1000);
display.clearDisplay();
//Set math model to calculate the PPM concentration and the value of constants
MQ135.setRegressionMethod(1); //_PPM = a*ratio^b
/***************************** MQ Init ********************************************/
//Remarks: Configure the pin of arduino as input.
/************************************************************************************/
MQ135.init();
/*
//If the RL value is different from 10K please assign your RL value with the following method:
MQ135.setRL(10);
*/
/***************************** MQ CAlibration ********************************************/
// Explanation:
// In this routine the sensor will measure the resistance of the sensor supposing before was pre-heated
// and now is on clean air (Calibration conditions), and it will setup R0 value.
// We recomend execute this routine only on setup or on the laboratory and save on the eeprom of your arduino
// This routine not need to execute to every restart, you can load your R0 if you know the value
// Acknowledgements: https://jayconsystems.com/blog/understanding-a-gas-sensor
Serial.print("Calibrating please wait.");
float calcR0 = 0;
for (int i = 1; i <= 10; i ++)
{
MQ135.update(); // Update data, the arduino will be read the voltage on the analog pin
calcR0 += MQ135.calibrate(RatioMQ135CleanAir);
Serial.print(".");
}
MQ135.setR0(calcR0 / 10);
Serial.println(" done!.");
}
//************************************************LOOP*******************************************//
void loop() {
MQ135.update(); // Update data, the arduino will be read the voltage on the analog pin
MQ135.setA(605.18); MQ135.setB(-3.937); // Configurate the ecuation values to get CO concentration
float CO = MQ135.readSensor(); // Sensor will read PPM concentration using the model and a and b values setted before or in the setup
MQ135.setA(77.255); MQ135.setB(-3.18); // Configurate the ecuation values to get Alcohol concentration
float Alcohol = MQ135.readSensor(); // Sensor will read PPM concentration using the model and a and b values setted before or in the setup
MQ135.setA(110.47); MQ135.setB(-2.862); // Configurate the ecuation values to get CO2 concentration
float CO2 = MQ135.readSensor(); // Sensor will read PPM concentration using the model and a and b values setted before or in the setup
MQ135.setA(44.947); MQ135.setB(-3.445); // Configurate the ecuation values to get Tolueno concentration
float Toluene = MQ135.readSensor(); // Sensor will read PPM concentration using the model and a and b values setted before or in the setup
MQ135.setA(102.2 ); MQ135.setB(-2.473); // Configurate the ecuation values to get NH4 concentration
float NH4 = MQ135.readSensor(); // Sensor will read PPM concentration using the model and a and b values setted before or in the setup
MQ135.setA(34.668); MQ135.setB(-3.369); // Configurate the ecuation values to get Acetona concentration
float Acetona = MQ135.readSensor(); // Sensor will read PPM concentration using the model and a and b values setted before or in the setup
//scrivo sul seriale i dati del sensore MQ135
Serial.print("******Lettura valori sensore MQ135******");
Serial.println(" ");
Serial.print("Monossido di carbonio CO: ");
Serial.print(CO);
Serial.println(" PPM");
Serial.print("Alcohol: ");
Serial.print(Alcohol);
Serial.println(" PPM");
Serial.print("Anidride carbonica CO2: ");
Serial.print(CO2);
Serial.println(" PPM");
Serial.print("Toluene: ");
Serial.print(Toluene);
Serial.println(" PPM");
Serial.print("Ammonio NH4+: ");
Serial.print(NH4);
Serial.println(" PPM");
Serial.print("Acetone: ");
Serial.print(Acetona);
Serial.println(" PPM");
//scrivo sul display i dati del sensore MQ135
display.setTextColor(WHITE);
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
display.print("CO:"); //CO monossido di carbonio
display.print(CO);
display.println(" PPM");
display.setCursor(0, 10); //ALCOHOL
display.print("Alcohol:");
display.print(Alcohol);
display.println(" PPM");
display.setCursor(0, 20); //CO2 anidride carbonica
display.print("CO2:");
display.print(CO2);
display.println(" PPM");
display.setCursor(0, 30); //ammonio
display.print("Ammonio:");
display.print(NH4);
display.println(" PPM");
display.setCursor(0, 40);
display.print("Acetone:"); //Acetone
display.print(Acetona);
display.println(" PPM");
display.setCursor(0, 50);
display.print("Toluene:"); //Toluene
display.print(Toluene);
display.println(" PPM");
delay(1000);
display.display();
}
Caricato lo sketch inizieremo a visualizzare sul display e sul monitor seriale i dati relativi al CO,Alcohol,CO2,Ammonio,Acetone e Toluene.
Spero vi sia piaciuto questo primissimo post,a presto e buon divertimento con arduino.