DIY: Smarte Verdunkelung - Aufbau - Teil 1 - AZ-Delivery

In den warmen Sommermonaten ist eine Verdunkelung des Raumes essenziell. Des Weiteren können mit einer Zeit geschalteten Verdunkelung auch der Schlafrhythmus und die Qualität verbessert werden.
In diesem Blogbeitrag wollen wir eine nachrüstbare Verdunkelung mit der Hilfe eines Mikrocontrollers bauen.

 

Hardware

Für die Umsetzung wird neben Löt Equipment auch ein 3D Drucker benötigt!
Sollten Sie keinen Zugang zu einem Drucker haben, können Sie die benötigten Teile auch bei 3D-Druck Dienstleistern online bestellen.

 

Für die komplette Umsetzung benötigen Sie folgende Komponenten:

D1 mini (ESP32 oder ESP8266)

Schrittmotor (Nema 17)

Schrittmotortreiber (A4988 oder DRV8825)

Servomotor SG90

Netzteil 12V (min. 1A)

Step down Modul (LM2596S)

 

Für den Testaufbau empfiehlt sich das

Breadboardkit

 

Falls noch nicht vorhanden, benötigen Sie auch noch:

ein Verdunkelungsrollo

ein Kugellager(15x35)

Gewindeschrauben (M3)

 

Die Breite und Länge des Rollladens sollten so gewählt sein, dass dieser an der Mauer über dem Fenster montiert werden kann, damit der Motor auch an der Wand befestigt werden kann.

 

Die meisten Verdunkelungen werden mit einer Kette geliefert, um den Rolladen zu öffnen beziehungsweise zu schließen.

Da das Drehmoment des Motors nicht ausreichend ist, um die Kette zu bewegen, wird der Motor direkt mit einer passenden Befestigung anstatt der ursprünglichen Teile direkt an der Achse der Verdunkelung befestigt.

 

Die folgenden f3d-Dateien können im CAD-Programm Fusion 360 von Autodesk bearbeitet und exportiert werden.
Die Software ist für Privatanwender kostenlos.

MotorrollerV0

MotormountV0

BearingmountV0

Bearing AdapterV0

Motorroller BearingV0

 

Durch diese Befestigungsmöglichkeit ist es nun möglich, den Rolladen mit dem Motor zu bewegen. Das Problem ist aber, dass sobald der Motor nicht mehr mit Strom versorgt wird, die Rolle nicht mehr in Position gehalten wird und sich komplett abrollt.
Ein dauerhaftes Blockieren des Motors würde aber einen erhöhten und unnötigen Strombedarf mit sich bringen.


Deshalb wird das Rad an der Motorseite um Zähne erweitert, wodurch dieses mit dem Servomotor blockiert und in Position gehalten werden kann.

 

Drucken Sie folgende Dateien mit dem 3D Drucker aus:

 

MotorrollerV1

MotormountV1

ServoLock

BearingmountV1

Bearing AdapterV1

Motorroller BearingV1

 

Sollten Sie andere Abmessungen benötigen können Sie die f3d Dateien zum bearbeiten hier herunterladen:

 

MotorrollerV1

MotormountV1

ServoLock

BearingmountV1

Bearing AdapterV1

Motorroller BearingV1

 

Wenn Sie alle Komponenten ausgedruckt haben, geht es an den Zusammenbau.
Kleben Sie den ServoLock auf den, dem Servo beigelegten, Plastikarm. (Sekundenkleber oder zwei Komponentenkleber empfohlen)

Der Servomotor und der Schrittmotor können nun mit den Schrauben am Halter befestigt werden. (Schrittmotor mit M3 Gewindeschrauben; Servo mit den beiliegenden Schrauben)

 

Bevor Sie den ServoLock auf den Servo stecken, stellen Sie den Servowinkel im Programm auf 0° und stecken Sie den Lock senkrecht zur Schrittmotor-Achse auf den Servo und schrauben Sie diesen fest.

Abbildung 1: Schrittmotor mit Servomotor in 0° Position

 

Das Kugellager kann einfach in den Halter gesteckt werden und nach Bedarf mit Kleber befestigt werden.

Abbildung 2: Lagerung der anderen Seite

 

Für die Montage an der Wand muss der Schrittmotor wieder entfernt werden, da dieser die Befestigungsmöglichkeiten verdeckt.

 

Bauen Sie folgende Schaltung auf dem Breadboard auf:

Abbildung 3: Schaltplan des Testaufbaus

Hinweis: Der Mikrocontroller muss nicht aufgesteckt werden, die Kabel können auch in die Buchsenleisten gesteckt werden.

 

Motortreiber

Servomotor

GND

GND

Rot

5V

VDD

5V

Orange

GPIO 23 (D7)

1A

Schrittmotor Blau

Schwarz

GND

1B

Schrittmotor Schwarz

LM2596S

2A

Schrittmotor Grün

IN+

12V

2B

Schrittmotor Rot

OUT+

5V

VMOT

12V

IN- / OUT-

GND

DIRECTION

GPIO 18 (D5)

Taster

STEP

GPIO 19 (D6)

Kontakt 1

GND

ENABLE

GPIO22 (D1)

Kontakt 2

GPIO 21 (D2)

SLEEP

RESET

 

 

Tabelle 1: Verbindungen der Komponenten (GPIO beschriftung zum ESP32)

 

Bevor Sie die Schaltung mit Spannung versorgen, kontrollieren Sie die Ausgangsspannung(5V) des Spannungswandlers !

 

Um den Motor vor zu hohen Strömen zu schützen, kann die Strombegrenzung am kleinen Potentiometer auf dem Treiber geregelt werden. Um die Motoren nicht zu stark zu belasten, soll ein maximaler Strom von 1A am Motor anliegen. Die Referenzspannung, die am Metallring des Potentiometers gemessen werden kann, entspricht der hälfte des maximalen Stroms, dass heißt in unserem Aufbau müssen Sie das Potentiometer so lange drehen, bis Sie 0,5V am Metallring des Potentiometers gegen Masse messen.

Software

Nachdem Sie alle Komponenten richtig verbunden haben, können wir uns um die Software kümmern.

 

Falls Sie das erste Mal einen ESP32 in der Arduino IDE programmieren, kopieren Sie folgenden Link in der Arduino IDE unter:
File->Preferences->Additional boards manager URLs :  https://dl.espressif.com/dl/package_esp32_index.json

und installieren Sie in der Boardverwaltung das ESP32 Paket.

 

Der Treiber(CP2102) für dieses Board ist bereits vom Betriebssystem installiert.

 

Der Motor kann durch zwei Pins am Motortreiber gesteuert werden. Zum einen kann mit dem DIR Pin die Drehrichtung des Motors eingestellt werden und mit dem STEP Pin durch Senden eines Pulses der Motor um einen Schritt gedreht werden.

Folgendes Programm steuert den Motor an, sodass dieser zwei Umdrehungen in beide Richtungen dreht:

#define dirPin 18
#
define stepPin 19
#
define stepsPerRevolution 200 //1.8°

void setup() {
 
// Declare pins as output:
 
pinMode(stepPin, OUTPUT);
 
pinMode(dirPin, OUTPUT);
}

void loop() {
 
digitalWrite(dirPin, HIGH);
 
for (int i = 0; i < 2 * stepsPerRevolution; i++) {
   
digitalWrite(stepPin, HIGH);
   
delay(5);
   
digitalWrite(stepPin, LOW);
   
delay(5);
  }

 
delay(1000);

 
digitalWrite(dirPin, LOW);
 
for (int i = 0; i < 2 * stepsPerRevolution; i++) {
   
digitalWrite(stepPin, HIGH);
   
delay(5);
   
digitalWrite(stepPin, LOW);
   
delay(5);
  }

 
delay(1000);
}

Im Code werden die einzelnen Schritte durch eine for-Schleife für die korrekte Anzahl an Schritten ausgeführt. Durch die Pausen zwischen den Impulsflanken kann die Geschwindigkeit angepasst werden.
 Für die ersten Versuche ist dieses Programm völlig ausreichend, für den Schlussendlichen Antrieb des Rollladens gibt es aber bessere Alternativen wie die Verwendung einer Library.

Installieren Sie die AccelStepper Bibliothek. Dies ist entweder über die integrierte Bibliotheksverwaltung der Arduino IDE möglich, oder über GitHub als .zip Datei.

 

Das folgende Programm schließt und öffnet die Verdunkelung. Dabei wird der Servomotor als Verriegelung benutzt, um den Motor über den ENABLE Pin am Treiber stromlos zu schalten.

#include "Arduino.h"
#
include <AccelStepper.h>

#
define dirPin 18
#
define stepPin 19
#
define stepsPerRevolution 200 //1.8°

#
define servoPin 23

const int pwmChannelServo = 0;

AccelStepper stepper = AccelStepper(AccelStepper::FULL2WIRE, dirPin, stepPin);

const int numberOfTurns = -15; //Richtung und Anzahl anpassen!
long targetPosition = stepsPerRevolution * numberOfTurns;


void setServoAngle(int angle) {
 
// Min Duty: ca. 1638 (0.5ms), Max Duty: ca. 8192 (2.5ms) bei 16 Bit
 
int dutyMin = 1638;
 
int dutyMax = 8192;

 
int duty = map(angle, 0, 180, dutyMin, dutyMax);
  ledcWrite(pwmChannelServo, duty);
}

void setup() {
 
Serial.begin(115200);

  ledcSetup(pwmChannelServo,
50, 16);
  ledcAttachPin(servoPin, pwmChannelServo);

  stepper.setMaxSpeed(
500);
  stepper.setAcceleration(
300);
  stepper.setEnablePin(
22);
  stepper.moveTo(
0);
 
}

void abrollen() {
 
while (stepper.distanceToGo() != 0) {
    stepper.
run();
  }
}

void loop() {
 
 
digitalWrite(22, LOW);//enable Motor
  setServoAngle(
0);
  stepper.moveTo(targetPosition);
//schließen
  abrollen();
  setServoAngle(
80);
 
digitalWrite(22, HIGH);//disable Motor

 
delay(6000);
 
 
digitalWrite(22, LOW);//enable Motor
  setServoAngle(
0);
  stepper.moveTo(
0); //öffnen
  abrollen();
  setServoAngle(
80);
 
digitalWrite(22, HIGH);//disable Motor

 
delay(6000);

}

Das Programm können Sie hier herunterladen.

Am Anfang des Programms werden Konstanten definiert und ein Objekt der Bibliotheksklasse erstellt.

Die Methode setServoAngle() steuert den Servomotor mit einem PWM-Signal an, welches aus dem Zielwinkel berechnet wird.

Im setup() wird der PWM Kanal gestartet und die Einrichtungsbefehle des Schrittmotors aufgerufen.

Die Funktion abrollen() bewegt den Schrittmotor so lange, bis dieser die Zielposition erreicht hat.

In der loop() Routine wird erst der Servo geöffnet, danach der Schrittmotor zur Zielposition bewegt und am Ende wieder geschlossen. Der Ablauf wird danach für die Startposition wiederholt.

 

Passen Sie, bevor Sie das Programm auf den Mikrocontroller laden, die Anzahl der Motorumdrehungen und die Richtung an.
Der Servomotor sollte außerdem so eingestellt werden, dass der Arm in Nullstellung senkrecht zur Motorachse des Schrittmotors steht.

Fazit

Nachdem in diesem Teil die Verdunkelung mit einem Motor versehen wurde, sodass sie nun automatisch betrieben werden kann, widmen wir uns im nächsten Schritt der Umsetzung der Steuerung.
Dazu wird auf dem Mikrocontroller ein Webserver eingerichtet, über den sich der Rollladen steuern lässt. Zusätzlich wird ein Gehäuse für den Mikrocontroller und die Elektronik vorgesehen, um eine sichere Befestigung an der Wand zu ermöglichen.
Abschließend soll die Integration von MQTT und einem Taster erfolgen, sodass die Verdunkelung vollwertig in ein Smart-Home-System eingebunden werden kann.

Viel Spaß beim Nachbauen :)

Esp32Esp8266Projekte für anfängerSmart home

3 commentaires

Anstela

Anstela

Hallo @Jonas,
Gute Neuigkeiten: Teil 2 des Projekts ist ab heute verfügbar! Der Link dazu: https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/diy-smarte-verdunkelung-steuerung-teil-2
Herzlichen Dank für die Geduld und das Interesse am Projekt.

Grüße, Anstela AZ-Delivery Blog

Tom

Tom

Coole Sache, werde ich in den nächsten Tagen mal nachbauen. Wann wird PART 2 des Projektes vorgestellt?

Jonas

Jonas

Coole Idee. Gibt es auch Überlegungen zur Stromversorgung (netzunabhängig)? Nich an jedem Fenster hat man in der Regel die Möglichkeit auf Netzstrom zuzugreifen.

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés

Articles de blog recommandés

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery