Initial commit
This commit is contained in:
commit
9e538d6fc7
4 changed files with 115 additions and 0 deletions
7
README.md
Normal file
7
README.md
Normal file
|
@ -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
|
||||
|
BIN
firmware/.DS_Store
vendored
Normal file
BIN
firmware/.DS_Store
vendored
Normal file
Binary file not shown.
70
firmware/firmware.ino
Normal file
70
firmware/firmware.ino
Normal file
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
38
firmware/sensor_bmp280.ino
Normal file
38
firmware/sensor_bmp280.ino
Normal file
|
@ -0,0 +1,38 @@
|
|||
|
||||
#include <Adafruit_BMP280.h> // 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;
|
||||
}
|
Loading…
Reference in a new issue