Elektrische rolgordijnen is een project om je rolgordijnen te automatiseren / makkelijker open en dicht te boen.

Heb je rolgordijnen maar het kettinkje is te kort of hangt op een plek waar je niet bij kan misschien is dit dan wel een handig project voor jou.

voor dit project heb ik 360 graden servo’s gebruikt deze werken anders als de 180 graden variant.

de 180 graden variant is in graden gestuurd en maakt dus alleen een verstelling van 1 graden als je een 1 stuurt, waar de 360 graden variant in snelheid word gestuurd en blijft draaien als je alleen een 1 stuurt en geen 0.

De code maakt gebruik van timers om te bepalen hoelang de duur is om omhoog te gaan en omlaag te gaan in combinatie met de ingestelde snelheid. Het beste is om een snelheid in te stellen die je wild gebruiken en dan timen hoelang het duurt om omhoog te gaan en naar beneden te gaan en dan die tijd in stelen bij het kopje tijds duur omhoog / omlaag denk er daar bij wel aan dat de tijd in ms is in plaats van sec.

bron :

Click here to display content from www.makerguides.com.

hier een aan sluit schema als je de code hier onder volgt.

De kabels met loos zijn voor uitbreiding met bijvoorbeeld een esp 8266.

Hou er rekening mee dat het kan wezen dat je een paar parameters moet wijzigen om dat net iets ander servo’s, buten, lcd scherm hebt of misschien een andere Arduino hebt dit project is gemaakt met een Arduino uno

In het voorbeeld hier onder staan bij de servo’s de waardes 80 / 90 / 100 het kan wezen dat jij de waardes tussen 1 en 2 moet gebruiken waar bij 1,5 stop is

code :

#include <Wire.h>
#include <Servo.h>  //biblioteek voor de servo motor sturing 
#include <LiquidCrystal_I2C.h>  // biblioteek voor een lcd scherm op de i2c bus (optie)
LiquidCrystal_I2C lcd(0x3f, 20, 4); //is de i2c id van het lcd scherm die ik gebruik 




// de servo's die ik gebruik zijn 360 grade servo's en werken anders dan de 180 graden servo's 
// de 180 graden servo's met positie bepaling de 360 graden servo's werken met een snelheid's sturing (is het singal naar de servo motor)waar bij 1.5 is stilstand 1.5> is rechts om en 1.5< is lings om met een bereik tussen 1ms tot 2ms
// bron : https://www.makerguides.com/how-to-control-a-360-degree-servo-motor-with-arduino/

Servo Servo1;  //servo motor 1 
Servo Servo2;  //servo motor 2
Servo Servo3;  //servo motor 3

int lichtSensor = 6; //sluit de licht sensor aan op pin 6 of een ander in gang van de digitale i/o met dit logo (~)
int lichtSensorStatus;
const int automodus = 7; // is een optie en is nog niet klaar 
const int naarboven = 5; // is het naar boven sturen van de rolgordijnen        (voor nu alles)
const int naarbeneden = 4;  // is het naar beneden sturen van de rolgordijnen

int automodusstatus = 0;
int naarbovenstatus = 0;
int naarbenedenstatus = 0;
bool statusboven = false;    // hier gaan we de stattus in opstaan
bool statusbeneden = false;  // hier gaan we de stattus in opstaan


void setup() {
// put your setup code here, to run once:
  //servomotor 
    Servo1.attach(9);  //om de servo motoren te laaten werken moeten we ze kopellen aan een pin (dat is de fizieke pin op je arduino waar je de servo motor aan gekopelt hept)
    Servo2.attach(10); // in mijn geval 9,10 en 11 
    Servo3.attach(11);

   // Servo1.write(0); // om de motor stop te zetten 
   // Servo2.write(0);
   // Servo3.write(0);
   // delay(1000);
   // Servo1.write(180); // om de motor stop te zetten 
    //Servo2.write(180);
    //Servo3.write(180);
  //lichtsensor
    pinMode(lichtSensor, INPUT); // hier geeven we aan dat de pin die we hebben toegewezen aan onze lichtsensor een input is in mijn geval pin 6

  //lcd
    lcd.init();       // deze twee waarde zijn nodig voor het klaar zeten van je lcd display
    lcd.backlight();

  // initialize serial communication:
    Serial.begin(9600);

  // automodus
    pinMode(automodus, INPUT); // auto modus is een knop die je kan toe wijzen 

  // naar boven en beneden 
    pinMode(naarboven, INPUT);
    pinMode(naarbeneden, INPUT);


  

}

void loop() {
  // put your main code here, to run repeatedly:

    // Leest de waardus van de knopen
      automodusstatus = digitalRead(automodus);
      naarbovenstatus = digitalRead(naarboven);
      naarbenedenstatus = digitalRead(naarbeneden);

    // eerst zorgen we er voor dat alle motoren stil gezet worden aan het begin van onze loop om raar ge drag het voor komen als de loop is afgeloopen en op nieuw begint
      Servo1.write(90);
      Servo2.write(90);
      Servo3.write(90);

    // en we zeten daar na een vertraging van 500ms (500ms is 0,5 seconde)
      delay(500);

    // hier stellen we de bazis info in met wat we willen zien op de lcd als de loop begint 
      lcd.setCursor(2, 0);
      lcd.print("Rick RickB.eu");
      lcd.setCursor(2, 1);
      lcd.print("Rolgordijn positie");
      lcd.setCursor(2, 2);
      lcd.print( "                    ");
      lcd.setCursor(2, 2);

    delay(1000);
//knopen waarde
  Serial.print("automodus: ");
  Serial.println(automodusstatus);
  Serial.print("naarboven: ");
  Serial.println(naarbovenstatus);
  Serial.print("naarbeneden: ");
  Serial.println(naarbenedenstatus);

    // hier lezen we de statussen uit van de rolgordijn stand
      // omhoog 
        Serial.print("statusomhoog: ");
        Serial.println(statusboven);
      // omlaag 
        Serial.print("statusomomlaag: ");
        Serial.println(statusbeneden); 

    // hier stellen we de licht sensor in 
      lichtSensorStatus=analogRead(lichtSensor);
      //hiermee printen we de uitkomst van lichtSensorStatus naar de siriale monitor
        Serial.print("Lichtwaarde: ");
        Serial.println(lichtSensorStatus);
    
    // hier gaan we de schakel voorwaarde instellen
        // auto stand 
        if(lichtSensorStatus <=100 & automodusstatus == 1){
          Servo1.write(80);
          Servo2.write(80);
          Servo3.write(80);
          Serial.print("Rolgordijnen dicht");
          lcd.setCursor(2, 2);
          lcd.print("Automaties dicht");
          // is de duur van het naar benende gaan 
          delay(9000);
          Servo1.write(90);
          Servo2.write(90);
          Servo3.write(90);
        }

        if(lichtSensorStatus >=150 & automodusstatus == 1){
         Servo1.write(100);
         Servo2.write(100);
         Servo3.write(100);
         Serial.print("Rolgordijnen open");
         lcd.setCursor(2, 2);
         lcd.print("Automaties open");
         // is de duur van het naar boven gaan 
         delay(9000);
         Servo1.write(90);
         Servo2.write(90);
         Servo3.write(90);
        }
       // hand matige modus
        if(automodusstatus == 0 & naarbenedenstatus == 1 & statusbeneden == 0){
         Servo1.write(80);
         Servo2.write(80);
         Servo3.write(80);
         Serial.print("Rolgordijnen dicht");
         lcd.setCursor(2, 2);
         lcd.print("Rolgordijnen dicht");
         // is de duur van het naar benende gaan 
         delay(9000);
         Servo1.write(90);
         Servo2.write(90);
          Servo3.write(90);
          statusbeneden = true;
          statusboven = false;

        }

        if(automodusstatus == 0 & naarbovenstatus == 1 & statusboven == false){
         Servo1.write(100);
         Servo2.write(100);
         Servo3.write(100);
         Serial.print("Rolgordijnen open");
         lcd.setCursor(2, 2);
         lcd.print("Rolgordijnen open");
         // is de duur van het naar boven gaan 
         delay(9000);
         Servo1.write(90);
         Servo2.write(90);
         Servo3.write(90);
         statusbeneden = false;
         statusboven = true;
        }

       // niets doen 
        if(automodusstatus == 0 & naarbovenstatus == 0 & naarbenedenstatus == false){
         Servo1.write(90);
         Servo2.write(90);
         Servo3.write(90);
        }

      



}