Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

IoT Waterkwaliteit Sensorsysteem - Arduino Gebaseerde Real-Time Monitoring

Onderdelen en benodigdheden

Arduino UNO1
Male/Female Jumper Wires1
HC-05 Bluetooth Module1
RGB Diffused Common Cathode1
Weerstand 330 ohm3
Rotary potentiometer (standaard)1
RGB LCD Shield Kit, 16x2 Karakter Display1
Weerstand 1k ohm1

Benodigde tools en machines

  • Wire Stripper & Cutter, 26-14 AWG Solid & Stranded Wires

Apps en online diensten

  • Arduino IDE
  • Ardutooth (app)

Over dit project

Water is een essentiële bron in ons dagelijks leven. We moeten er dus voor zorgen dat het van goede kwaliteit is voor gebruik.

Wat is TDS?

TDS staat voor Total Dissolved Solids (totale opgeloste stoffen). Zoals de naam al doet vermoeden, geeft het het aantal vaste stoffen aan dat opgelost is in een bepaalde hoeveelheid water, in ppm (delen per miljoen). TDS wordt berekend op basis van de elektrische geleidbaarheid [S/m]. Hoe hogere de elektrische geleidbaarheid, hoe hoger de TDS-waarde. Hier is een lijst met TDS-waarden van verschillende watertypen:

  • Zuiver water: 80-150
  • Kraanwater: 250-350
  • Grondwater: 500-1000
  • Zee water: rond 30000

Volgens de WHO (Wereldgezondheidsorganisatie) is de geschikte TDS van drinkwater onder de 300. Water met een TDS onder de 100 kan echter niet geconsumeerd worden, omdat het de essentiële mineralen mist. Water boven de 300 wordt beschouwd als te "hard", omdat het meer mineralen bevat dan nodig.

Normaal gebruiken we een TDS-pen om de TDS van water te meten. We kunnen de pen echter niet integreren met de Arduino. Er zijn wel speciale TDS-meters beschikbaar die geïntegreerd kunnen worden met de Arduino. Ik heb er echter voor gekozen dit project te doen zonder de TDS-pen.

IoT Waterkwaliteit Sensorsysteem - Arduino Gebaseerde Real-Time Monitoring

De schakeling

Arduino

  • Verbind 5V van de Arduino met één voedingsrail van het breadboard
  • Verbind de ground van de Arduino met de andere voedingsrail van het breadboard
  • Verbind één uiteinde van een 1k-ohm weerstand met de ground en het andere uiteinde met het breadboard. Verbind de analoge pin A0 op de Arduino met de weerstand. Verbind ten slotte een draad met de weerstand en een andere draad met 5V. Verbind de vrije uiteinden van deze draden met de krokodillenippen.
IoT Waterkwaliteit Sensorsysteem - Arduino Gebaseerde Real-Time Monitoring

LCD Display

  • Verbind VSS-pin met de ground rail
  • Verbind VDD-pin met 5V rail
  • Verbind V0 met de middelste pin van de potentiometer
  • Verbind de uiteinden van de potentiometer met 5V en ground
  • Verbind RS-pin met Arduino pin 7
  • Verbind R/W-pin met de ground rail
  • Verbind E-pin met Arduino pin 8
  • Verbind D4 met Arduino pin 10
  • Verbind D5 met Arduino pin 11
  • Verbind D6 met Arduino pin 12
  • Verbind D7 met Arduino pin 13
IoT Waterkwaliteit Sensorsysteem - Arduino Gebaseerde Real-Time Monitoring

HC-05 Bluetooth module

  • Verbind VCC-pin met 5V rail
  • Verbind GND-pin met ground
  • Verbind TX-pin met Arduino pin 3 (dient als RX)
  • Verbind RX-pin met Arduino pin 2 (dient als TX)
IoT Waterkwaliteit Sensorsysteem - Arduino Gebaseerde Real-Time Monitoring

RGB LED

  • Verbind de common cathode (langste pin) met ground
  • Verbind de rode pin (rechts van de cathode) met PWM pin 9 op Arduino via een 330-ohm weerstand
  • Verbind de groene pin (links van de cathode) met PWM pin 6 op Arduino via een 330-ohm weerstand
  • Verbind de blauwe pin (uiterst links) met PWM pin 5 op Arduino via een 330-ohm weerstand
IoT Waterkwaliteit Sensorsysteem - Arduino Gebaseerde Real-Time Monitoring

Afleiding voor het berekenen van de weerstand tussen vrije draden

We zullen de wet van Ohm gebruiken, die stelt dat de spanning [V] over een weerstand van weerstand R recht evenredig is met de stroom [I] die door de weerstand vloeit. Met andere woorden, V = IR

IoT Waterkwaliteit Sensorsysteem - Arduino Gebaseerde Real-Time Monitoring

Hoewel er een draad is verbonden tussen de 2 weerstanden [R₁ - 1000-ohm, en R₂ - tussen de vrije draden] naar de analoge pin A0 op de Arduino, kan de weerstand van die draad worden genegeerd, en dus kunnen we zeggen dat minimale stroom door de draad vloeit. R₁ en R₂ zijn dus in serie geschakeld.

We kunnen zeggen dat V₁ = IR₁ en V₂ = IR₂.

Daarom kunnen we zeggen V₂/V₁ = IR₂/IR₁ = R₂/R₁.

Echter, we kennen V₂ niet.

We weten dat in een serieschakeling van weerstanden, V₁ + V₂ = V, waar V = 5 Volt. Hieruit kunnen we afleiden V₂ = 5 - V₁.

Ten slotte, door de waarde die we voor V₂ vonden in V₂/V₁ = R₂/R₁ te substitueren, kunnen we een variabele buffer definiëren als (5 - V₁)/V₁, in plaats van V₂/V₁.

Ten slotte kunnen we zeggen dat R₂ = buffer * R₁.

De werking

We berekenen de weerstand van het te testen water, en daaruit verkrijgen we de specifieke weerstand (resistiviteit). We moeten rekening houden met de lengte en de dwarsdoorsnede van onze container.

R = r L/A  =>  r = R A/L

Uit de resistiviteit kunnen we de geleidbaarheid afleiden:

c = 1/r

Ten slotte verkrijgen we de TDS uit de geleidbaarheid:

TDS = c * 7000

Bibliotheken

U kunt deze bibliotheken downloaden en toevoegen aan uw Arduino IDE, of u gaat naar Tools → Manage Libraries → zoek naar de bibliotheek die u wilt downloaden.

IoT Waterkwaliteit Sensorsysteem - Arduino Gebaseerde Real-Time Monitoring

Code

Waterkwaliteitsmonitoring code
//bibliotheken includeren
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>

//voor bluetooth - maak een object BTserial aan, met RX pin op 3 en TX pin op 2
SoftwareSerial BTserial(3,2); // RX | TX

//declaratie van al onze variabelen
float reads;
int pin = A0;
float vOut = 0; //spanningsval over 2 punten
float vIn = 5;
float R1 = 1000;
float R2 = 0;
float buffer = 0;
float TDS;
float R = 0; //weerstand tussen de 2 draden
float r = 0; //resistiviteit
float L = 0.06; //afstand tussen de draden in m
double A = 0.000154; //dwarsdoorsnede van draad in m^2
float C = 0; //geleidbaarheid in S/m
float Cm = 0; //geleidbaarheid in mS/cm
int rPin = 9;
int bPin = 5;
int gPin = 6;
int rVal = 255;
int bVal = 255;
int gVal = 255;

//we gebruiken deze formule om de resistiviteit te krijgen na toepassing van Ohm's wet -> R = r L/A => r = R A/L

//lcd object aanmaken uit Liquid Crystal bibliotheek
LiquidCrystal lcd(7,8,10,11,12,13);

void setup() {
  //initialiseer BT serial en serial monitor
  Serial.begin(9600);
  BTserial.begin(9600);
  
  //initialiseer lcd
  lcd.begin(16, 2);
  
  //stel rgb led pins (allemaal PWM pins op Arduino) in als output
  pinMode(rPin,OUTPUT);
  pinMode(bPin,OUTPUT);
  pinMode(gPin,OUTPUT);
  pinMode(pin,INPUT);
  
  //Print vast bericht naar LCD
  lcd.print("Geleidbaarheid: ");
}

void loop() {
  reads = analogRead(A0);
  vOut = reads * 5 / 1023;
  Serial.println(reads);
  // Serial.println(vOut);
  buffer = (vIn / vOut) - 1;
  R2 = R1 * buffer;
  Serial.println(R2);
  delay(500);
  
  //spanning omzetten naar weerstand
  //Pas bovenstaande formule toe
  r = R2 * A / L; // R = r L/A
  
  //resistiviteit omzetten naar geleidbaarheid
  C = 1 / r;
  Cm = C * 10;
  
  //geleidbaarheid in mS/cm omzetten naar TDS
  TDS = Cm * 700;
  
  //Zet cursor van LCD naar volgende rij
  lcd.setCursor(0,1);
  lcd.println(C);
  
  //toon overeenkomende kleuren op rgb led volgens de analoge uitlezing
  if (reads < 600) {
    if (reads <= 300) {
      setColor(255, 0, 255);
    }
    if (reads > 200) {
      setColor(200, 0, 255);
    }
  } else {
    if (reads <= 900) {
      setColor(0, 0, 255);
    }
    if (reads > 700) {
      setColor(0, 255, 255);
    }
  }
  
  //stuur data naar Ardutooth app op mobiele telefoon via bluetooth
  BTserial.print(C);
  BTserial.print(",");
  BTserial.print(TDS);
  BTserial.print(";");
  delay(500);
}

void setColor(int red, int green, int blue) {
  analogWrite(rPin, 255 - red);
  analogWrite(gPin, 255 - green);
  analogWrite(bPin, 255 - blue);
}

Custom parts en behuizingen

Ik heb een oude proefbuis gebruikt die ik had om dit te maken. Ik prikde gaten aan beide uiteinden van de buis en steek draden door van beide kanten. Ten slotte, om de draden op hun plaats te houden, bevestigde ik wat kit.

IoT Waterkwaliteit Sensorsysteem - Arduino Gebaseerde Real-Time Monitoring

Schema's

IoT Waterkwaliteit Sensorsysteem - Arduino Gebaseerde Real-Time Monitoring

Productieproces

  1. Raspberry Pi & HDC2010: Complete I2C Temperatuur & Vochtigheid Sensor Setup Gids
  2. Raspberry Pi 3 verbinden met DHT11-sensor en data uploaden naar ThingsIo.ai-cloud
  3. Slimme Vuilnisbak: Een Cellulaire IoT-oplossing voor Geautomatiseerd Afvalbeheer
  4. Helium-gebaseerde Zon-Powered Luchtsensor: Ontwerp & Implementatiegids
  5. Phantom YoYo Hoog-gevoelige Watersensor Integreren met MCP3008 ADC op Raspberry Pi
  6. Nauwkeurige Temperatuur- & Vochtigheidsmonitoring met SHT15 op Windows 10 IoT Core
  7. Meerpositie-temperatuursensorsysteem voor slimme thuisintegratie
  8. Slimme Arduino-waterfles – realtime monitoring & herinneringen
  9. Slimme beweegactiverde waterpistool gebouwd met Arduino Nano
  10. Arduino Nano Weerstation: Sensor Kit & OLED Display
  11. Geavanceerde Koolstofgebaseerde NO₂-sensor Verbetert Binnenluchtkwaliteitsmonitoring