JalousieController
From Digipool-Wiki
Stückliste
- Arduino Uno
- Relay-Shield
- Minitastatur
- 10k Wiederstand
- Flachbandkabel
- Steckernetzteil
Bemerkung
Da die Minitastatur ab Werk auf allen drei Tasten dasselbe Zeichen ausgab und sich damit für meine Zwecke nicht direkt einsetzen ließ, habe ich kurzerhand ein Flachbandkabel direkt an die Tastenkontakte gelötet. Weil die Tasten dabei weiterhin mit der ursprünglichen Platine verbunden blieben, war ein einfaches Auslesen als digitale Taster leider nicht möglich. Als Workaround habe ich die Leitungen mit 5 V verbunden und die Signale stattdessen über den Analogeingang ausgewertet – eine elegante Lösung für eine etwas widerspenstige Hardware.
Arduino-Code
// JalousieControlle
// Olaf Val
int threshold = 650;
bool state1, state2, state3;
const int relayPin1 = 5; // Relay 3 — on/off
const int relayPin2 = 4; // Relay 4 - direction LOW=Up, HIGH=Down
void setup() {
pinMode(relayPin1, OUTPUT);
pinMode(relayPin2, OUTPUT);
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}
void loop() {
// read the input on analog pin 0 - 2:
int sensorValue1 = analogRead(A0);
int sensorValue2 = analogRead(A1);
int sensorValue3 = analogRead(A2);
// print out the value you read:
Serial.print(sensorValue1);
Serial.print(" ");
Serial.print(sensorValue2);
Serial.print(" ");
Serial.println(sensorValue3);
if (sensorValue1 > threshold) {
state1 = true;
} else {
state1 = false;
}
if (sensorValue2 > threshold) {
state2 = true;
} else {
state2 = false;
}
if (sensorValue3 > threshold) {
state3 = true;
} else {
state3 = false;
}
Serial.print(state1);
Serial.print(" ");
Serial.print(state2);
Serial.print(" ");
Serial.println(state3);
if (state1) {
goUp();
}
if ((!state1) && (!state2) && (state3)) {
goDown();
}
if ((!state1) && (state2) && (!state3)) {
goCenter();
}
delay(100); // delay in between reads for stability
}
void goUp() {
Serial.println("goUp");
digitalWrite(relayPin2, LOW);
delay(100);
digitalWrite(relayPin1, HIGH);
delay(3000);
digitalWrite(relayPin1, LOW);
}
void goDown() {
Serial.println("goDown");
digitalWrite(relayPin2, HIGH);
delay(100);
digitalWrite(relayPin1, HIGH);
delay(3000);
digitalWrite(relayPin1, LOW);
digitalWrite(relayPin2, LOW);
}
void goCenter() {
Serial.println("goCenter Down");
digitalWrite(relayPin2, HIGH);
delay(100);
digitalWrite(relayPin1, HIGH);
delay(3000);
digitalWrite(relayPin1, LOW);
digitalWrite(relayPin2, LOW);
delay(40000); // 45 000
Serial.println("goCenter Stop");
digitalWrite(relayPin2, LOW);
delay(100);
digitalWrite(relayPin1, HIGH);
delay(1000);
digitalWrite(relayPin1, LOW);
delay(1000);
Serial.println("goCenter Angle the slats");
digitalWrite(relayPin2, LOW);
delay(100);
digitalWrite(relayPin1, HIGH);
delay(400);
digitalWrite(relayPin1, LOW);
}