nachdem ich bei Google oder Youtube nichts Konkretes gefunden habe,
stelle ich hier mal meine Frage. Vielleicht ist es ja ganz einfach, aber
ich bin erstens 77 und zweitens absoluter Anfänger im Thema ARDUINO
Ich will (mehrere) Servos für eine Weichensteuerung unabhängig mit einem
MEGA ansteuern. Die Servos bewegen sich ca. 30 Grad, die Spannung wird
in den Endstellungen abgeschaltet. Das kriege ich auch hin.
Jetzt hätte ich gerne die jeweilige Position des Servos durch LEDs
angezeigt.
Hierzu finde ich nichts.
Geht das ohne zusätzlichen Aufwand? Kann man das im Sketch einbinden
ohne zusätzliche Pins zu belegen?
Am Servo liegt jetzt ja keine Spannung mehr an.
Über eure Tipps freut und bedankt sich
Rudi
ja, ins Stellpult einbauen.
ich kann mir vorstellen, dass das schon so mancher Modellbahner gemacht
hat.
Meine eigene Idee wäre evtl. 2 MEGAs parallel ansteuern,
an einem die Moment-Ausgänge für die Servos, am anderen die
Dauer-Ausgänge für die LEDs programmieren.
jeder Vorschlag hilft mir bei meinem Verständnis für Arduino weiter
Rudi
Hm, warum nicht mit Magneten und Reedkontakten die echte Weichenstellung
abgreifen. Da hätte man auch gleich eine Kontrolle, ob der Stellvorgang
funktioniert hat
das ist natürlich die herkömmliche Lösung, die auch sicher und
zuverlässig funktioniert. Allerdings würde ich anstelle der Reedkontakte
Hallsensoren verwenden. Die sind wesentlich kleiner und unauffälliger zu
kaschieren.
Eine elektronisch/digitale Lösung im Eigenbau würde mich aber mehr
reizen
Rudi
Rudi M. schrieb:> Jetzt hätte ich gerne die jeweilige Position des Servos durch LEDs> angezeigt. Hierzu finde ich nichts.
Ich verstehe dich so, dass du einen Arduino vorliegen hast, der deine
Servos ansteuert. Zusätzlich sollen nun LEDs die Positionen der Servos
anzeigen.
Im Prinzip sollte der Arduino stets wissen können, in welcher Position
sich die Servos befinden. Dann kann er also auch entsprechende LEDs
anzeigen.
Wo siehst du da die Schwierigkeit? Vielleicht:
a) Du weißt nicht, wie man LEDs ansteuert
b) Zu wenig Pins frei
c) Der Status nach dem Einschalten der Stromversorgung ist unklar
d) Du willst die tatsächliche Postion der Servos erfassen und anzeigen,
nicht die Soll-Position.
Beschreibe dein Vorhaben nochmal genauer und gebe auch an, was das für
Servos sind bzw. welche Eigenschaften sie haben (Anschlüsse, Spannung,
DC/AC, Stromstärke, Timing) - nicht das wir uns in die Ansteuerung von
völlig anderen Produkten verrennen. Den Teil den du bereits hinbekommst,
solltest du zeigen, damit wir darauf aufbauen können.
erstmal danke für eure Antworten
zu a) LEDs ansteuern ist ja die erste Übung beim Arduino. Allerdings
liegen
dabei ständig 5 Volt an. In meinem Programm wird die Spannung am
Servo nach Erreichen der Position abgeschaltet.
zu b) es werden 10 - 12 Weichen geschaltet, damit sind beim MEGA nicht
genügend Pins frei.
Ich bräuchte pro Weiche noch zusätzlich 1 Pin für den Eingang und
2 Pins für die beiden LEDs.
Zumindest verstehe ich das so.
zu c) der Status beim Einschalten ist momentan noch nicht wichtig
zu d) die tatsächliche Position wäre ideal. Allerdings denke ich, dass
die
Servos vom Arduino exakt angesteuert werden und könnte deshalb
auch
die Anzeige der Soll-Position akzeptieren.
es sind die üblichen 5 Volt China-Servos für Modellbau.
hier mein Test-Sketch für 3 Servos, wobei die Pin-Belegung der Eingänge
und Ausgänge zum Testen willkürlich festgelegt wurde:
#include <Servo.h>
Servo W1;
Servo W2;
Servo W3;
int T1 = 52;
int T2 = 53;
int T3 = 40;
int T4 = 41;
int T5 = 46;
int T6 = 47;
void setup() {
pinMode(T1, INPUT);
pinMode(T2, INPUT);
pinMode(T3, INPUT);
pinMode(T4, INPUT);
pinMode(T5, INPUT);
pinMode(T6, INPUT);
}
void loop() {
if(digitalRead(T1) == HIGH) { //Servo W1 an Pin 9
W1.attach(9);
W1.write(0);
delay(500);
W1.detach();
}
if(digitalRead(T2) == HIGH) {
W1.attach(9);
W1.write(20);
delay(500);
W1.detach();
}
if(digitalRead(T3) == HIGH) { //Servo W2 an Pin A2
W2.attach(A2);
W2.write(0);
delay(500);
W2.detach();
}
if(digitalRead(T4) == HIGH) {
W2.attach(A2);
W2.write(60);
delay(500);
W2.detach();
}
if(digitalRead(T5) == HIGH) { //Servo W3 an Pin 3
W3.attach(3);
W3.write(0);
delay(500);
W3.detach();
}
if(digitalRead(T6) == HIGH) {
W3.attach(3);
W3.write(60);
delay(500);
W3.detach();
}
}
Zu wenig Pins kannst du relativ leicht durch Schieberegister (74HC595)
umgehen - davon kann man theoretisch beliebig viele hintereinander
schalten.
Dir ist also bewusst, dass man zur Erfassung der tatsächlichen Position
zusätzliche Sensoren braucht, die du in diesem Fall einsparen möchtest.
Also wirst du nur die Soll-Position anzeigen, die der Mikrocontroller
zuvor an den jeweiligen Servo gesendet hat.
Ich würde das so machen:
die Servos werden ja mit PWM angesteuert, 2 Weichenstellungen -> 2
PWM-Zeiten (zb 13 ms Richtung 1, 18 ms Richtung 2) PWM = 13 ms Pin X
low, PWM =18 ms Pin X High. Porterweiterung mittels Schieberegister
Stefanus F. schrieb:> Zu wenig Pins kannst du relativ leicht durch Schieberegister (74HC595)> umgehen - davon kann man theoretisch beliebig viele hintereinander> schalten.>> Dir ist also bewusst, dass man zur Erfassung der tatsächlichen Position> zusätzliche Sensoren braucht, die du in diesem Fall einsparen möchtest.> Also wirst du nur die Soll-Position anzeigen, die der Mikrocontroller> zuvor an den jeweiligen Servo gesendet hat.
hallo Stefanus,
wie bereits geschrieben, könnte ich mit der Soll-Position leben.
Das Thema Schieberegister ist für mich neu und muss ich mal danach
googeln.
Rudi
Hubert G. schrieb:> Also ein Arduino Mega hat (nicht nachgezählt) etwa 60 I/O.> Pro Weiche brauchst du drei I/O.
Schieberegister haben allerdings den Charme, nur wenige Cent zu kosten.
Sie beschützen das Arduino Board vor so mancher Dummheit.
es sind laut Datenblatt 54 I/O Pins.
12 Weichen belegen 36 Pins
24 LEDs belegen 24 Pins
somit wären mindestens 60 Pins nötig und damit am MEGA nicht
ausreichend.
Oder verstehe ich was falsch ?
Rudi
Rudi M. schrieb:> pro Weiche 1 x Input, 2 x Output>> pro LED 1 x Input, 1 x Output (pro Weiche 2 LEDs>> Rudi
Für dem Input brauchst du nur einen Pin und für die Led auch nur einen.
Ich weiss nicht wie du das Servo abschaltest. Wenn du da einen eigenen
Pin benötigst, dann sind es nur 48 I/O.
Der Mega hat 54 digitale I/O und 16 analoge I/O. Die analogen lassen
sich aber auch als digitale verwenden.
Rudi M. schrieb:> mein laienhaftes Verständnis:>> pro Weiche 1 x Input, 2 x Output>> pro LED 1 x Input, 1 x Output (pro Weiche 2 LEDs>> Rudi
Mal mal eine Skizze, wie du das meinst. Ich verstehe nicht (bin auch
kein Modellbahner), wozu der Input bei der Weiche, wozu der Input bei
der LED.
Die LEDs sollen vermutlich den Zustand der Weiche anzeigen? Dann reicht
auch ein Pin für zwei LEDs, wenn es eine Weiche mit nur zwei Zuständen
ist:
1
VCC
2
+
3
|
4
|
5
V -> LED
6
-
7
|
8
|
9
.-.
10
| |
11
| |
12
'-'
13
|
14
Output µC---o
15
|
16
.-.
17
| |
18
| |
19
'-'
20
|
21
|
22
V -> LED
23
-
24
|
25
|
26
===
27
GND
28
(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)
Wenn du den Output des µC auf HIGH stellst, leuchtet du untere LED, bei
LOW die obere.
Hubert schrieb:
"Für dem Input brauchst du nur einen Pin und für die Led auch nur einen.
Ich weiss nicht wie du das Servo abschaltest. Wenn du da einen eigenen
Pin benötigst, dann sind es nur 48 I/O."
ich verstehe das jetzt so, dass für das Servo und die LEDs ein
gemeinsamer Input-Pin verwendet wird. Richtig?
Die Abschaltung der Servos erfolgt wie in dem Sketch ( weiter oben)
gezeigt mit
Wx.detach();
Rudi
Ich hab jetzt nicht alles gelesen... Aber wenn ich das richtig
verstanden hab, hast du Endlagenschalter an deinen Servos? Kannst du
nicht einfach deren Signal abgreifen?
Rudi M. schrieb:> ich verstehe das jetzt so, dass für das Servo und die LEDs ein> gemeinsamer Input-Pin verwendet wird. Richtig?
Richtig.
>> Die Abschaltung der Servos erfolgt wie in dem Sketch ( weiter oben)> gezeigt mit>> Wx.detach();
Mir sagt das Wx.detach();nichts, kenne die Funktion nicht. Aber selbst
wenn du für diese Funktion einen eigenen Pin benötigst, sind es erst 48
I/O.
keine Endlagenschalter vorhanden.
Natürlich könnte ich Microschalter anbringen und damit die Ist-Position
anzeigen.
Das will ich aber nicht unbedingt, Soll-Position würde reichen
Rudi
Rudi M. schrieb:> keine Endlagenschalter vorhanden.
Denn hab ich da was in falschen Hals bekommen...
Sorry ich stell grad fest, dass mir heut irgendwie die Ruhe fehlt.
Rudi M. schrieb:> Meine eigene Idee wäre evtl. 2 MEGAs parallel ansteuern,
Fuer 16 Servos + 32 LEDs (+ 16 Hallsensoren):
1 x PCA9685 Board (i2c, 16 PVMs aka Servos)
4 x 74HC595 (je 8 x Out Shift fuer LEDs)
ev. 2 x 74HC4051 (analog in Multiplexer f. Hallsensoren)
Damit hast du noch zig Pins frei f. die Modellanlagen der Nachbarn ;-)
leo
@ Hubert
"detach" habe ich aus einem Video bei Youtube zur Weichensteuerung um
die Spannung am Servo wieder abzuschalten. Das funktioniert ja gut.
Wo habe ich meinen Denkfehler zur Anzahl der Pins?
Meine Denke:
ich brauche pro Servo 1 x Input, 2 x Output = 3 Pins
pro LED 1 x Input, 1 x Output = 2 Pins
meine Rechnung: 12 Servos 12 x 3 = 36 Pins
24 LEDs 24 x 2 = 48 Pins
wenn für Servo und LED derselbe Input genommen werden kann komme ich auf
12 Input-Pins gemeinsam
24 Output-Pins für die Servos
24 Output-Pins für die LEDs
also insgesamt 60 Pins.
Wie kommst Du auf nur 48 Pins ?
Wo denke ich falsch ?
Rudi
Rudi M. schrieb:> wenn für Servo und LED derselbe Input genommen werden kann komme ich auf> 12 Input-Pins gemeinsam> 24 Output-Pins für die Servos> 24 Output-Pins für die LEDs>> also insgesamt 60 Pins.>> Wie kommst Du auf nur 48 Pins ?
Ich weiss jetzt nicht wie du das Servo abschaltest und daher 2 Pin
brauchst. Aber für die Leds brauchst du nur je einen Pin. Wie das geht
hat HildeK ja schon aufgezeichnet.
leo schrieb:> Rudi M. schrieb:>> Meine eigene Idee wäre evtl. 2 MEGAs parallel ansteuern,>> Fuer 16 Servos + 32 LEDs (+ 16 Hallsensoren):>> 1 x PCA9685 Board (i2c, 16 PVMs aka Servos)> 4 x 74HC595 (je 8 x Out Shift fuer LEDs)> ev. 2 x 74HC4051 (analog in Multiplexer f. Hallsensoren)>> Damit hast du noch zig Pins frei f. die Modellanlagen der Nachbarn ;-)>> leo
danke an Leo,
das ist mir als Arduino Anfänger noch zu hoch. Werde aber mal googeln,
vielleicht hilt´s weiter.
Trotzdem Dank für Deine Antwort
ist ja toll wie das hier läuft. Ich komme mit dem Lesen eurer Antworten
und Tipps kaum nach.
Für heute will ich euch allen danken und euch und mir noch einen
geruhsamen Sonntagabend gönnen.
Ich werde dann alles nachvollziehen und mich mit Sicherheit und weiteren
Fragen wieder an euch wenden.
a guat´s Nächtle wünscht aus dem Ländle
Rudi
Rudi M. schrieb:> zu a) LEDs ansteuern ist ja die erste Übung beim Arduino. Allerdings> liegen> dabei ständig 5 Volt an. In meinem Programm wird die Spannung am> Servo nach Erreichen der Position abgeschaltet.>> void loop() {>> if(digitalRead(T1) == HIGH) { //Servo W1 an Pin 9> W1.attach(9);> W1.write(0);> delay(500);> W1.detach();> }
Wenn du annimmst, daß mit detach() die Spannung am Servo abgeschaltet
wird, dann liegst du falsch. Diese Funktion löscht nur eine
Pin-Zuordung.
Siehe https://www.arduino.cc/en/Reference/ServoDetach
detach(): Detach the Servo variable from its pin. If all Servo variables
are detached, then pins 9 and 10 can be used for PWM output with
analogWrite().
Deine Servos hängen nachher alle parallel an der Versorgung, zumindest
wenn du nicht zusätzliche Hardware vorsiehst, um sie abzuschalten.
Allgemeiner Vorschlag für Projekte mit vielen LEDs am Mikrocontroller:
WS2812 (u.ä.)!
Dazu installiert man die NeoPixel-Lib von Adafruit und danach benötigt
man für nahezu beliebig viele RGB-LEDs nur noch eine (!!!) Datenleitung
am Arduino.
Die RGB-LEDs gibts als ca. 1cm breiten Klebestreifen, der beliebig
auseinander geschnitten werden kann. Verbinden muss man die Teile nur
mit 3 Leitungen (Plus, Masse, Daten). Man benötigt keine Vorwiderstände
...
Sofern man die LEDs nicht zur Beleuchtung in full power Weiss, sondern
nur zum Signalisieren in R, G, B verwendet, hält sich auch der
Stromverbrauch in Grenzen. Die Lib bietet auch Befehle zur
Helligkeitsbegrenzung.
Die - deutlich weniger romantische Variante - wäre es, anstelle realer
LEDs ein virtuelles Stellwerk auf einem Monitor zu restellen ...
chris schrieb:> Wozu brauchst du denn für die LEDs einen Input???
Wenn Du den Thread liest, fällt auf:
Rudi M. schrieb:> Allerdings würde ich anstelle der Reedkontakte Hallsensoren verwenden.
Übersetzt: Rudi will den tatsächlichen Istzustand abfragen.
Da frage ich jetzt, ob der µC damit überhaupt beschäftigt werden muss,
Endschalter und LED gehen in reiner Hardware. Aktuelle LEDs in weiß,
blau und grün sind schon unter einem mA eindeutig ablesbar.
jede LED braucht doch einen eigenen Input, damit LED "xyz" weiss, dass
der Taster "xyz" gedrückt wurde. Soweit meine Logik.
Wie geschrieben ist die Abfrage des Ist-Zustandes nicht unbedingt
erforderlich.
Auch die Anzeige des Soll-Zustandes wäre für mich o.k., da es sich um
eine relativ kleine Anlage handelt. Ausserdem weniger
Verdrahtungsaufwand.
@Roller:
ich hab´s nachgemessen, Du hast Recht. 5 Volt liegen ständig an.
An + und GND natürlich sowieso, ebenfalls an + und Steuerleitung.
In besagtem Video spricht der Autor allerdings von deaktivieren der
Servos.
Das habe ich falsch interpretiert.
Seiner Aussage nach wird mit "detach" das Zittern der Servos verhindert.
Rudi
Rudi M. schrieb:> jede LED braucht doch einen eigenen Input, damit LED "xyz" weiss, dass> der Taster "xyz" gedrückt wurde. Soweit meine Logik.
Dann schreibe das doch so auf, dann verstehen wir es alle:
Pro Weiche wird benötigt:
2 Eingänge für 2 Taster
1 Ausgang für zwei LEDs
1 Ausgang für das PWM Signal zum Servo
Ich finde den Vorschlag mit dem PCA9685 sehr gut, das ist mit Sicherheit
die einfachste Lösung, viele Servos anzusteuern. Dazu gibt es fertige
Arduino Libraries.
Für den Rest hast du dann wahrscheinlich schon genug Pins übrig.
Ansonsten benutze Schieberegister (74HC595 für Ausgänge und 74HC165 für
Eingänge) oder PCF8574 Chips mit I²C Bus. Auch dafür gibt es fertige
Arduino Libraries.
Alles über I²C laufen zu lassen hat den Vorteil, dass du den
Mikrocontroller besonders leicht durch jeden beliebigen anderen ersetzen
kannst. Sicher wird für Dich irgendwann WLAN interessant. Mit dem
Arduino Framework und einem ESP8266 Modul (z.B. NodeMCU oder Wemos D1)
dürfte dieser Wechsel ziemlich einfach sein.
Wenn du für die Weichenschaltung zwei Taster und nicht (wie von mir
angenommen)einen Schalter hast, dann brauchst du je Weichenservo 4 I/O.
Da reicht ein Arduino Mega ja leicht aus und es bleiben noch mindestens
12 I/O in Reserve.
Wenn du nicht vorhast das ganze wesentlich größer zu machen, würde ich
mir das mit Portexpander und dergleichen nicht antun. Das lässt sich bei
Bedarf immer noch problemlos nachrüsten wenn man die I2C-Leitungen
freilässt.
Anschauen oder besser nachmessen sollte man, was mit dem PWM-Pin beim
"detach" tatsächlich passiert. Ist der Pin dann hochohmig oder liegt er
auf einem festen Potential.
Hallo Rudi,
Servo 3 Pin? Klar einem Servo und 2 Taster zum stellen. Eine Lösung
wäre, pro Servo nur ein Taster und im Programm die Position merken, denn
wenn Rechts dann nach Links bei Tastendruck und wenn Links dann nach
Rechts. Somit nur ein Taster für jedes Servo, und schon ist der Pin für
die zwei LED frei. Eine Led wie oben mit R an Gnd und die andere am
selben Pin des Kontrollers mit R auf +5V.
somit nur 3 Pin:
1x Servo
1x Taster
1x 2 LED
Cool oder..
und Taster entprellen, und detach() ist gut dann Summen die Servo nicht
mehr, benötigen aber immer noch Strom.
Gruß
Oliver
char SW1;
if(digitalRead(T1) == HIGH) {
if (SW1 == 'R')
{
W1.attach(9);
W1.write(0);
SW1 = 'L'; // bin Links
delay(500);
W1.detach();
}
else
{
W1.attach(9);
W1.write(20);
SW1 = 'R'; // bin Rechts
delay(500);
W1.detach();
}
}
hallo Oliver,
ja das wäre cool !
Aber - beim Compilieren Deines Sketchs bekomme ich die Fehlermeldung
"expected unqualified-id before "if"
Ich kann da nichts falsches erkennen. Kannst Du einem Anfänger
weiterhelfen ?
Rudi
ja klar...
vorher war ja nur ein Teil vom Sketch, habe ich zu spät bemerkt.
Ich werde das jetzt mal ausprobieren
wenn das so klappt, wäre das die geniale Lösung
Rudi
hallo Oliver,
das verwirrt mich jetzt alles ein bisschen.
Könntest Du mir Deinen Sketch für nur ein Servo mit 2 LEDs abändern?
Evtl. für eine Arduino UNO. Einfach mal zum Ausprobieren.
So ist mir das unübersichtlich.
Die Ansteuerung mit nur 1 Taster wäre super.
Wenn ich selber ändere bzw. reduzieren will, bekomme ich Fehlermeldungen
die ich nicht ganz verstehe.
Meine Bitte ist vielleicht etwas unverschämt, aber mit 77 Jahren muss
ich mich da erst langsam einarbeiten
Rudi
Oliver R. schrieb:> ja nur die Taster, bitte noch entprellen sonst ist es eine glück Sache> mit den schalten...>> einfach aber schlecht...>>
1
> ... Schnipp ...
2
>
3
> if(digitalRead(T1) == HIGH) { //Taste gedrückt?
4
> delay (50);
5
> if(digitalRead(T1) == HIGH) { // immer noch gedrückt??
6
> if (SW1 == 'R')
7
> {
8
> W1.attach(9);
9
> W1.write(0);
10
> digitalWrite(T2, HIGH);
11
> SW1 = 'L'; // bin Links
12
> delay(500);
13
> W1.detach();
14
> }
15
> else
16
> {
17
> W1.attach(9);
18
> W1.write(20);
19
> SW1 = 'R'; // bin Rechts
20
> digitalWrite(T2, LOW);
21
> delay(500);
22
> W1.detach();
23
> }
24
> }
25
> }
26
>
27
> ... schnapp ...
28
>
Entprellen von Tastern ist natürlich immer gut, aber die Ergänzung in
deinem letzten Beispiel ist unnötig. Dein Beispiel davor funktioniert
genauso gut, da nach Tastendruck und erkannter Aktion erst mal 500 msec
(wegen delay(500)) nichts mehr abgefragt wird.
Der Nachteil der 1-Taster Lösung ist, wenn man zu lange auf die Taste
drückt, wechselt das Servo alle 500 msec die Position.
@Rudi
Weshalb müssen es Taster sein? Willst du mit Taster und LEDs einen
visuellen Streckenplan (Stellpult) bauen?
Mit einem simplen Ein/Aus Kippschalter wäre es etwas einfacher. Es
reicht eine Eingangsleitung und es muss nur der aktuelle Schaltzustand
abgefragt werden. Vor allem hast du damit automatisch den letzten
Zustand von Weichen und LEDs 'gespeichert', und kannst in beim
Einschalten des Prozessors wiederherstellen.
Bei einer Tasterlösung mußt du entweder immer den gleichen
Anfangszustand herstellen, oder die letzte Einstellung anderweitig über
einen Powerfail hinweg retten.
Rudi M. schrieb:> jede LED braucht doch einen eigenen Input, damit LED "xyz" weiss, dass> der Taster "xyz" gedrückt wurde. Soweit meine Logik.
Nein. Es reicht doch, wenn dein Prozessor weiß, dass Taster "xyz"
gedrückt wird und dann die LED "xyz" zusätzlich einschaltet - und die
andere aus.
Hast du meinen letzten Post angesehen?
Und mit obigem Vorschlag, nur einen Taster zum Umschalten zu verwenden,
sind es nur zwei Pins pro Weiche.
HildeK schrieb:
1
> VCC
2
> +
3
> |
4
> |
5
> V -> LED
6
> -
7
> |
8
> |
9
> .-.
10
> | |
11
> | |
12
> '-'
13
> |
14
> Output µC---o
15
> |
16
> .-.
17
> | |
18
> | |
19
> '-'
20
> |
21
> |
22
> V -> LED
23
> -
24
> |
25
> |
26
> ===
27
> GND
28
> (created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)
hallo Oliver,
zunächst vielen Dank für Deine Mühe.
Heute werde ich nicht mehr dazu kommen, das aufzubauen und zu probieren.
Trotzdem hoffe ich , dass ich baldmöglichst eine Erfolgsmeldung geben
kann.
bis dahin
und auch danke an HildeK.
die Schaltung mit 2 LEDs an einem Output habe ich probiert, funzt prima
!!
Grüssle aus dem Ländle
Rudi
Stefanus F. schrieb:> Wenn ich mir die Bilder ansehe, wird mir schwindelig.> Erscheinen die bei euch auch seltsam verzerrt?
Ja, kommt immer wieder vor. Mir ist die Ursache unklar. Ev. mit dem
falschen Bildbearbeiter gedreht?
Tipp: Klick auf den Filenamen des Bildes, es erscheint dann korrekt
(zumindest im Firefox).
Rudi M. schrieb:> jede LED braucht doch einen eigenen Input, damit LED "xyz" weiss, dass> der Taster "xyz" gedrückt wurde. Soweit meine Logik.
braucht die LED einen eigenen Input, auch an der Ampel?
oder weiß die Grüne nicht das sie nur an sein darf wenn die Rote NICHT
leuchtet.
> Wie geschrieben ist die Abfrage des Ist-Zustandes nicht unbedingt> erforderlich.> Auch die Anzeige des Soll-Zustandes wäre für mich o.k., da es sich um> eine relativ kleine Anlage handelt. Ausserdem weniger> Verdrahtungsaufwand.
du weisst doch wann dein Servo startet und stoppt, das wären die
Endlagen und da könntest du dir einen Merker setzen und die LED
einschalten
hallo Oliver,
bin jetzt mal auf die Schnelle Deinen Sketch gedanklich durchgegangen.
Ein paar Zeilen verstehe ich nicht:
a) was bedeutet die Zeile vor dem Setup
char SW1 = '0';
b) was bedeuten die Zeilen
if(digitalRead(T1) == HIGH) {
delay (20);
if(digitalRead(T1) == HIGH) {
if (SW1 == 'R')
c) W1.write(00);
W1.write(200);
ich lese das so: 00 ist linke Position
200 ist rechte Position
ist dann jeder Zwischenwert möglich? Ich benötige ca. 30 Grad
Drehwinkel.
Ich hatte jetzt noch keine Zeit zum Probieren und wäre für Deine
Aufklärung dankbar.
Rudi
Hallo,
1. nur zur Initialisierung: char SW1 = '0'; kann auch durch char SW1 =
'L';
ersetzt werden.
2. ist zur Entprellung des Taster, da aber nach der Servo Steuerung so
und
so 500ms gewartet wird ist das nicht nötig.
3. waren werte für mein Servo damit der sich im Video auch deutlich
bewegt,
sollte durch deine Werte ersetzt werden.
die 30° musste man durch ändern der Werte ermittel.
Gruß
Oliver
sodele,
Testaufbau am Breadboard mit Sketch von Oliver ist gemacht und läuft wie
gewünscht
beim ersten Tastendruck dreht das Servo nach links
beim zweiten Tastendruck dreht das Servo nach rechts
gleichzeitig wechseln sich die LEDs ab
und es werden nur 3 Pins am Arduino benötigt.
Einziger Schönheitsfehler ist, dass bei längerem Tastendruck das Servo
ständig hin- und her läuft.
Kann man das im Sketch evtl. noch ändern?
Ist jedoch auch so akzeptabel, da zur Weichenstellung ein kurzer
Tastendruck genügt.
Ein weiterer Wunsch wäre, die Servobewegung zu verlangsamen .
Aber das wird evtl. zu aufwändig und ist auch nicht unbedingt
erforderlich.
Das war jetzt also der Testaufbau am UNO. Wenn ich das am MEGA für 12
Weichen auch so hinkriege, bin ich happy.
Rudi
Rudi M. schrieb:> Einziger Schönheitsfehler ist, dass bei längerem Tastendruck das Servo> ständig hin- und her läuft.
dann lasse doch keinen weiteren Durchlauf zu bis nicht wenigstens der
Taster einmal losgelassen wurde.
hallo Joachim,
da hast Du sicherlich recht und klingt auch logisch.
Aber erkläre doch bitte einem Dummi, wie man das macht bzw. in den
Sketch einbringt.
Danke schon mal
Rudi
Rudi M. schrieb:> Aber erkläre doch bitte einem Dummi, wie man das macht bzw. in den> Sketch einbringt.
Ich kann zwar die Sketchsprache nicht, aber im Pseudocode geht das etwa
so:
1
if (Taste == HIGH) // Taste wurde gedrückt
2
{
3
delay (20); // einfachste Art der Entprellung, nach 20ms nochmals abfragen, ob noch der selbe Zustand herrscht.
4
if (Taste == HIGH)
5
{
6
// tu etwas: Weiche umschalten, LED umschalten
7
//
8
// anschließend warten, bis der Taster wieder auf LOW ist (hier: losgelassen wurde):
9
while (Taste == HIGH); // einfach warten und nichts tun, solange Taste auf HIGH steht
10
}
11
// hier ist Taste dann auf jeden Fall wieder auf LOW
hallo Oliver,
ich lösche den "alten" Inhalt von void loop und kopiere Deine neue
Zeilen da rein.
Bekomme dann aber Fehlermeldungen
kannst Du das bitte mal prüfen ?
Rudi
OssiFant schrieb:> Da kann man echt neidisch werden, wie jung Rudis Hände geblieben sind> (auf dem Video). War wohl Schreibtischtäter und Nivea-Großkunde :-)
hallo neidischer Ossi ohne Namen -
vielleicht schaust Du nochmals nach, von wem das Video ist....
wir Schwaben sagen in solchen Fälle "saudomms´´s G´schwätz"
jetzt hoffe ich trotzdem noch auf sachdienliche Posts
Rudi
danke Oliver,
für Deinen letzten Sketch und die Mühe, die Du Dir gemacht hast um mir
auf die Sprünge zu helfen.
Das ist jetzt genau das, was ich wollte - und es funktioniert SUPER !!!
Jetzt werde ich versuchen, das für die 12 Weichenantriebe auf dem MEGA
umzusetzen. Dank Deiner Unterstützung denke ich, dass ich das jetzt
alleine schaffe.
Danke auch an alle Anderen, die mir geholfen haben, Arduino besser zu
verstehen.
Grüssle
Rudi
Rudi M. schrieb:> hallo neidischer Ossi ohne Namen -> vielleicht schaust Du nochmals nach, von wem das Video ist....>> wir Schwaben sagen in solchen Fälle "saudomms´´s G´schwätz"
Lieber Rudi,
warum denn so unfreundlich? Deine Aussage passt doch eher auf Deine
Reaktionen :-)
OssiFant schrieb:> Da kann man echt neidisch werden, wie jung Rudis Hände geblieben sind> (auf dem Video).
ja Alk tötet Zellen :)
Rudi M. schrieb:> vielleicht schaust Du nochmals nach, von wem das Video ist....
der Hinweis war doch deutlich!
OssiFant schrieb:> warum denn so unfreundlich?
irgendwie verständlich wenn eener aus dem Mus-topp kommt!
der Thread mit der Frage war vom Autor: Rudi M. (ykabel)
Das Video von Autor: Oliver R. (roliver75)
OK man hätte es auf dem Silbertablett mit Kreidestimme servieren können,
aber bei dem Unterton:
OssiFant schrieb:> Da kann man echt neidisch werden, wie jung Rudis Hände geblieben sind> (auf dem Video).
schwang auch für mich unterschwellig "Lüge" mit, bezogen auf:
Rudi M. schrieb:> ich bin erstens 77
HildeK schrieb:> Ich kann zwar die Sketchsprache nicht, aber im Pseudocode geht das etwa> so:
Sketchsprache aha... willst Du sagen dass du kein C/C++ kannst?
Warum verwendest Du geschweifte Klammern? (C-shell? Java? JavaScript?
...?)
danke an alle, die mir mit sachdienlichen Antworten geholfen haben.
Nachdem die letzten Beiträge mit meinem Problem nichts mehr zu tun
haben, kann hier dicht gemacht werden
Gruss
Rudi
Hallo
Vielleicht kann mir bitte jemand helfen, ich habe die Weichensteuerung
für 5 Weichen programiert, leider funktioniert nur W1, kann sich jemand
bitte mal den Sketch anschauen ? Was mache ich falsch ??
Steve S. schrieb:> leider funktioniert nur W1
Beschreibe, was das Programm tun sollte und was es stattdessen tut.
Beschriebe schritt für Schritt, wie jemand dein Problem reproduzieren
kann, der nicht auf deinem Schoß sitzt.
Welcher Zusammenhang besteht zwischen deinem Fall und dieser Diskussion?
Wenn du schon die fette rote Meldung ignorierst, dann solltest du einen
guten Grund haben. Der wäre?
Hast du dich vergewissert, dass die gewählten Pins für PWM geeignet
sind? Welche Hardware verwendest du überhaupt? Gibt es keinen
Schaltplan, oder wenigstens ein Blockschaltbild?
Benutze bitte Code Tags, wenn du Quelltext einfügst. Die entsprechende
Anleitung steht direkt über dem Eingabefeld. Achte darüber hinaus, dass
der Quelltext vernünftig eingerückt ist. Das da oben ist so nicht
vernünftig lesbar. Ich verweigere, mich damit auseinander zu setzen.
Mach das erstmal schön!
Steve S. schrieb:> ich habe die Weichensteuerung> für 5 Weichen programiert, leider funktioniert nur W1, kann sich jemand> bitte mal den Sketch anschauen ?
Hab jetzt nur ganz kurz mal drübergeschaut, aber wenn Deine Einrückungen
einigermaßen zur Programmstruktur passen, dann dürfte der Code für die
Weichen 2-5 innerhalb von irgendeinem if/else Block von Weiche 1 stehen
und deshalb nur ausgeführt werden, wenn Weiche 1 gerade irgendwas macht.