#include #include #include
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define TRIG_PIN 5 #define ECHO_PIN 18 #define BUZZER_PIN 19 #define RELAY_PIN 4
const float TANK_HEIGHT = 100.0; // Globina cisterne v cm
void setup() { pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); pinMode(BUZZER_PIN, OUTPUT); pinMode(RELAY_PIN, OUTPUT); digitalWrite(RELAY_PIN, HIGH); // Rele izklopljen (LOW aktivira rele)
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { for (;;); } display.clearDisplay(); display.setTextSize(1); display.setTextColor(SSD1306_WHITE); display.setCursor(0, 0); display.println("Merilec vode"); display.display(); delay(2000); }
void loop() { // Merjenje razdalje digitalWrite(TRIG_PIN, LOW); delayMicroseconds(2); digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH); float distance = duration * 0.034 / 2; // Razdalja v cm float waterLevel = TANK_HEIGHT - distance; // Nivo vode float percentage = (waterLevel / TANK_HEIGHT) * 100; // Procent
// Prikaz na OLED display.clearDisplay(); display.setCursor(0, 0); display.print("Nivo vode: "); display.print(percentage); display.println("%"); display.display();
// Logika za buzzer in rele if (percentage < 20) { tone(BUZZER_PIN, 1000, 200); // Zvok digitalWrite(RELAY_PIN, LOW); // Vklopi črpalko } else if (percentage > 80) { digitalWrite(RELAY_PIN, HIGH); // Izklopi črpalko }
delay(1000); // Osveževanje vsako sekundo }