commit 9e538d6fc765ddb51e58b95feb327074f0a1e9e1 Author: Kai Lauterbach Date: Tue Apr 11 09:43:38 2023 +0200 Initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..43de912 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +Arduino Nano mit AtMega328p (old bootloader) einstellen in Arduino IDE einstellen. + + +D9 (Pin12) wird mit dem PWM-Eingang der PWM Platine verbunden, +A4 SDA vom BMP280 +D1 SCK vom BMP280 + diff --git a/firmware/.DS_Store b/firmware/.DS_Store new file mode 100644 index 0000000..eff5b43 Binary files /dev/null and b/firmware/.DS_Store differ diff --git a/firmware/firmware.ino b/firmware/firmware.ino new file mode 100644 index 0000000..1384a84 --- /dev/null +++ b/firmware/firmware.ino @@ -0,0 +1,70 @@ + +#define FAN_PIN 12 +#define L_LED_PIN 13 + +#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 +#define FAN_OFF_MAX_TEMP 24 + +#define FAN_ON_STATE HIGH +#define FAN_OFF_STATE LOW + +#define BMP280_CHECK_INTERVAL_MS 60000 // every 60000 = 60 seconds + +float bmp280_temp = -99.9; +uint32_t bmp280_lastcheck_millis = BMP280_CHECK_INTERVAL_MS; + +uint8_t fan_state = LOW; + +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)); + + analogWrite(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..8af26f8 --- /dev/null +++ b/firmware/sensor_bmp280.ino @@ -0,0 +1,38 @@ + +#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; +}