Einsteiger Benötigt Hilfe -> "Output" auf masse schalten

Moin und Hallo zusammen,
Ich stehe noch sehr am Anfang mit Arduino und habe gleich zu Beginn eine Frage:

Ich habe hier ein Arduino UNO liegen und folgendes zu bewältigen:

Es Liegen 3 Kabel am Arduino an, sagen wir
1x "Masse/Grnd"
1x Scharfstellen
1x Auslösen... (Nein es ist keine bombe sondern eine Kamera :stuck_out_tongue_closed_eyes: )

wenn ich nun "Masse/Grnd" mit Scharfstellen "brücke" stellt die Kamera scharf,
brücke ich Masse/Grnd mit Auslösen so löst die Kamera aus..
Das brücken, bis hierhin, habe ich einfach durch zusammenhalten der Litzen getestet.

Folgender Ablauf schwebt mir vor:
Knopf (Auslöser auf dem Arduino) wird gedrückt, Scharfstellen Kontakt wird geschlossen > Delay 500ms > Auslösen Kontakt wird geschlossen > Delay 500ms > Alle Kontakte auf.

Ich habe mich etwas mit den Beispielen die im Arduino Coding Programm enthalten sind befasst und auch eine LED bei Tastendruck oder auch mit Delay zum Blinken gebracht, allerdings kam bei der LED natürlich eine spannung an, welche aber auf garkeinen Fall bei der Kamera ankommen darf. Also "nur" ein durchschalten auf "Masse"

Wie setze ich das am besten um?
Ich erwarte hier nicht das mir jemand den ganze code auf schreibt, allerdings wäre mir mit einem Ansatz wirklich geholfen.

Vielen Dank und einen schönen Abend.

Alex

Du willst die Taster deiner Kamera überbrücken?

Theoretisch könnte man einen Pin von Eingang (Tristate) auf Ausgang, Low schalten. Das ist aber sehr unsicher. Gerade wenn du Anfänger bist. Da hat man auch gleich einen Kurzschluss. Lass das lieber.

Um das vernünftig zu machen brauchst du etwas Elektronik. Schön sind dafür Analogschalter:

Andere Optionen:
Transistor in Emitterschaltung, Relais (in diesem Fall overkill), Optokoppler

Serenifly:
Du willst die Taster deiner Kamera überbrücken?

Theoretisch könnte man einen Pin von Eingang (Tristate) auf Ausgang, Low schalten. Das ist aber sehr unsicher. Gerade wenn du Anfänger bist. Da hat man auch gleich einen Kurzschluss. Lass das lieber.

Um das vernünftig zu machen brauchst du etwas Elektronik. Schön sind dafür Analogschalter:
http://www.ti.com/lit/ds/symlink/sn74hc4066.pdf

Andere Optionen:
Transistor in Emitterschaltung, Relais (in diesem Fall overkill), Optokoppler

um genau zu sein das Remotekabel was ich vom Aktuellen Empfangsmodul abgebaut habe.

Ist es nicht möglich das einfach "so" durchzuschalten? habe ein Relais-Modul hier,damit wäre das ja im prinzip machbar, aber halt Bauteiltechnisch etwas übertrieben.

was heisst sehr unsicher? wenn Code+Verkabelung stimmen ist alles in Butter, oder können Fehlfunktionen auftreten? würde bevor da gross was passiert sowieso mit dem Multimeter prüfen, was rauskommt und ggf wieviel.

Hatte eigentlich vor das nur mit dem Arduino zu realisieren, ungerne mit einem weiteren Bauteil (ausgeschlossen es geht nicht anders)

Wie schaut die schaltung mit dem Transistor aus? was Bedeutet Overkill bei den Relais?

danke für die Antwort!

Alex

Wenn du es dir zutraust, dass der Ausgang nie auf Output, High steht...

Mit den Relais hatte ich gemeint dass es einfach von der Größe her überdimensioniert ist. Damit schaltet man richten Strom. Außerdem sind die laut.

Transistor geht ein normaler NPN in TO-92. z.B. BC337. Arduino Pin mit 1k an die Basis. Emitter an Masse. Anderen Anschluss an den Kollektor.

Optokoppler wären am schönsten. Da hast du die Kamera komplett vom Arduino getrennt. Keine gemeinsame Masse. Die gibt es in DIP4, DIP6 und DIP8. Braucht nur einen Vorwiderstand für die Eingangs-LED. Also auch schön klein.

z.B.:
http://www.reichelt.de/Optokoppler/KB-817/3/index.html?&ACTION=3&LA=2&ARTICLE=76163&GROUPID=3046&artnr=KB+817

Muss nicht der sein. Da gibt es zig Typen und welcher das ist spielt hier kaum eine Rolle

Servus,

die lösung mit dem Optokoppler hat mich überzeugt, das sieht echt vernünftig aus und scheint für meinen Anwenungsfall die optimale Lösung zu sein, da die Kamera zudem Galvanisch getrennt wäre.

habe grade mal in der Apotheke geschaut, da gäbe es diesen hier ( der auch noch verpolungssicher ist wenn ich das richtig interpretiere :wink: )

http://www.conrad.de/ce/de/product/153979/Optokoppler-Vishay-SFH6206-2-DIP-4-SMD-Ausfuehrung-ACbidirectional?ref=list

davon dann 2 stk und ich wäre am ziel oder?

oder einen DIP 8 und ich habe mir ein bauteil gespart... zb:

http://www.conrad.de/ce/de/product/153505/Optokoppler-Vishay-ILD615-4-DIP-8-Ausfuehrung-PhototransistorDual?ref=searchDetail

was für ein Vorwiderstand muss ich noch dazwischenlegen? nicht das ich es mir jetzt nicht ausrechnen könnte, aber bin mir noch recht unsicher in der ganzen materie, ich hoffe das festigt sich in Zukunft. Brauche ab zu einfach jemand der mich auf den Sattel Hilft :wink:

lg alex

Hallo,

Optokoppler scheinen mir auch die richtige Lösung zu sein. Als ich selbst mal sowas für meine Pentax basteln wollte, bin ich nach einigen Rückfragen im DSLR-Forum auch auf die Optokoppler-Lösung gekommen. Ehe ich das aufbauen konnte, habe ich aber eine andere Kamera bekommen und brauchte diesen Auslöser nicht mehr. Die andere Kamera ist auch schon wieder weg, aber 5 m geschirmtes Kabel, 2,5 mm Klinkenstecker und zwei Optokoppler liegen immer noch hier rum XD

Falls Du Dir mit dem Anschluss nicht sicher bist, hier ist das beschrieben (mit Beispiel-Sketch).

Gruß,
Ralf

Habe gerade ähnliches für meine Kamera gebaut. Lief mit einem 4066 auch, habe mich dann aber doch für BS170 Transistoren entschieden.
Gemeinsames GND sehe ich nicht als Problem.

Fur den Optokoppler braucht Du aud der LED -Seite einen Vorwiderstand.
Auf der Kameraseite bruchst Du keine Widerstände.

Der Vishay-SFH6206-2 hat auf der Eingangsseite 2 Antiparalell geschaltete LED darum ist da die Polung egal. Am ausgang muß der Emittor auf die negative Seite der Fernauslösung geschaltet werden. Dieses Modell bringt keine Vorteile.

Grüße Uwe

the_kid:
http://www.conrad.de/ce/de/product/153505/Optokoppler-Vishay-ILD615-4-DIP-8-Ausfuehrung-PhototransistorDual?ref=searchDetail

was für ein Vorwiderstand muss ich noch dazwischenlegen?

Optokoppler gehen i.d.R. mit 10-20mA. Wenn wir mal ins Datenblatt unter "Electrical Characteristics" schauen:

IF = 1,15V
VF = 10mA

Daher R = (5V - 1,15V) / 10mA = 385 Ohm

Also z.B. 330, 360 oder 390 Ohm nehmen

Hallo,

so habe mir Optokoppler besorgt, und nen Poti-Widerstand um das dann genau einzustellen,
das Arduino hat nämlich 4,45 V geliefert anstatt 5V, und IF bei meinem Opto = 1,3V,
macht laut der Formel 315 OHM.

Ich habe allerdings den Strom am Optokoppler gemessen mit dieser Einstellung und er liegt bei ca 1,15 V, dann habe ich den Widerstand am Poti leicht verringert und bin auf 1,28 V gekommen, wo der Optokoppler dann auch schaltet. (4N35 Übrigends, was anderes hatten sie nicht da in der Apotheke)

Also es funktioniert! Ich kann mit dem Arduino mit dem einfach Bsp. Code von "BLINK" den Kontakt im Sekundentakt schliessen/öffnen, alles wunderbar....

Die nächste Sache ist die.. ich möchte ja nun nicht nur das Arduino anschliessen und den Kontakt auf/zu -gehen lassen sondern das ganze, mit einem Knopf steuern.

Dazu habe ich ganz einfach das Bsp: "BUTTON" genommen und erhoffte mir damit eine lösung...

// constants won't change. They're used here to 
// set pin numbers:
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);      
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);     
}

void loop(){
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {     
    // turn LED on:    
    digitalWrite(ledPin, HIGH);  
  } 
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW); 
  }
}

Zum Testen habe ich nun eine LED an die Ausgänge des Optokopplers geschaltet, mit dem "BLINK" hat es ja funktioniert.

wenn ich jetzt den Programmcode "BUTTON" aufs Arduino schmeisse, leuchtet die LED relativ schwach, ohne das der Knopf gedrückt wurde und wenn ich den Knopf dann drücke geht die LED aus... wenn ich den Code richtig interpretiere sollte das doch grade andersrum der Fall sein, oder irre ich mich da?

Bis hierhin bereits vielen Dank für die Antworten, es hat mir sehr weitergeholfen, aller Anfang ist schwer :slight_smile:

Alex

Das ist für einen Taster mit Pulldown. Hast du den auch so verdrahtet? Weil, wenn man sich mit Elektronik etwas auskennt ist man es eigentlich gewohnt Pullups zu verwenden. Und dann ist das invertiert.

Die LED ist so angeschlossen?
http://henninger.langeder.org/wp-content/uploads/Optokoppler.gif
Also Emitter an Masse und LED und Vorwiderstand am Kollektor (ohne den Taster natürlich! Ich habe nur kein anderes Bild gefunden)

Dass die LED schwach leuchtet sollte eigentlich nicht sein.

ok das ging mir für mich nicht hervor.
ich habe einfach einen Taster von Masse auf Pin2 gelegt, wenn Taster gedruckt > Kontakt geschlossen.
gibts da nicht auch nen "einfachen" code für ?

LED ist so angeschlossen, habe eben mal das Messgerät auf Durchgang an die Kontakte gehalten um bei KONTAKT ein Piepsen zu kriegen, dabei fiel auf das es ein relativ hochfrequentes Piepsen gab, was darauf schliessen lässt wieso die LED nur halbhell leuchtete...
beim drücken des Knopfes ist auch das Piepsen weg.

Dann musst du das machen:
pinMode(buttonPin, INPUT_PULLUP);

Dann werden die internen Pullups verwendet:

Der Taster ist dann HIGH wenn nicht gedrückt und LOW wenn gedrückt. Also die Bedingungen im Code einfach herumdrehen.
if (buttonState == LOW)

Es kann sein dass du dir durch den offenen Eingang Störungen einfängst du dann willkürlich als High und Low interpretiert werden und ständig die LED schalten.
EDIT: Mit einem Pullup oder Pulldown Widerstand ist das nicht der Fall. Die sind nötig weil man digitale Eingänge immer auf ein festes Potential legen muss.

merci, geht ! dankeschön!

wie kann ich zb:

digitalWrite(ledPin2, HIGH);

zb für 1000ms auf HIGH stehen lassen, auch wenn der taster NICHT mehr gedrückt ist?

alex

digitalWrite(ledPin2, HIGH);
delay(1000);
digitalWrite(ledPin2, LOW);

Jetzt wird gleich jemand kommen und sagen, dass man nie, nie auf keinen Fall delays verwenden darf. :slight_smile:

Das Programm blockiert dann einfach x ms und kann auf sonst nichts reagieren. Das ist unter vielen Umständen schlecht. Aber wenn du in der Zeit nichts machen willst ist es ok. Gerade bei sowas muss man das nicht unbedingt anders lösen.

Für nicht-blockierende Verzögerungen gibt es millis():

Da ist aber etwas mehr Logik nötig um die abgelaufene Zeit abzufragen:

das habe ich schon probiert, ich befinde mich allerdings in einem if/else loop,

 if (buttonState == LOW)
  {  

    // turn LED on:    
    digitalWrite(ledPin, HIGH); 
    digitalWrite(ledPin2, HIGH);  

  } 
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW); 
    digitalWrite(ledPin2, LOW); 
  }

das heisst im moment bei gedrücktem knopf gehen beide leds an.
nun will ich den knopf nur einmal kurz drücken, die erste led soll aber noch 1000ms länger an sein.

EDIT: danke, irgendwie geht es doch... kein plan was ich getippt habe, aber es schien mir genauso, wars nur nicht... DANKE :wink: !

Ist hier vielleicht auch nicht so wichtig, aber allgemein verweise ich immer darauf sich mal mit den verfügbaren Datentypen[1] des Arduinos auseinander zu setzten.
Digitale Schaltzustände würde ich immer mit boolean deklarieren, da sie nur 1 oder 0 bzw. true oder false enthalten können.
Man gewinnt dadurch auch wieder ein wenig Speicherplatz.
Wie gesagt nur ein Tipp.

Edit:
Du brauchst den Zustand des Schalters auch nicht extra in eine Variable schreiben. Du kannst den Read-Befehl auch im Programm direkt verwenden.

[1]http://arduino.cc/de/Reference/HomePage

danke für den tipp, werd das mal verinnerlichen.. !