automatiseren rolgordijnen pt2

Automatische rolgordijnen pt2

bedrading rolgordijn besturing

Inleiding

In het vorige bericht heb ik het al aangetipt. Ik ben bezig om mijn rolgordijnen te automatiseren.

Op dit moment ben ik al weer een stukje verder hiermee. Het is niet zo maar een projectje wat ik ff doe. Hier moet ik ook wel even bij na denken.

Het project tot nu toe

Ondanks alle bedrading, koppelingen en dergelijke werkt het redelijk naar behoren.

bedrading rolgordijn besturing
Bedrading besturing rolgordijnen

Zoals te zien is, is het één grote bende wat betreft de bedrading.

Maar het werkt wel… Ik moet alleen alles nog een keer fatsoeneren.

Het werkt nu als volgt:

Door een wipschakelaar wordt gekozen voor welk rolgordijn er moet worden opgewikkeld dan wel moet worden afgewikkeld.

Als dit is gedaan, kan met de up/down knoppen het rolgordijn naar boven / beneden worden bewogen.

Volgende stap

stoppers

Een volgende stap is om stoppers er op te maken, zodat niet elke keer het rolgordijn om zijn buis heen gaat klapperen.

De bedoeling is, dat het openen en dichtgaan van de rolgordijnen op de volgende manieren kan gebeuren

  1. via de knoppen
  2. automatisch
  3. via de telefoon

voor de automatische stand en via de telefoon zijn de stoppers nodig. Als namelijk het rolgordijn voor 3/4 omhoog is gehaald, dan moet de automatische stand wel weten wanneer hij moet stoppen. Hiervoor moet ik dus nog aan het puzzelen.

Knop voor automatisch

De knop voor automatisch heb ik er ook nog niet in zitten. Dit moet ook nog allemaal worden uitgezocht.

Schema en code

Het schema staat hieronder. Ik maak gebruik van relays om de 12v (voor de aansturing van de motoren) te schakelen alsmede een relay wat wordt gebruikt om tussen de motoren te kiezen.

 

connections ULN2003
connections ULN2003 board

Kiezen tussen motoren

Dit gebeurt door middel van een relay. Deze schakelt de werkspanning van het printje met de sturing ULN2003 aan of uit. Hierdoor wordt één bepaalde motor gestuurd.

Door op de rocker-switch te klikken, wordt er gekozen tussen de verschillende motoren die worden aangestuurd. Er wordt een relay bekrachtigd en zo wordt er een brug gevormt op het printje. Dit is  de on/off jumper welke wordt gemaakt of verbroken. Zo bepaal ik welke motor moet lopen

 

het schema

scheme rollshades
scheme rollshades

Voor een grotere view van het schema klik het rechts aan en kies voor Afbeelding bekijken.

De code

Dit is nog een ander verhaal. De code is redelijk te doen en ik heb geen moeilijke dingen gebruikt.

Het is ook niet de netste code, maar dat mogen jullie zelf gaan regelen.

 

int bluePinMotor1 = 2; //IN1 on the ULN2003 Board, BLUE end of the Blue/Yellow motor coil
int pinkPinMotor1 = 3; //IN2 on the ULN2003 Board, PINK end of the Pink/Orange motor coil
int yellowPinMotor1 = 4; //IN3 on the ULN2003 Board, YELLOW end of the Blue/Yellow motor coil
int orangePinMotor1 = 5; //IN4 on the ULN2003 Board, ORANGE end of the Pink/Orange motor coil

//going up
//Keeps track of the current step.
//We'll use a zero based index.
int rolShadeSwitchPin = 6; //switch between rolShades
int powerRelayPin = 7; //switch 12v power on/off
int currentStep = 0;
int upPin = 8; //pin for rolShade up
int downPin = 9; //pin for rolShade down
int motorRelayPin = 11; //activate motor from chosen shade


void setup() {
// put your setup code here, to run once:
Serial.begin(9600);

pinMode(bluePinMotor1, OUTPUT);
pinMode(pinkPinMotor1, OUTPUT);
pinMode(yellowPinMotor1, OUTPUT);
pinMode(orangePinMotor1, OUTPUT);

digitalWrite(bluePinMotor1, LOW);
digitalWrite(pinkPinMotor1, LOW);
digitalWrite(yellowPinMotor1, LOW);
digitalWrite(orangePinMotor1, LOW);

pinMode(upPin, INPUT_PULLUP);
pinMode(downPin, INPUT_PULLUP);
pinMode(rolShadeSwitchPin, INPUT_PULLUP);

pinMode(powerRelayPin, OUTPUT);
pinMode(motorRelayPin, OUTPUT);
}

void loop() {

//Comment out the Serial prints to speed things up
//Serial.print("Step: ");
//Serial.println(currentStep);




//Serial.println(digitalRead(rolShadeSwitchPin));
if (digitalRead(rolShadeSwitchPin) == LOW) {
// Serial.println("motorRelayPin, LOW");
digitalWrite(motorRelayPin, LOW);
}

else if (digitalRead(rolShadeSwitchPin) == HIGH) {
// Serial.println("motorRelayPin, HIGH");
digitalWrite(motorRelayPin, HIGH);
}


if (digitalRead(upPin) == LOW) {
currentStep = (--currentStep >= 0) ? currentStep : 3;
digitalWrite(powerRelayPin, LOW);
// Serial.println(digitalRead(rolShadeSwitchPin));

}
else if (digitalRead(downPin) == LOW) {
currentStep = (++currentStep < 4) ? currentStep : 0;
digitalWrite(powerRelayPin, LOW);
// Serial.println(digitalRead(rolShadeSwitchPin));
}
else {
digitalWrite(powerRelayPin, HIGH);
// Serial.println(digitalRead(rolShadeSwitchPin));
}


switch (currentStep) {
case 0:
digitalWrite(bluePinMotor1, HIGH);
digitalWrite(pinkPinMotor1, HIGH);
digitalWrite(yellowPinMotor1, LOW);
digitalWrite(orangePinMotor1, LOW);
break;
case 1:
digitalWrite(bluePinMotor1, LOW);
digitalWrite(pinkPinMotor1, HIGH);
digitalWrite(yellowPinMotor1, HIGH);
digitalWrite(orangePinMotor1, LOW);
break;
case 2:
digitalWrite(bluePinMotor1, LOW);
digitalWrite(pinkPinMotor1, LOW);
digitalWrite(yellowPinMotor1, HIGH);
digitalWrite(orangePinMotor1, HIGH);
break;
case 3:
digitalWrite(bluePinMotor1, HIGH);
digitalWrite(pinkPinMotor1, LOW);
digitalWrite(yellowPinMotor1, LOW);
digitalWrite(orangePinMotor1, HIGH);
break;
}


//CCW
// currentStep = (--currentStep >= 0) ? currentStep : 3;

//CW
//currentStep = (++currentStep < 4) ? currentStep : 0;

//2000 microseconds, or 2 milliseconds seems to be
//about the shortest delay that is usable. Anything
//lower and the motor starts to freeze.
//delayMicroseconds(2250);
delay(2);
}

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.