Skip to content

Commit 7e83ac2

Browse files
authored
Merge branch 'main' into feat/ir-receiver
2 parents d88cb23 + aa3fd76 commit 7e83ac2

File tree

3 files changed

+66
-1
lines changed

3 files changed

+66
-1
lines changed

content/german/basics/crowpi.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ Komponenten aufgeführt:
5959
| [Relais]({{< ref "components/relay" >}}) | Schaltung eines elektrischen Kontakts | GPIO | {{< dip-switches >}} |
6060
| [RFID]({{< ref "components/rfid" >}}) | Kontaktloses Lesen und Schreiben von Karten | SPI | {{< dip-switches >}} |
6161
| [Schrittmotor]({{< ref "components/step-motor" >}}) | Bewegen eines Schrittmotors | GPIO | {{< dip-switches 11 12 13 14>}} |
62+
| [Servomotor]({{< ref "components/servo-motor" >}}) | Bewegen eines Servomotors | PWM | {{< dip-switches 15 16 >}} |
6263
| [Sound Sensor]({{< ref "components/sound-sensor" >}}) | Erkennen von Lärm oder Stille | GPIO | {{< dip-switches >}} |
6364
| [Tilt Sensor]({{< ref "components/tilt-sensor" >}}) | Erkennt aktuelle Neigung (links/rechts) von CrowPi | GPIO | {{< dip-switches 10 >}} |
6465
| [Touch Sensor]({{< ref "components/touch-sensor" >}}) | Erkennen von Berührungen | GPIO | {{< dip-switches >}} |
@@ -69,4 +70,3 @@ Komponenten aufgeführt:
6970

7071
- [Offizielle Anleitung von Hersteller (Englisch)](https://www.elecrow.com/download/product/SES14002K/CrowPi_User_Manual.pdf)
7172
- [Ursprüngliche Kickstarter-Kampagne für CrowPi (Englisch)](https://www.kickstarter.com/projects/elecrow/crowpi-lead-you-go-from-zero-to-hero-with-raspberr)
72-
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
---
2+
title: Servomotor
3+
tags: ["pwm"]
4+
---
5+
6+
## Funktionsweise
7+
8+
Servomotoren sind in einer Vielzahl von Bauformen und Grössen erhältlich. Eine Eigenschaft welche einen Servomotor von einem
9+
normalen Elektromotor unterscheidet ist die Existenz eines Regelkreises. Dieser Regelkreis ermöglicht also erst die Kontrolle über
10+
Drehgeschwindigkeit, Beschleunigung und Winkelposition des Motors. Im Gegensatz zum Schrittmotor sorgt also nicht der physikalische Aufbau
11+
für diese Kontrollmöglichkeiten, sondern eine Regelung. Die Regelung im Falle des beim CrowPi beiliegenden Servomotors wird durch ein
12+
simples Potentiometer erreicht. Bei industriellen, hochwertigen Servomotoren werden für die Positionsrückmeldung spezielle Encoder
13+
verwendet. Diese erlauben viel höhere Genauigkeiten als die Bauform mit Potentiometer. Verwendet wird diese vereinfachte Form häufig im
14+
Modellbau für die Einstellung von Stellwinkeln bei Modellflugzeugen.
15+
16+
Der Anschluss der Servomotors erfolgt so: {{< img alt="Anschluss für Schrittmotor" src="components/servo-motor.jpg" height="500px" >}}
17+
18+
## Voraussetzungen
19+
20+
### DIP Switches
21+
22+
Für diese Komponente müssen zwei DIP Switches des rechten Blockes gesetzt werden. Die Stellung der DIP Switches sollte anschliessend so
23+
aussehen:
24+
25+
{{< dip-switches 15 16 >}}
26+
27+
## Verwendung
28+
29+
Nachfolgend wird die Verwendung der Klasse {{< javadoc class="com.pi4j.crowpi.components.StepMotorComponent" >}} beschrieben.
30+
31+
### Konstruktoren
32+
33+
| Konstruktor | Bemerkung |
34+
|:---------------------------------------------------------------------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------|
35+
| `ServoMotorComponent(com.pi4j.context.Context pi4j)` | Initialisiert einen Servomotor mit den Standardeinstellungen für den CrowPi. |
36+
| `ServoMotorComponent(com.pi4j.context.Context pi4j, float minAngle, float maxAngle, float minDutyCycle, float maxDutyCycle)` | Initialisiert einen Servomotor mit dem Standardpin. Hier sind jedoch benutzerdefinierte Winkelangaben sowie Tastgrad einstellbar. |
37+
| `ServoMotorComponent(com.pi4j.context.Context pi4j, int address, int frequency, float minAngle, float maxAngle, float minDutyCycle, float maxDutyCycle)` | Initialisiert einen Servomotor mit frei definierbarem Pin. Zusätzlich sind ebenfalls Winkelangaben sowie Tastgrad einstellbar. |
38+
39+
### Methoden
40+
41+
| Methode | Bemerkung |
42+
|:----------------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
43+
| `void setAngle(float angle)` | Rotiert den Motor auf den übergebenen Winkel in Grad [°]. |
44+
| `void setPercent(float percent)` | Positioniert den Motor zwischen `minAngle` und `maxAngle` prozentual. |
45+
| `void moveOnRange(float value)` | Positioniert den Motor entsprechend des übergebenen Werts und anhand der Kalkulation aus den mit `setRange` gesetzten Grenzwerten. |
46+
| `void moveOnRange(float value, float minValue, float maxValue)` | Positioniert den Motor entsprechend des übergebenen Werts und anhand der Kalkulation aus den mit angegeben Grenzwerten. Hat keinen Einfluss auf die mit `setRange` gesetzten Properties. |
47+
| `void setRange(float minValue, float maxValue)` | Setzt die Unter- und Obergrenze der Werteskala. Wird für die Bewegungskalkulation mit `moveOnRange(float value)` benutzt. |
48+
| `float getMaxAngle()` | Gibt den maximal positionierbaren Winkel des Servomotors zurück. |
49+
| `float getMinAngle()` | Gibt den minimal positionierbaren Winkel des Servomotors zurück. |
50+
51+
52+
## Beispielapplikation
53+
54+
Die Beispielanwendung zeigt auf einfache Art und Weise wie die verschiedenen Methoden der `ServoMotorComponent` zu verwenden sind. Als
55+
Erstes wird demonstriert wie einfach mit der prozentualen Positionierung gearbeitet werden kann. Dazu wird die Methode `setPercent`
56+
verwendet. Als Zweites folgt dann ein Beispiel einer Positionierung mittels der Funktion `setAngle`, welche einen Winkel in Grad
57+
entgegennimmt. Zuletzt wird eine benutzerdefinierte Skalierung mit dem Beispiel einer Temperaturanzeige genutzt. Mittels `setRange` wird der
58+
Messbereich des Sensors einprogrammiert. Danach wird mit `moveOnRange` der Messwert in eine entsprechende Positionierung des Servomotors
59+
umgewandelt.
60+
61+
{{< code file="src/main/java/com/pi4j/crowpi/applications/ServoMotorApp.java" language="java">}}
62+
63+
## Weitere Möglichkeiten
64+
65+
- Anzeige von Messerwerten mittels eines an der Achse montierten Zeigers.
2.02 MB
Loading

0 commit comments

Comments
 (0)