This is an old revision of the document!


Mini statie de monitorizare a calitatii apei

Silvestru Radu - 335CC

Introducere

Calitatea apei este un indicator esențial pentru sănătatea mediului și a oamenilor. Detectarea și monitorizarea parametrilor apei pot ajuta la identificarea contaminărilor și la evaluarea potabilității acesteia. Acest proiect își propune să construiască o mini stație de testare a calității apei, capabilă să măsoare temperatura, pH-ul, turbiditatea și conductivitatea (EC - electrical conductivity) apei

Scopul

Scopul proiectului este de a construi un dispozitiv compact și accesibil pentru evaluarea rapidă a calității apei, utilizând un Arduino Nano și senzori low-cost

Ideea de la care am pornit

Ideea a pornit de la dorința de a crea un sistem accesibil și educativ care să permită testarea calității apei, fără a depinde de soluții comerciale scumpe

De ce cred ca este util

Credem că proiectul este util pentru că oferă o metodă simplă și accesibilă de a evalua rapid calitatea apei, un aspect esențial pentru sănătatea umană și protecția mediului

Descriere generala

Sistemul este compus din următoarele module:

  * Senzor de temperatură (DS18B20) – măsoară temperatura apei și transmite date digitale către microcontroler
  * Senzor de turbiditate – detectează nivelul de impurități din apă
  * Senzor de conductivitate electrică (EC) – construit folosind electrozi metalici, măsoară concentrația totală de săruri dizolvate în apă
  * Display OLED/I2C – afișează mesaje de stare și valori ale parametrilor măsurați.
  * Microcontroler (Arduino Nano) – colectează și procesează datele de la senzori, calculează valorile finale și controlează ieșirile

Hardware Design

Nume componentă Model Protocol
Microcontroler Arduino Nano -
Senzor de turbiditate Turbidity V1.3 ADC
Senzor de conductivitate DIY EC Sensor ADC
Display OLED (I2C) I2C
Modul H-Bridge L9110S PWM

Schema Bloc

Schema Electrica

Software

Librarii folosite

``` #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <OneWire.h> #include <DallasTemperature.h> ```

I2C LCD Setup

``` LiquidCrystal_I2C lcd(0x27, 16, 2); ```

EC Sensor Pins and Constants

` #define EC_IN1 7 #define EC_IN2 6 #define EC_ANALOG A0 #define EC_REF_RESISTOR 1000.0 `

Turbidity Sensor

``` #define TURBIDITY_PIN A1 ```

DS18B20 Setup

``` OneWire oneWire(TEMP_DATA_PIN); DallasTemperature tempSensor(&oneWire); ```

EC Calibration Constants

``` const float EC_VOLT_LOW = 0.20; Voltage in distilled water const float EC_VOLT_HIGH = 1.12; Voltage in 1413 uS/cm solution const float EC_LOW_UScm = 0.0; const float EC_HIGH_UScm = 1413.0;

const float EC_SLOPE = (EC_HIGH_UScm - EC_LOW_UScm) / (EC_VOLT_HIGH - EC_VOLT_LOW); const float EC_OFFSET = EC_VOLT_LOW; ``` ``` void setup() ```

== Pin Setup ==
```
pinMode(EC_IN1, OUTPUT);
pinMode(EC_IN2, OUTPUT);
```
== Serial & Sensors ==
```
Serial.begin(9600);
tempSensor.begin();
```
== LCD Init (manual style) ==
Wire.begin();
lcd.begin(16, 2);
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Water Monitor");
delay(2000);
lcd.clear();
```

void loop() {

// === EC Sensor Measurement (manually alternating) ===
digitalWrite(EC_IN1, HIGH);
digitalWrite(EC_IN2, LOW);
delayMicroseconds(5000);  // ~5 ms
int adc1 = analogRead(EC_ANALOG);
digitalWrite(EC_IN1, LOW);
digitalWrite(EC_IN2, HIGH);
delayMicroseconds(5000);  // ~5 ms
int adc2 = analogRead(EC_ANALOG);
float voltage_avg = ((adc1 + adc2) / 2.0) * (5.0 / 1023.0);
float current_mA = voltage_avg / EC_REF_RESISTOR * 1000.0;
// Apply calibration to get conductivity
float ec_uScm = EC_SLOPE * (voltage_avg - EC_OFFSET);
if (ec_uScm < 0) ec_uScm = 0;
// === Turbidity Sensor ===
int turb_raw = analogRead(TURBIDITY_PIN);
float turb_voltage = turb_raw * (5.0 / 1023.0);
// === Temperature Sensor ===
tempSensor.requestTemperatures();
float tempC = tempSensor.getTempCByIndex(0);
// === Serial Monitor Output ===
Serial.println("==== WATER QUALITY ====");
Serial.print("Temperature: "); Serial.print(tempC); Serial.println(" C");
Serial.print("EC: "); Serial.print(ec_uScm); Serial.println(" uS/cm");
Serial.print("Turbidity Voltage: "); Serial.print(turb_voltage, 2); Serial.println(" V");
Serial.println("========================\n");
// === LCD Display Output ===
lcd.setCursor(0, 0);
lcd.print("T:"); lcd.print(tempC, 1); lcd.print("C ");
lcd.print("EC:"); lcd.print((int)ec_uScm);
lcd.setCursor(0, 1);
lcd.print("Turb:"); lcd.print(turb_voltage, 1); lcd.print("V");
delay(1500);

} ```

pm/prj2025/vstoica/radu.silvestru.1748279934.txt.gz · Last modified: 2025/05/26 20:18 by radu.silvestru
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0