#include #include #include #include #include // OLED #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // pH Sensor const int pHSensorPin = A0; // DS18B20 Sensor #define ONE_WIRE_BUS A1 // PIN DEL ARDUINO USADO PARA TEM OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); unsigned long lastNameMillis = 0; const unsigned long intervalName = 30000; // 30 segundos const unsigned long showNameDuration = 7000; // 3 segundos bool showingName = false; float readVoltage() { const int samples = 10; float totalVoltage = 0; for (int i = 0; i < samples; i++) { int val = analogRead(pHSensorPin); totalVoltage += val * (5.0 / 1023.0); delay(10); } return totalVoltage / samples; } float voltageToPH(float voltage) { return -2.98823 * voltage * voltage + 4.91552 * voltage + 6.5; } void setup() { Serial.begin(9600); // Inicializa OLED if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("No se detecta pantalla OLED")); while (true); } // Inicializa sensor DS18B20 sensors.begin(); display.clearDisplay(); display.setTextSize(1); display.setTextColor(SSD1306_WHITE); display.setCursor(0, 0); display.println("Iniciando..."); display.display(); delay(1000); lastNameMillis = millis(); } void loop() { unsigned long currentMillis = millis(); if (showingName) { display.clearDisplay(); display.setTextSize(2); display.setCursor(0, 10); display.print("GRUPO:"); display.setTextSize(1); display.setCursor(0, 35); display.print(" CULTIJARDIN"); display.setCursor(0, 50); display.print(" HIDROPONICO"); display.display(); if (currentMillis - lastNameMillis >= showNameDuration) { showingName = false; lastNameMillis = currentMillis; } } else { // Leer pH float voltage = readVoltage(); float pH = voltageToPH(voltage); // Leer temperatura sensors.requestTemperatures(); float tempC = sensors.getTempCByIndex(0); // Mostrar en Serial Serial.print("Voltaje: "); Serial.print(voltage, 3); Serial.print(" V | pH: "); Serial.print(pH, 2); Serial.print(" | Temp: "); Serial.print(tempC); Serial.println(" °C"); // Mostrar en pantalla OLED display.clearDisplay(); display.setTextSize(1); display.setCursor(5, 0); display.println("Colegio La Esperanza"); display.setTextSize(2); display.setCursor(0, 20); display.print("Ph:"); display.print(pH, 1); display.setTextSize(2); display.setCursor(0, 43); display.print("Temp:"); display.print(tempC, 1); display.print("C"); display.display(); if (currentMillis - lastNameMillis >= intervalName) { showingName = true; lastNameMillis = currentMillis; } } delay(500); }