#include <SPI.h>
#include <LoRa.h>
const int pHSensorPin = A0; // Analog pin connected to the pH sensor
const int turbiditySensorPin = A2;
// const int turbiditySensorPin = A1; // Analog pin connected to the turbidity sensor
const int trigPin = 2; // Ultrasonic sensor's trig pin connected to digital pin 2
const int echoPin = 3; // Ultrasonic sensor's echo pin connected to digital pin 3
// LoRa module pins
const int csPin = 10;
const int resetPin = 9;
const int irqPin = 2;
void setup() {
Serial.begin(9600); // Initialize serial communication
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Initialize LoRa module
LoRa.setPins(csPin, resetPin, irqPin);
if (!LoRa.begin(915E6)) { // Initialize LoRa at 915 MHz
Serial.println("Starting LoRa failed!");
while (1);
}
}
void loop() {
int sensorValue_pH = analogRead(pHSensorPin); // Read pH sensor analog value
float voltage_pH = sensorValue_pH * (5.0 / 1023.0); // Convert analog value to voltage for pH
int sensorValue_turbidity = analogRead(turbiditySensorPin); // Read turbidity sensor analog value
// Ultrasonic sensor to determine water level
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration / 2) / 29.1;
// Check turbidity value, pH value, and water level to determine water condition
String waterCondition;
String pHCondition;
String waterLevel;
if (sensorValue_turbidity > 500 || voltage_pH < 1.8 || voltage_pH > 3.0) {
waterCondition = "Not clean";
if (voltage_pH < 1.8) {
pHCondition = "Water pH is acidic";
} else if (voltage_pH > 3.0) {
pHCondition = "Water pH is alkaline";
} else {
pHCondition = "Water pH is neutral";
}
} else {
waterCondition = "Clean";
pHCondition = "Water pH is neutral";
}
if (distance >= 30) {
waterLevel = "Full";
} else if (distance < 30 && distance > 10) {
waterLevel = "Normal";
} else {
waterLevel = "Too low";
}
// Prepare data to send via LoRa
String data = "pH Voltage: " + String(voltage_pH) + " V, " +
"Turbidity: " + String(sensorValue_turbidity) + ", " +
"Water Level: " + waterLevel + ", " +
"Condition: " + waterCondition + ", " +
pHCondition;
// Send data via LoRa
LoRa.beginPacket();
LoRa.print(data);
LoRa.endPacket();
// Print data to serial monitor
Serial.println(data);
delay(5000); // Delay for readability, adjust as needed
}