Weekend Project: 7 Segmentanzeige mit Servomotoren

Im nachfolgenden Weekend Project möchte ich gerne aufzeigen wie man sich eine eigene, große 7 Segmentanzeige erstellen kann.

7 Segmentanzeige mit Servomotoren - "Ziffer 3"
7 Segmentanzeige mit Servomotoren – „Ziffer 3“

Ich habe dieses Projekt zuerst in einem Instagram Beitrag gesehen und fand dieses cool, daher wollte ich dieses gerne nachbauen und natürlich auf meinem Blog einen Beitrag dazu schreiben.

7 Segmentanzeige mit Servomotoren - Ziffern 0 & 1

 

Was ist eine 7 Segmentanzeige?

Mit einer 7 Segmentanzeige kann man die Zahlen von 0 bis 9 und einfache Buchstaben anzeigen.

7 Segmentanzeige am MakerUNO
7 Segmentanzeige am MakerUNO

Ich habe bereits im Tutorial Arduino Lektion 62: 7 Segmentanzeige eine 7 Segmentanzeige vorgestellt. 

Materialien & Werkzeuge

Materialien

Folgende Materialien werden benötigt:

  • 2x 3mm, DIN A4 Sperrholz,
  • Holzleiste, 20 cm Lang, 10 mm Stark
  • eventuell, Farbe für die Displayfläche,

Werkzeuge

  • Laubsäge,
    • Laubsägeblätter, fein
  • Heißklebepistole,
  • Holzleim,
  • Papierkleber, 
  • kleiner, Kreuzschraubendreher 
  • kleiner, Schlitzschraubendreher

elektrische Bauelemente

Vorlage

Zunächst einmal habe ich mir eine Vorlage im Zeichenprogramm paint.net erzeugt und diese Ausgedruckt dann auf das Sperrholz geklebt.

Vorlage für eine 7 Segmentanzeige auf Sperrholz
Vorlage für eine 7 Segmentanzeige auf Sperrholz

Ich habe dafür den Papierkleber der Firma „Pritt“ benutzt.
Diese ist deutlich besser als die günstigen.

Die Vorlage kannst du dir unter folgendem Link herunterladen:

 

Aufbau der 7 Segmentanzeige mit Sperrholz

Im folgenden Video zeige ich, wie ich die 7 Segmentanzeige mit Sperrholz erstellt habe.

Zunächst einmal habe ich jedes Segment mit der Laubsäge ausgesägt und danach auf das korrekte Maß geschliffen.  Danach wurde eine kleine 2cm lange Holzleiste montiert, damit dieses besser hält habe ich jeweils ein 2mm Loch hineingebohrt und ein 3mm x 12mm Kreuzschraube inkl. Holzleim verwendet. Wenn alle 7 Segmente montiert wurden dann wurden die Servomotoren mit der Heißklebepistole festgeklebt und diese danach auf die übrige Sperrholzplatte montiert. Zum Schluß habe ich die Segmente angestrichen.

DIY - 7 Segment Anzeige, Schritt 1 - Aufbau

Anschließen der 7 Servomotoren

Für den Betrieb der Servos verwende ich das PWMServoDriverShield vom Typ „PCA9685„. Dieses kann man bei ebay.de für knapp  5€ inkl. Versandkosten erwerben.

PWMServoDriverShield – Typ „PCA9685“

Das Shield hat den Vorteil das man die Servos per I2C ansprechen kann und somit die digitalen Pins des Microcontrollers frei hat. Ein weiterer großer Vorteil ist das die Boards kaskadiert werden können somit hat man die Möglichkeit nicht nur 16 Servos zu betreiben sondern bis zu 6x 16 Stück = 96 Stück.

PCA9685 16 Kanal Servo Driver Shield
PCA9685 16 Kanal Servo Driver Shield

Auf der Rückseite des Modules sind die maximalen Lasten für das Modul aufgedruckt.

PCA9685 16 Kanal Servo Driver Shield - Rückseite
PCA9685 16 Kanal Servo Driver Shield – Rückseite

Das Modul verfügt über 16 Steckplätze für Servomotoren, diese sind in der korrekten Pinanordnung so das man den Stecker des Servos direkt drauf stecken kann.

16 Kanal Servo Modul PCA9685 mit Servo
16 Kanal Servo Modul PCA9685 mit Servo

Des Weiteren verfügt das Modul über 6 Pins welche mit dem Microcontroller verbunden werden.

Je nach verwendeten Microcontroller muss das Modul anders angeschlossen werden. Hier nun die 3 Möglichkeiten für die gängigen Microcontroller der Arduino Baureihe:

Arduino UNO

  • VCC an 5V
  • GND an GND
  • SDA an analog A4
  • SCL an analog A5
Servo Driver Modul PAC9685 am Arduino UNO
Servo Driver Modul PAC9685 am Arduino UNO

Arduino Mega 2560 R3

  • VCC an 5V
  • GND an GND
  • SDA an digital 20
  • SCL an digital 21
Servo Driver Modul PAC9685 am Mega
Servo Driver Modul PAC9685 am Mega

Arduino Leonardo

  • VCC an 5V
  • GND an GND
  • SDA an SDA
  • SCL an SCL
Servo Driver Modul PAC9685 am Arduino Leonardo
Servo Driver Modul PAC9685 am Arduino Leonardo

Spannungsversorgung der Servos

Die Servos werden über einen Separaten Anschluß auf dem Modul mit Spannung versorgt. Die beiden Pins VCC & GND dienen „nur“ zum betrieb des Modules.

PAC9685 Schraubklemme für Spannungsversorgung der Servos
PAC9685 Schraubklemme für Spannungsversorgung der Servos

Programmieren des PAC9685 Servo Driver Shield

Damit wir das Modul verwenden können benötigen wir zusätzlich eine Bibliothek, diese können wir in der Arduino IDE bequem über den „Bibliotheksverwalter“ installieren.  

Die benötigte Bibliothek heißt „Adafruit PWM Servo Driver Library“ und kann über das Eingabefeld mit der Zeichenkette „pwm servo“ gefunden werden.

Arduino IDE - Bibliotheksverwalter "Adafruit PWM Servo Driver Library"
Arduino IDE – Bibliotheksverwalter „Adafruit PWM Servo Driver Library“

Wenn die Bibliothek installiert wurde kann es mit der Programmierung schon beginnen.

Einfaches Beispiel mit einem Servo

Als erstes wollen wir einen Servo betreiben und diesen von 0° bis 180° und zurück bewegen lassen.

Video
PWM Servo Driver Shield PAC9685 mit einem Servo

Sketch für die 7 Segmentanzeige

interne Klasse „Segment“

Da ich bedingt durch die künste nicht ganz gerade Sägen zu können etwas Toleranz in jedem Segment benötige habe ich mir die interne Klasse „Segment“ erzeugt.

Diese Klasse erhält

  • den Port an welchem der Servo angeschlossen ist,
  • den Namen,
  • den Wert „maxAngle“ für den untersten Wert,
  • den Wert „minAngle“ für den obersten Wert

Zunächst einmal werden wir also die Servos an den einzelnen Ports mit einer neuen Instanz der Klasse „Segment“ definieren.

Ich verwende hier die Beschriftung A-G diese ist für die Definition der einzelnen Segmente einer 7 Segmentanzeige üblich.

7Segmentanzeige - Definition Segmente
7Segmentanzeige – Definition Segmente

Nun müssen wir noch in der Funktion „setup“ das PWM Modul „starten“ und die Frequenz für die Kommunikation festlegen, bei den von mir verwendeten Servos liegt diese bei 60Hz.

In der Funktion „loop“ werden nun die einzelnen Funktionen zum anzeigen einer Zahl aufgerufen. Ich habe dieses einmal beispielhaft für die Zahlen 0 & 1 getan.

In den Funktionen selber wird zunächst ein Reset ausgeführt, dieses sorgt dafür das alle Servos in den Zustand „nicht angezeigt“ gehen (quasi im Winkel von 180°).

Da ich doppelten Quellcode vermeiden möchte habe ich mir wiederum eine extra Funktion geschrieben in welcher ich den Port übergebe und diese mir den Servo auf den benötigten Winkel setzt.

Hier kommt auch schon die nächste Funktion „moveServo“ hat 3 Parameter, 

  • die Aktion, für die Ausgabe auf dem Seriellen Monitor der Arduino IDE,
  • den Port, an welchem der Servo angeschlossen ist,
  • der Winkel, in welchem Winkel der Servo versetzt werden soll

Da das Modul PAC9685 mit Pulsen anstadt Winkeln arbeitet müssen wir zunächst den gewünschten Winkel in ein Pulse umwandeln, dazu nutzen wir die Funktion „map“. Wir wissen das bei Pulse „125“ der minimale Wert (also 0°) und bei „575“ der maximale Wert erreicht (also 180°) ist.

Nehmen wir einmal Beispielhaft die Zahl „0“, hier müssen alle Segmente aufgerichtet werden außer das Segment „G“. Wie erwähnt wird zunächst ein Reset ausgeführt, danach wird jedes einzelne Segment aufgerichtet. Zwischen den einzelnen Segmenten habe ich eine kleine Pause eingefüht, dieses musste ich machen da es wohl Zeitliche Probleme gibt.

Für die Zahl „1“ würden dann nur das Segment „B“ & „C“ aktiviert usw.

kompletter Sketch

Hier nun der komplette Sketch. Im unteren Bereich dieses Tutorials findest du den Sketch zum bequemen Download.

Download

 

 

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.