Zitat:
Zitat von Panther8x8
Arduino in minimaler Ausführung und einen guten Modellbauservo mit Metallgetriebe sollte als Aktuator eigentlich ausreichen, oder?
|
Das hört sich für mich nach der besten Lösung an. Pneumatik hätte auch was, vor allem massig rießige Zusatzkomponenten
Das Problem mit dem Stromverbrauch ließe sich aber denke ich ganz gut mittels der Low-Power-library lösen:
https://github.com/rocketscream/Low-Power Diese schickt den Arduino schlafen, so dass dieser nur noch Strom im Micro-Ampere-Bereich verbraucht. siehe z.B. hier:
https://youtu.be/XUY0-doBx1U?t=209
Bei jedem Tastendruck könnte dann ein externer Interrupt ausgelöst werden, der den Arduino aufweckt und ein Code ausgeführt wird. So würde sich bei jedem Interruptaufruf ein Statusbit (RWS An/Aus) togglen und somit der restliche Code (Servos steuern,
Relais schalten) ausführen lassen.Habe selbst noch nichts mit dieser Library gemacht, aber hört sich für mich gut an, das könnte man mal testen.
Könnte evtl. so aussehen (hab ich jz nur schnell zusammenkopiert/getippt; keine Gewährleistung auf Logik-/Syntaxfehler):
Code:
//Biliotheken einbinden
#include "LowPower.h" //https://github.com/rocketscream/Low-Power
#include //Arduino-Library
//Pins deklarieren
const int wakeUpPin = 2; //Pin für Taster
const int rwsPin = 3; //Pin für Relais mit Warnleuchten
const int servoLinksPin = 4; //Steuerpin für linken Servo
const int servoRechtsPin = 5; //Steuerpin für rechten Servo
//Variablen definieren
const int servoValAus = 0; //Servo-Position im ausgeschalteteten Zustand
const int servoValEin = 90; //Servo-Position im eingeschalteteten Zustand
boolean state = 0; //Status-Bit (Merker An/Aus)
//Objekte erstellen
Servo servoLinks; //Servo-Objekte erstellen
Servo servoRechts;
void setup()
{
pinMode(wakeUpPin, INPUT_PULLUP); //Pin mit Taster als Input deklarieren, Nutzung des internen PullUps
servoLinks.attach(servoLinksPin); //Hängt den Servo an Pin "servoLinksPin" ans Servo-Objekt
servoRechts.attach(servoRechtsPin);
}
void loop()
{
attachInterrupt(0, wakeUp, LOW); //Interrupt wird bei LOW-Signal vom Taster getriggert
state = !state;
if(state=1){
servoLinks.write(servoValEin); //Servo links "ausfahren"
servoRechts.write(servoValEin); //Servo rechts "ausfahren"
digitalWrite(rwsPin, HIGH); //RWS o.ä. einschalten
}
else{
digitalWrite(rwsPin, LOW); //RWS o.ä. ausschalten
servoLinks.write(servoValAus); //Servo links "einfahren"
servoRechts.write(servoValAus); //Servo rechts "einfahren"
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF); //Power-Down-Modus aktivieren (ADC und BOD (Brown Out Detection) deaktiviert)
}
}