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).



Ecco qui un immagine del display con le letture del sensore

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.




Post popolari in questo blog

Arduino weather station wireless con NRF24L01+PA+LNA+dht11+bmp180+mq135+HC-05 con doppio display oled 0,96" arduino nano+mega

Arduino+DHT11+BMP180+Oled display i2c sh1106 con schermate che si alternano

Modulo di contatto

Nome

Email *

Messaggio *