From 5c26492077d3b1b646af11081f3d8da0623ada50 Mon Sep 17 00:00:00 2001 From: Kai Lauterbach Date: Thu, 13 Apr 2023 16:16:34 +0200 Subject: [PATCH] Added arduino IDE firmware files --- firmware/firmware.ino | 80 ++++++++++++++++++++++++++++++++++++++ firmware/sensor_bmp280.ino | 39 +++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 firmware/firmware.ino create mode 100644 firmware/sensor_bmp280.ino diff --git a/firmware/firmware.ino b/firmware/firmware.ino new file mode 100644 index 0000000..f6039f4 --- /dev/null +++ b/firmware/firmware.ino @@ -0,0 +1,80 @@ + +#define FAN_PIN 9 // D9 +#define L_LED_PIN 13 // D13 + +#define BMP280_I2C_ADDRESS 0x76 // BMP280 conneciton: D1 = SCL; D2 = SDA + +// minimum value to start both fan's is 110 +// without queeking noise is 255 +#define FAN_ON_TEMP 26.0 +#define FAN_OFF_MAX_TEMP 24.5 + +#define FAN_ON_STATE HIGH +#define FAN_OFF_STATE LOW + +#define BMP280_CHECK_INTERVAL_MS 2000 // every 60000 = 60 seconds + +float bmp280_temp = -99.9; +uint32_t bmp280_lastcheck_millis = BMP280_CHECK_INTERVAL_MS; + +uint8_t fan_state = LOW; + +#line 22 "/Users/klaute/Documents/dev/tank_cooler/firmware/firmware.ino" +void setup(); +#line 41 "/Users/klaute/Documents/dev/tank_cooler/firmware/firmware.ino" +void loop(); +#line 10 "/Users/klaute/Documents/dev/tank_cooler/firmware/sensor_bmp280.ino" +bool sensor_bmp280_begin(uint8_t addr); +#line 34 "/Users/klaute/Documents/dev/tank_cooler/firmware/sensor_bmp280.ino" +float sensor_bmp280_temperature(); +#line 22 "/Users/klaute/Documents/dev/tank_cooler/firmware/firmware.ino" +void setup() +{ + // put your setup code here, to run once: + + // setup serial + Serial.begin(115200); + Serial.println(); + delay(1000); + + // setup BMP280 + Serial.println("Sensor BMP280 init status: " + String(sensor_bmp280_begin(BMP280_I2C_ADDRESS))); + bmp280_temp = sensor_bmp280_temperature(); + + // setup FAN Pin + pinMode(FAN_PIN, OUTPUT); + + pinMode(L_LED_PIN, OUTPUT); +} + +void loop() +{ + // put your main code here, to run repeatedly: + + if ((bmp280_lastcheck_millis + BMP280_CHECK_INTERVAL_MS) <= millis()) + { + bmp280_temp = sensor_bmp280_temperature(); + Serial.println("Temperature: " + String(bmp280_temp) + "°C"); + digitalWrite(L_LED_PIN, HIGH); + + if (fan_state > 0 && bmp280_temp <= FAN_OFF_MAX_TEMP) + { + fan_state = FAN_OFF_STATE; // off + } + + if (bmp280_temp >= FAN_ON_TEMP) + { + fan_state = FAN_ON_STATE; + } + + Serial.println("FAN state: " + String(fan_state)); + + digitalWrite(FAN_PIN, fan_state); + + digitalWrite(L_LED_PIN, LOW); + + bmp280_lastcheck_millis = millis(); + } + +} + diff --git a/firmware/sensor_bmp280.ino b/firmware/sensor_bmp280.ino new file mode 100644 index 0000000..7d70d78 --- /dev/null +++ b/firmware/sensor_bmp280.ino @@ -0,0 +1,39 @@ + +#include // Install from library manager - sensor board info: https://www.bastelgarage.ch/bmp280-temperatur-luftdruck-sensor + +Adafruit_BMP280 _sensor_bmp280; +Adafruit_Sensor *_sensor_bmp280_temp = _sensor_bmp280.getTemperatureSensor(); +Adafruit_Sensor *_sensor_bmp280_pressure = _sensor_bmp280.getPressureSensor(); + +#define BPM280_TEMP_FACTOR 1.0 + +bool sensor_bmp280_begin(uint8_t addr) { + bool status = _sensor_bmp280.begin(addr); + + if (status) { + Serial.println("BMP280 Connected"); + + _sensor_bmp280.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */ + Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */ + Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */ + Adafruit_BMP280::FILTER_X16, /* Filtering. */ + Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */ + + } else { + Serial.println("Could not find a valid BMP280 sensor, check wiring or try a different address!"); + Serial.println("SensorID was: " + String(_sensor_bmp280.sensorID())); + Serial.println(" ID of 0xFF probably means a bad address, a BMP180 or BMP085"); + Serial.println(" ID of 0x56-0x58 represents a BMP280,"); + Serial.println(" ID of 0x60 represents a BME280,"); + Serial.println(" ID of 0x61 represents a BME680."); + } + + return status; +} + +float sensor_bmp280_temperature() { + sensors_event_t temp_event, pressure_event; + _sensor_bmp280_temp->getEvent(&temp_event); + return temp_event.temperature * BPM280_TEMP_FACTOR; +} +