Hallo zusammen,
Ich habe mein erstes kleines Arduino Projekt "gebastelt". Ich möchte für meinen 3D Drucker das Gehäuse belüften und es somit immer auf ca. 55° per Lüfter kühlen. Ein Relais soll dabei bei +55° umschalten und den Lüfter aktivieren.
Dazu habe ich noch eine kleine Grafik und einen Balken mit eingefügt, damit es schöner aussieht.
Da dies mein erstes Arduino Programm ist, entschuldige ich mich für jegliche Fehler im Programm. Ich lerne noch :-).
Bis hierhin klappt alles ganz gut, jedoch beim Einschalten vom Arduino ist das Relais ganz kurz eingeschaltet, bis zum:
-digitalWrite(fan,LOW);
nach
-display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
Das ist nicht so schlimm. Der Lüfter beginnt nicht einmal zu drehen, aber ich hätte es gerne, dass das Relais komplett aus bleibt, auch während des "Hochfahrens".
LG
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DHT.h"
#define DHTPIN 2 // what pin we're connected to
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#if (SSD1306_LCDHEIGHT != 64) //OLED128x64
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
//int p3 = (45); //Testwert
int maxHum = 60;
int maxTemp = 25;
int fan = 4;
void setup() {
pinMode(fan, OUTPUT);
dht.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64)
//Serial.begin(9600);
digitalWrite(fan,LOW);
display.clearDisplay();
display.drawRect(0, 0, 128, 16, WHITE);
display.setTextSize(0);
display.setTextColor(WHITE);
display.setCursor(30, 5);
display.println("Hochfahren");
display.display();
delay(500);
display.setCursor(95, 5);
display.println(".");
display.display();
delay(500);
display.setCursor(100, 5);
display.println(".");
display.display();
delay(500);
display.setCursor(105, 5);
display.println(".");
display.display();
delay(500);
display.clearDisplay();
display.drawRect(0, 0, 128, 16, WHITE);
display.setTextSize(0);
display.setTextColor(WHITE);
display.setCursor(30, 5);
display.println("Hochfahren");
display.display();
delay(500);
display.setCursor(95, 5);
display.println(".");
display.display();
delay(500);
display.setCursor(100, 5);
display.println(".");
display.display();
delay(500);
display.setCursor(105, 5);
display.println(".");
display.display();
delay(500);
display.clearDisplay();
}
void loop() {
delay(2000);
display.clearDisplay();
display.drawRect(0, 0, 128, 16, WHITE);
float t = dht.readTemperature();
float h = dht.readHumidity();
display.setTextSize(0);
display.setTextColor(WHITE);
display.setCursor(15,5);
display.print("Temperatur");
//display.println(t); // neu
//Temperaturanzeige
display.drawRoundRect(0, 17, 63, 16, 3, WHITE);
display.drawRoundRect(65, 17, 63, 16, 3, WHITE);
display.setCursor(12 ,21);
display.print(t);
display.println(" C");
display.setCursor(75 ,21);
display.print(h);
display.println(" %");
//MIN/MAX Anzeige
display.setCursor(60 ,41);
display.println("MIN");
display.setCursor(99 ,41);
display.println("MAX");
// Balkenvertikalstriche
display.drawLine(79, 50, 79, 40, WHITE);
display.drawLine(96, 50, 96, 40, WHITE);
// LÜFTERSCHALTUNG
if (t > maxTemp) {
// Anweisungsblock für wahr
digitalWrite(fan,HIGH);
} else {
// Anweisungsblock für falsch
digitalWrite(fan,LOW);
}
// PROZENTBALKEN
drawPercentbar( 0, 50, 128, 14, t*1.4);
display.display();
delay(100);
}
void drawPercentbar(int x,int y, int width,int height, int progress)
{
progress = progress > 100 ? 100 : progress;
progress = progress < 0 ? 0 :progress;
float bar = ((float)(width-4) / 100) * progress;
display.drawRect(x, y, width, height, WHITE);
display.fillRect(x+2, y+2, bar, height-4, WHITE);
}