#include <Arduino.h>
/*LCD Tanımlamaları*/
#include <Wire.h>
#include <LiquidCrystalTr_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
/*Buton Tanımlamaları*/
#define BUTTON_1 4
#define BUTTON_2 5
#define BUTTON_3 6
#define BUTTON_4 7
#define BUTTON_5 8
/*Meteoroloji Sensörü Tanımlamaları*/
#include <BMx280I2C.h>
#define I2C_ADDRESS 0x76
BMx280I2C bmx280(I2C_ADDRESS);
/*Analog sensörler*/
#include "DFRobot_EC10.h"
#include "DFRobot_PH.h"
#include <EEPROM.h>
#define PH_PIN A0
float voltage,phValue,ecValue,temperature;
DFRobot_PH ph;
#define EC_PIN A1
DFRobot_EC10 ec;
/*Analog sensörler*/
/*DS18b20*/
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
/*DS18b20*/
void setup() {
/*LCD Kurulum*/
lcd.begin();
lcd.backlight();
lcd.clear();
ph.begin();
ec.begin();
while (!Serial);
Wire.begin();
Serial.begin(115200);
if (!bmx280.begin())
{
Serial.println("begin() failed. check your BMx280 Interface and I2C Address.");
lcd.clear();
lcd.setCursor(0,0);
lcd.println("BMx280 failed");
while (1);
}
if (bmx280.isBME280())
Serial.println("sensor is a BME280");
else
Serial.println("sensor is a BMP280");
bmx280.resetToDefaults();
bmx280.writeOversamplingPressure(BMx280MI::OSRS_P_x16);
bmx280.writeOversamplingTemperature(BMx280MI::OSRS_T_x16);
if (bmx280.isBME280())
bmx280.writeOversamplingHumidity(BMx280MI::OSRS_H_x16);
/*Buton Kurulum*/
pinMode(BUTTON_1, INPUT_PULLUP);
pinMode(BUTTON_2, INPUT_PULLUP);
pinMode(BUTTON_3, INPUT_PULLUP);
pinMode(BUTTON_4, INPUT_PULLUP);
/*DS18b20 başlatma*/
sensors.begin();
}
void loop() {
lcd.clear();
if (digitalRead(BUTTON_1) == LOW) {
/*Meteoroloji Ölçümü Yap*/
MeteorolojiOku();
delay(2000);
/*Meteoroloji Ölçümü Yap*/
}else if (digitalRead(BUTTON_2) == LOW) {
/*PH Ölçümü Yap*/
PHOku();
delay(2000);
/*Ph Ölçümü Yap*/
}else if (digitalRead(BUTTON_3) == LOW) {
/*PH Ölçümü Yap*/
ECoku();
delay(2000);
/*Ph Ölçümü Yap*/
}else if (digitalRead(BUTTON_4) == LOW) {
SicaklikOku();
delay(2000);
}else{
lcd.setCursor(0,0);
lcd.print("ODTÜ Su Kalitesi");
lcd.setCursor(2,1);
lcd.print("Ölçüm Cihazı");
delay(1000);
}
}
float PHOku(){
static unsigned long timepoint = millis();
if(millis()-timepoint>1000U){ //time interval: 1s
timepoint = millis();
//temperature = readTemperature(); // read your temperature sensor to execute temperature compensation
voltage = analogRead(PH_PIN)/1024.0*5000;
sensors.requestTemperatures(); float temperature = sensors.getTempCByIndex(0); // read the voltage
phValue = ph.readPH(voltage,temperature); // convert voltage to pH with temperature compensation
lcd.clear();
lcd.setCursor(6,0);
lcd.print("pH:");
Serial.print("pH:");
Serial.println(phValue,2);
lcd.setCursor(6,1);
lcd.print(phValue,2);
lcd.print(" ");
}
ph.calibration(voltage,temperature);
}
float SicaklikOku(){
sensors.requestTemperatures();
float temperatureC = sensors.getTempCByIndex(0);
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Sicaklik ");
lcd.setCursor(4,1);
lcd.print(temperatureC);
lcd.print("C");
Serial.print("Sicaklik: ");
Serial.print(temperatureC);
Serial.println(" C");
delay(2000); // Bir saniye bekle
}
float ECoku(){
static unsigned long timepoint = millis();
if(millis()-timepoint>1000U) //time interval: 1s
{
timepoint = millis();
voltage = analogRead(EC_PIN)/1024.0*5000; // read the voltage
Serial.print("voltage:");
Serial.print(voltage);
//temperature = readTemperature(); // read your temperature sensor to execute temperature compensation
sensors.requestTemperatures(); float temperature = sensors.getTempCByIndex(0);
ecValue = ec.readEC(voltage,temperature); // convert voltage to EC with temperature compensation
Serial.print(" temperature:");
Serial.print(temperature,1);
Serial.print("^C EC:");
Serial.print(ecValue,1);
Serial.println("ms/cm");
lcd.clear();
lcd.setCursor(2,0);
lcd.print("İletkenlik");
lcd.setCursor(4,1);
lcd.print(ecValue,1); lcd.print("ms/cm");
}
ec.calibration(voltage,temperature); // calibration process by Serail CMD
}
float MeteorolojiOku(){
if (!bmx280.measure())
{
Serial.println("could not start measurement, is a measurement already running?");
return;
}
do
{
delay(100);
} while (!bmx280.hasValue());
Serial.print("Basinc: "); Serial.println(bmx280.getPressure());
lcd.setCursor(0,1);
lcd.print("B:"); lcd.print((bmx280.getPressure()/100));lcd.print("mb");
lcd.setCursor(0,0);
Serial.print("T: "); Serial.println(bmx280.getTemperature());
lcd.print("T:"); lcd.print(bmx280.getTemperature());lcd.print("C");
if (bmx280.isBME280())
{
lcd.setCursor(9,0);
Serial.print("Humidity: ");
Serial.println(bmx280.getHumidity());
lcd.print("N:"); lcd.print("%");
lcd.println(bmx280.getHumidity());
}
}