5. UPDATE (26.06.14)
Bevor ich mich jetzt auf in den Abiurlaub mache, wollte ich noch ein paar Arbeitsergebnisse präsentieren. Diese beschränken sich auf Arbeiten mit dem Arduino und dem dazugehörigen Code.
So sieht es aktuell auf meinem Schreibtisch aus:
um nur einige Ziele der Elektronik zu nennen:
-Lüftersteuerung inkl. RPM Messungen
-digitale LED Steuerungen mit WS2801
-Temperaturüberwachungen
-Helligkeitsüberwachungen
-Schalldruckpegelüberwachungen
Das ganze soll eine Lüftersteuerung werden, die nicht nur Lüfter steuert, sondern auch "versteht" was der Nutzer möchte. Wenn nun z.B. das Zimmer dunkel ist, sollten sämtliche LEDs nicht zu hell leuchten, damit es nicht stört. Oder wenn ich laut Musik höre, soll die Steuerung nicht auf die Lautstarke der Lüfter achten müssen...all sowas
Hier ist bis jetzt der Code (Anfangsstadium):
/*
Infinity ALPHA Steuerung
by Simon Krause
*/
#include "SPI.h"
#include "Adafruit_WS2801.h"
float watertemp; //Aktuelle Wassertememperatur
float pcbtemp; //Aktuelle Boardtemperatur
int fanport = 0; //RPM-Signal an PIN 2/Interrupt 0
int rpmcount = 0; //hilfvariable fuer RPM_messung
int rpm = 0; //aktueller Wert der RPM-Messung
int lrpm; //letzter Wert der RPM-Messung
int fanintervall = 5000; //RPM-Messung ueber 5 Sekunden
unsigned long lastmillis = 0;
int fadeamount = 2; //Fadeverlauf
int watertemppin = 5; //Pin des Temperaturfuehlers des Wasser
int pcbtemppin = 4; //Pin des Temperaturfuehlers des Wasser
int led = 6; //Anzahl der WS2801-LEDs
uint8_t dataPin = 8; //WS2801-Data an Pin 8
uint8_t clockPin = 9; //WS2801-Clock an Pin 9
Adafruit_WS2801 strip = Adafruit_WS2801(led, dataPin, clockPin);
void setup() {
Serial.begin(9600); //Serialoutput auf Port 9600 aktiviert
attachInterrupt(fanport, rpm_fan, FALLING);
strip.begin(); //WS2801 Inistialisierung
strip.show();
PowerOn(30);
}
void loop() {
watertemp = Thermister(analogRead(watertemppin)); //Temperatur ermitteln
pcbtemp = Thermister(analogRead(pcbtemppin)); //Temperatur ermitteln
if (millis() - lastmillis >= fanintervall){
detachInterrupt(fanport);
rpm = rpmcount * (30000 / fanintervall);
lrpm = rpm;
rpmcount = 0;
lastmillis = millis();
attachInterrupt(fanport, rpm_fan, FALLING);
}
if (Serial.available() > 0) { //Steuerung ueber Serial
int comand = Serial.read(); //Daten in comand speichern
if (comand == 49) {
PowerOn(30);
}
if (comand == 50) {
Serial.println(watertemp);
}
}
}
void PowerOn(int fadespeed) {
float brightness = 0;
float i = 0;
unsigned long time;
boolean fadeup = true;
time = millis();
while(brightness < 255 && fadeup == true) {
brightness = pow(i,fadeamount)/(pow(i,fadeamount)+pow((1-i),fadeamount))*255;
for (int i=0; i < led; i++) {
strip.setPixelColor(i, brightness, brightness, brightness);
}
strip.show();
if ((millis()-time)>fadespeed) {
i = i + 0.05;
time = millis();
}
}
if(brightness == 255) {
fadeup = false;
i = 0;
time = millis();
}
while(brightness > 0 && fadeup == false) {
brightness = 255 - (pow(i,fadeamount)/(pow(i,fadeamount)+pow((1-i),fadeamount))*255);
for (int i=0; i < led; i++) {
strip.setPixelColor(i, brightness, brightness, brightness);
}
strip.show();
if ((millis()-time)>fadespeed) {
i = i + 0.05;
time = millis();
}
}
}
double Thermister(float RawADC) { //Funktion zur Temperaturbestimmung
double Temp;
Temp = log(((10240000/RawADC) - 10000));
Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
Temp = Temp - 273.15; //Wert in Celsius konvertieren
return Temp;
}
void rpm_fan(){
rpmcount++;
}
Ich wünsche allen Modern viel Spaß auf der MAKE und hoffe, hier im Forum das ein oder andere Bild/Video zu finden
Bis dann.
MfG
Semme