#include "thingProperties.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp; //Interfața I2C
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
int measurePin = A5;
int ledPower = 7;
float voMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;
int buzzerPin = 13;
void setup() {
Serial.begin(9600);
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
delay(1500);
pinMode(8, OUTPUT);
// Defined in thingProperties.h
initProperties();
//--------- CONECTARE LA ARDUINO IOT CLOUD -----------
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
for(;;);
}
delay(1000);
//--------- ECRAN OLED -----------
display.clearDisplay();
//minutul 1 din 5
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Se calibreaza. Asteptati 5 minute!");
display.display();
//minutul 2 din 5
delay(600);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Se calibreaza. Asteptati 4 minute!");
display.display();
//minutul 3 din 5
delay(600);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Se calibreaza. Asteptati 3 minute!");
display.display();
//minutul 4 din 5
delay(600);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Se calibreaza. Asteptati 2 minute!");
display.display();
//minutul 5 din 5
delay(600);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Se calibreaza. Asteptati un minut!");
display.display();
delay(600);
//calibrare finalizată
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Calibrare finalizata");
display.display();
delay(100);
if (!bmp.begin(0x76,0x58)) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
while (1);}
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */
Adafruit_BMP280::FILTER_X16, /* Filtering. */
Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
}
void loop() {
ArduinoCloud.update();
//--------- CALIBRARE SENSORI -----------
a1_mq3_alcooletanol = ((analogRead(A1)-340)/10)-2;
a2_mq4_nh4 = (analogRead(A2)-58)-60;
a3_mq5_gazefumgpl = (analogRead(A3)-223)-175;
a4_mq8_h2 = (analogRead(A4)-300)-120;
a5_mq7_co = ((analogRead(A5)-287-11)/10)-3;
presiune = 1;
if(a1_mq3_alcooletanol<0)
a1_mq3_alcooletanol = 0;
else
a1_mq3_alcooletanol = a1_mq3_alcooletanol;
if(a2_mq4_nh4<0)
a2_mq4_nh4 = 0;
else
a2_mq4_nh4 = a2_mq4_nh4;
if(a3_mq5_gazefumgpl<0)
a3_mq5_gazefumgpl = 0;
else
a3_mq5_gazefumgpl = a3_mq5_gazefumgpl;
if(a4_mq8_h2<0)
a4_mq8_h2 = 0;
else
a4_mq8_h2 = a4_mq8_h2;
if(a5_mq7_co<0)
a5_mq7_co = 0;
else
a5_mq7_co = a5_mq7_co;
//--------- adevarat/fals CO -----------
if(a5_mq7_co>15){
indicator_co = false;}
else{
indicator_co = true;}
//--------- adevarat/fals ALCOOL/ETANOL -----------
if(a1_mq3_alcooletanol>10){
indicator_alcool = false;}
else{
indicator_alcool = true;}
//--------- adevarat/fals FUM/GAZE NATURALE/GPL -----------
if(a3_mq5_gazefumgpl>20){
indicator_fumgazenaturalgpl = false;}
else{
indicator_fumgazenaturalgpl = true;}
//--------- adevarat/fals NH4 -----------
if(a2_mq4_nh4>20){
indicator_nh4 = false;}
else{
indicator_nh4 = true;}
//--------- PM2.5 -----------
digitalWrite(ledPower,LOW);
delayMicroseconds(100);
voMeasured = analogRead(measurePin);
delayMicroseconds(40);
digitalWrite(ledPower,HIGH);
delayMicroseconds(100);
calcVoltage = voMeasured*(5.0/1024);
dustDensity = 0.17*calcVoltage-0.1;
pm = (voMeasured-300)+5;
if(pm<0)
pm = 0;
else
pm = pm;
//--------- buzzer detectare alcool/etanol -----------
if(a1_mq3_alcooletanol>5) {
tone(buzzerPin, 587);
delay(300);
noTone(buzzerPin);
delay(200);
tone(buzzerPin, 587);
delay(300);
noTone(buzzerPin);}
else{
noTone(buzzerPin);}
}
//--------- COMUNICARE -----------
void onMessageChange() {
if(message == "Start"){
message = "Deschideți platforma Arduino și notați următorii parametri la ora și ziua indicate de profesor: Temp(*C), H2(ppm) și CO(ppm).";}
if(message == "9.1"){
message = "";
message = "9.1 Sa se calculeze concentratia de CO si H2 in mg/m3 la momentul interpretarii diagramelor platformei folosind formula de tranformare a unei parti/milion in mg/m3";}
if(message == "9.2"){
message = "9.2 Sa se calculeze volumul (c.n.) de CO dintr-o sala de clasa cu dimensiunile 8m x 6m x 2,5m";}
if(message == "9.3"){
message = "9.3 Sa se calculeze ce volum de NH3 se poate obtine din H2 emis in sala de clasa la momentul interpretarii diagramelor";}
if(message == "Foaie"){
message = "https://www.ltmsebastian.ro/wp-content/uploads/2024/05/foaiedelucru.pdf";}
}