Arduino Hilfe

OP #5309030
Lesenswert?

Hallo, ich kenne mich mit Arduino-Programmierung noch nicht aus.
Vielleicht wäre jemand so nett und hilft mir bei meinem Projekt.
Die Aufgabe ist eigentlich ganz einfach...siehe Schaltplan im Anhang.

Wenn der Taster S1 betätigt wird, soll sofort das Relais anziehen und 
nach einer bestimmten Zeit wieder abfallen. Also eine 
Ausschaltverzögerung.
Die Zeit soll im Millisekundenbereich sein z.B. 90ms.

Mein Code bisher:

}const int reed = 2;
const int relay = 8;
int reedstatus = 0;

void setup() {
  // put your setup code here, to run once:
pinMode(relay, OUTPUT);
pinMode(reed, INPUT);

}

void loop() {
  // put your main code here, to run repeatedly:


Vielen Dank im Voraus.
MfG6
Angehängte Dateien:
#5309076
Lesenswert?

Hallo,

wenn Du pinMode gefunden hast, sollte Dir digitalRead() und 
digitalWrite() auch begegnet sein. delay() vermutlich auch und für den 
Anfang durchaus erstmal nutzbar.

Ich kenne zwar Dein Relais nicht, aber mit etwas Pech hat das nach 90ms 
gerade mal fertig angezogen. Ein Relais ist Mechanik...

Gruß aus Berlin
Michael
#5309096
Lesenswert?

Dan N. schrieb:
> Wenn der Taster S1 betätigt wird, soll sofort das Relais anziehen und
> nach einer bestimmten Zeit wieder abfallen. Also eine
> Ausschaltverzögerung.

zuerst musst du mal dein Ziel definieren!

was wenn der Taster nie losgelassen wird (oder hängt)?
startet die Zeit nach Taster drücken oder nach Taster loslassen?

wie du schreibst also sofort nach Taster drücken.....

nur wenn der Taster nie losgelassen wurde (oder hängt), was dann?
was wenn dein Relais 100ms bis zum Anziehen braucht, soll es dann nicht 
losgehen weil deine Zeit ja 90ms vorgibt? (das würde bedeuten man lässt 
das Relais abfallen bevor es richtig angezogen hatte)

Ich würde das auch nicht Ausschaltverzögerung nennen....

Für mich wäre eine Ausschaltverzögerung,

Taster wird gedrückt, Relais zieht an solange bleibt das Relais 
angezogen
Taster wird losgelassen und dann erst 90ms später wird auch das Relais 
abgeschaltet.
Gast #5309116
Lesenswert?

Wolfgang schrieb:
> kenny schrieb:
>> Wofür soll R2 gut sein?
>
> Der wird wohl einen Spannungsteiler mit dem Schalter bilden.
> (Bei der unkonventionellen Zeichnungsweise allerdings schwer zu
> erkennen)
>
> Trotzdem sollt natürlich der Gnd-Pin des Arduino mit Gnd verbunden sein.

Genau das kommt mir spanisch vor :)
Denke auch hier liegt ein Fehler im Schaltplan vor.
R2 sorgt für einen Spannungsabfall, somit ist der Arduiono GND immer 
größer als GND.
OP #5309119
Lesenswert?

Ok, dann versuche ich es anders zu formulieren.
Sobald der Kontakt S1 geschlossen ist soll für eine einstellbare Zeit(in 
meinem Beispiel hab ich mal 90ms genommen)am Ausgang D8 ein Highsignal 
sein, unabhängig davon, ob S1 wieder öffnet oder nicht.

@kenny: R2 ist dazu da, um Störsignale und Spannungsschwankungen 
abzuleiten.
Gast #5309120
Lesenswert?

kenny schrieb:
> Genau das kommt mir spanisch vor :)
> Denke auch hier liegt ein Fehler im Schaltplan vor.
> R2 sorgt für einen Spannungsabfall, somit ist der Arduiono GND immer
> größer als GND.

Denke dir den Widerstand zur Brücke, und der Taster macht einen 
Kurzschluss.
Nein, der gehört da hin.
Gast #5309137
Lesenswert?

Im Arduino Umfeld ist es nicht ungewöhnlich, dass man die 
Netzteil-Buchse und den integrierten Spannungsregler des Arduino Boardes 
verwendet. Insofern ist das Arduino Board häufig selbst die 
Spannungsquelle (etwas vereinfacht betrachtet).
Gast #5309161
Lesenswert?

Arduino F. schrieb:
> kenny schrieb:
>> Wofür soll R2 gut sein?
>
> Sowas nennt man öfter mal auch Pulldown Widerstand.
> Eigentlich recht üblich, die Verwendung von Pulldowns.

Üblicher, zumindest bei Mikrocontrollern, ist die Verwendung von Pull-Up 
Widerständen. Für viele Anwendungen reichen sogar schon die intern 
vorhandenen. Seinen pinMode-Wortschatz muss man dazu noch um 
"INPUT_PULLUP" erweitern.
Der Taster schaltet dann einfach gegen Gnd.
OP #5309174
Lesenswert?

Stefan U. schrieb:
> Im Arduino Umfeld ist es nicht ungewöhnlich, dass man die
> Netzteil-Buchse und den integrierten Spannungsregler des Arduino Boardes
> verwendet. Insofern ist das Arduino Board häufig selbst die
> Spannungsquelle (etwas vereinfacht betrachtet).

So war es ja auch gedacht...der Arduino wird extern mit 9V versorgt, 
d.h. dass der eingezeichnete GND mit Masse der 9V-Versorgung verbunden 
ist.


Joachim B. schrieb:
> Dan N. schrieb:
>> Sobald der Kontakt S1 geschlossen ist soll für eine einstellbare Zeit(in
>> meinem Beispiel hab ich mal 90ms genommen)am Ausgang D8 ein Highsignal
>> sein, unabhängig davon, ob S1 wieder öffnet oder nicht.
>
> das funktioniert halt nicht!
>
> schrieb ich ja schon,
> aber egal

und wieso funktioniert das nicht? Es muss doch möglich sein, mit einem 
Mikrocontroller einen Ausgang für eine bestimmte Zeit auf high zu 
schalten?
Gast #5309203
Lesenswert?

Hast schon mal irgendein Arduino Tutorial durchgearbeitet? Als erstes 
lässt man gerne eine LED Blinken, und als zweite Übung kommt dann oft so 
etwas ähnliches, was du vor hast.

Wir zögern absichtlich damit, Dir dieses Programm vor zu kauen. Arduino 
ist eine Lern-Plattform und die Aufgabe ist sehr einfach. Das kannst und 
sollst du selber lernen. Das Schwierigkeitsniveau entspricht in etwa dem 
Kochen von Nudeln in einem Anfänger-Kochbuch.

Fertige Programme muss man kaufen, gegen angemessene Bezahlung findest 
du hier sicher jemanden, der das für Dich macht.
#5309217
Lesenswert?

Ich weiß nichts obs wirklich stimmt aber das wäre jetzt mal ein grobes 
Beispiel. Pins habe ich frei Schnauze mal gewählt. Den Taster kann man 
auch noch entprellen.


void setup()
{
  pinMode( 5 , INPUT);
  pinMode( 8 , OUTPUT);
}

void loop()
{
  if (digitalRead(5))
  {
    digitalWrite( 8 , HIGH );
    delay( 90 );
    digitalWrite( 8 , LOW );
  }
}
#5309254
Lesenswert?

Dan N. schrieb:
> ich denke
> jetzt macht das mehr sinn...

na ja, mehr Sinn würde ein pullup machen -> R und Taster getauscht, dann 
wäre beim Verkabeln und Kurzschluß wenigstens der Strom begrenzt!

Die Abfrage sollte dann nach 0 erfolgen, also auch umgedreht.

Üblicherweise sind oft mehr interne pullups als pulldowns verbaut und 
mit externen pullups vergisst man die nicht einzuschalten sondern kann 
ausserdem noch die Störunempfindlichkeit beeinflussen, hochohmig bei 
kurzen Leitungen und in störarmer Umgebung, niederohmiger wenn es 
gebraucht wird.
#5309275
Lesenswert?

Stefan U. schrieb:
> du verwirrst den TO nur unnötig!

sorry ich wollte dir nicht ins Handwerk pfuschen, weil du ja das sonst 
übernimmst :)

also pullup vor pulldown ist störsicherer!

Zu den anderen Fragen sollte der TO noch mal nachdenken, das muss er 
definitiv selber übernehmen!

Du bist ja einer schrieb:
> Hat der TO in seiner Funktionsbeschreibung irgendetwas davon gesagt,
> dass die LED alle 90ms kurz ausgehen soll?

und was ist wenn die 90ms nicht zur mindest ON Zeit passen, trotzdem 
abschalten oder nicht erst einschalten?
OP #5309313
Lesenswert?

Ich versuche jetzt mal zu kommentieren, mal sehen ob ich es einigermaßen 
verstanden habe.


> void setup()
> {
>   pinMode( 5 , INPUT);      //hier wird der Pin 5 als INPUT deklariert
>   pinMode( 8 , OUTPUT);     //hier wird der Pin 8 als OUTPUT deklariert
> }
>
> void loop()
> {
>   if (digitalRead(5))         //hier wird abgefragt, ob Pin 5 high ist
>   {
>     digitalWrite( 8 , HIGH ); //wenn Pin 5 high ist,dann geht Pin8 auf High
>     delay( 90 );              //Zeitverzögerung 90ms
>     digitalWrite( 8 , LOW );  //wenn 90ms abgelaufen sind,geht Pin8 auf low
>   }
> }

Stimmt das so in etwa??
Gast #5309345
Lesenswert?

guest schrieb:
> So wie es jetzt ist zieht Dein Relais sofort wieder an, wenn
> Du den Finger nicht schnell genug vom Taster nimmst.

PS: Um genau zu sein wird Dein Relais garn nicht erst abfallen solange 
der Taster gedrückt ist. So ein µC ist im Vergleich zu einem Relais 
rasend schnell, der hat das Relais schon wieder eingeschaltet, bevor 
dieses überhaupt mitbekommen hat, daß es abschalten soll.
Gast #5309357
Lesenswert?

Dan N. schrieb:
> Stimmt das so in etwa??

Na ja. Der Ausgang geht für 90ms auf High, wenn der Taster gedrückt 
ist. Laut deiner ursprünglichen Aufgabenstellung sollte für die Zeit 
auf High gehen, wenn der Taster gedrück wird.
Im einen Fall fragst du den aktuellen Zustand ab, im anderen Fall 
reagiert der Ausgang auf eine Zustandsänderung.
#5309376
Lesenswert?

Wolfgang schrieb:
> Dan N. schrieb:
>> Stimmt das so in etwa??
>
> Na ja. Der Ausgang geht für 90ms auf High, wenn der Taster gedrückt
> ist. Laut deiner ursprünglichen Aufgabenstellung sollte für die Zeit
> auf High gehen, wenn der Taster gedrück wird.
> Im einen Fall fragst du den aktuellen Zustand ab, im anderen Fall
> reagiert der Ausgang auf eine Zustandsänderung.

Sicher? Hab doch extra das else weggelassen :-(

@Dan
http://starthardware.org/arduino-programmieren/
#5309379
Lesenswert?

Stefan U. schrieb:
> Alles gute Fragen. Willkommen in der Welt der Softwareentwickler.

das musste ich schon vor 30 Jahren lernen, man entwickelt ein Prüfmittel 
und testet die Tasten die gedrückt werden sollen!

Im Prüffeld wurden wir immer wieder überrascht was passiert wenn die 
Bediner mal andere Tasten drücken was der Entwickler nicht vorgesehen 
hatte!

Heute stelle ich fest bei online Bestellung kann ich 4 Adresszeilen 
eingeben mit je 40 Zeichen, aber egal wie ich es anstelle,

mal fehlt auf dem Adressaufkleber die Adresszusatzbezeichnung der 
Abteilung, kann nicht geliefert werden
mal wird auf dem Adressaufkleber nur 20 Zeichen gedruckt, kann nicht 
geliefert werden

mal beides und immer wieder kommen deswegen Bestellungen nicht an.

Das größte Ärgernis der heutigen Zeit, ich frage mich ob die heutigen 
Programmierer alle billige Computerinder oder 12-jährige 
Hobbyprogrammierer sind, gerade im online Handel könnte man doch 
erwarten (professionell) das sowas geprüft wird.
#5309409
Lesenswert?

Dan N. schrieb:
> Tastendruck zwei Ausgänge
> kurzschließen?

nicht wirklich

er kann 2x GND ausgeben oder 2x VCC

wenn es sich um sehr ähnliche Spannung handelt die frei hängen zum 
Arduino doer gleich angebunden sind geht das bedingt.

Er kann keine 48V= oder 230V~ zusammenbringen!

Eine LED mit 20mA die am VCC vom Arduino mit RV hängt kann er wohl nach 
+ oder GND bringen, aber keinen LED Stripe mit 12V oder 10A
#5309436
Lesenswert?

fast schrieb:
> aus reiner Neugier, woran liegt das?

möglicherweise an den Pegeln, es scheint wohl leichter für Störungen zu 
sein den pulldown nach oben zu heben als den pullup nach unten zu 
befördern.

Für die high Erkennung genügt wohl meist weniger Spannung, sagen wir 
1,5V bei 5V.

Das low zur Erkennung macht der Taster nach low besser als der R mit 
seinen kOHM

ansonsten frage die ICs, ich bin nicht aus Silizium.
OP #5309502
Lesenswert?

Andy H. schrieb:
> Ich weiß ja noch gar nicht was er wirklich will. Jetzt soll er
> sich halt mal Gedanken machen und einlesen. Darum habe ich ihm ja einen
> Link geschickt.

Danke für den Link. Ich werde morgen mal rumprobieren.

Also, zur Erklärung. Ich hab früher mal eine Schaltung gebaut fürs 
Motorrad. Einen so genannten Schaltautomaten. Den hab ich mit einem 
NE555 und Poti zur Einstellung der Abfallzeit vom Relais gebaut. Das 
Teil hat auch funktioniert. Aber jetzt möchte ich es umbauen auf uC, 
damit ich eben die Zeit genau einprogrammieren kann. Das Relais soll 
lediglich für kurze Zeit die Zündung unterbrechen. Der S1 ist ein 
Reedkontakt und ist am Schalthebel montiert. Der Reedkontakt ist so 
montiert,dass der Kontakt bei Betätigung des Ganghebels,jedoch vor dem 
tatsächlichen Gangwechsel schließt und den D2 auf high setzt. Das Relais 
soll für eine Zeit zwischen 65 und 75ms die Zündung unterbrechen.
Zur Info: Das ganze wird nur auf der Rennstrecke verwendet,also alles 
legal.

Das mit dem kurzschließen der Ausgänge vergisst ihr am besten wieder, da 
hatte ich einen groben denkfehler! Genau das Gegenteil ist nämlich der 
Fall. Wenn ich das ganze ohne Relais machen wollte, dann müsste ich die 
zwei Leitungen der Zündung nehmen und an zwei Ausgänge des uC 
anschließen. Ist es dann möglich,diese zwei Ausgänge mittels uC 
dauerhaft zu verbinden und eben kurzzeitig zu öffnen?
Gast #5309689
Lesenswert?

> Für die high Erkennung genügt wohl meist weniger Spannung

Bei Arduino gelten ungefähr die gleichen Schwellwerte wie für allgemeine 
CMOS Logik:

  * High = mehr als 2/3 der Versorgungsspannung
  * Low = weniger als 1/3 der Versorgungsspannung

Der verbotene Bereich dazwischen liegt genau in der Mitte. Aufgrund des 
symmetrischen Verhaltens sehe keinen Vorteil beim Pull-Down Widerstand 
verglichen mit dem Pull-Up Widerstand.

Wenn wir hier TTL Pegel hätten, würde ich jedoch zustimmen.
#5309726
Lesenswert?

Stefan U. schrieb:
> Aufgrund des
> symmetrischen Verhaltens sehe keinen Vorteil beim Pull-Down Widerstand
> verglichen mit dem Pull-Up Widerstand.

musst du nicht sehen, fühle es einfach!

Baue Geräte und prüfe was besser funktioniert!
Es bleibt dabei, bei pullup ist der Strom auf der Strippe begrenzt, bei 
pulldown mit Taster nach VCC eben nicht wenn der Taster gedrückt wird 
und irgendwo ein GND Bezug reinkommt.
Gast #5309772
Lesenswert?

Joachim B. schrieb:
> Es bleibt dabei, bei pullup ist der Strom auf der Strippe begrenzt, bei
> pulldown mit Taster nach VCC eben nicht wenn der Taster gedrückt wird
> und irgendwo ein GND Bezug reinkommt.

Ich benutze ebenfalls Pullup und Kontakte gegen GND.
Aber das, was du bezüglich des Stromes sagst, kann man genauso gut auch 
andersherum sagen. Hier ist der Strom auch nicht begrenzt, wenn die 
geschaltete Leitung von irgendwoher einen VCC-Bezug hat. Das kann man 
drehen und wenden, man bekommt immer eine Lösung mit Vorteilen und eine 
mit Nachteilen...
#5309777
Lesenswert?

Sumo schrieb:
> Das kann man
> drehen und wenden, man bekommt immer eine Lösung mit Vorteilen und eine
> mit Nachteilen...

ist nur meine Erfahrung, üblicherweise sind pullup mit Taster nach GND 
sicherer, ein Indiez könnte sein das es mehr intern schaltbare pullups 
-> AVR gibt oder I konst Quellen aus VCC -> PCF8574(a) als pulldown 
Widerstände.

Es mag theroretisch egal sein und es mag Ausnahmen geben wo es genau 
anders besser läuft, ich kann nur von meinen "Erfahrungen" und den von 
anderen berichten die mit pulldowns weniger Erfolg hatten.
Gast #5309784
Lesenswert?

Joachim B. schrieb:
> ist nur meine Erfahrung,

Ich will das ja auch nicht schlecht reden. Ich verwende wie gesagt auch 
Pullup's und keine Pulldown's. Aber das Argument "was passiert bei einem 
Kurzschluss mit GND-Bezug" sollte man auch mal gegenteilig betrachten. 
Nichts anders wollte ich tun, ok? :-)
#5309791
Lesenswert?

Sumo schrieb:
> Aber das Argument "was passiert bei einem
> Kurzschluss mit GND-Bezug" sollte man auch mal gegenteilig betrachten.

klaro nur ist es leichter auf GND zu treffen als auf VCC

Aktive Leitung mit VCC ohne R trifft öfter auf GND, Masseflächen, 
Schirmbleche, Chassis uvam. als man auf mit GND auf echte VCC trifft.

Nichts anderes wollte ich sagen.
OP #5310281
Lesenswert?

So ich hab jetzt mit verschiedenen Delays usw. herumprobiert.
Ich bin jetzt zu einem Ergebnis gekommen, bei dem ich denke, dass es 
soweit passt:

void setup()
{
  pinMode( 2 , INPUT);
  pinMode( 8 , OUTPUT);
}

void loop()
{
  if (digitalRead(2))
  {
    digitalWrite( 8 , HIGH );
    delay( 70 );
    digitalWrite( 8 , LOW );
    delay(1000);
  }
}

Meine Simulation mit dem Relais und LED war erfolgreich.

Jetzt bliebe nur noch das Problem mit der anderen Variante, indem man 
das Relais komplett weglässt.
Ich habe leider keine Ahnung wie das dann softwaretechnisch 
funktionieren könnte...jemand eine Idee?

Auf jeden Fall ein Dankeschön an Alle bisher...
Angehängte Dateien:
OP #5310383
Lesenswert?

Andy H. schrieb:
> Da würde mir nur einfallen die Zündung über einen z.B. Mosfet zu
> aktivieren und diesen dann bei Bedarf wegzuschalten.

Ich denke da eher an was ganz Einfaches. Ist es möglich dem uC einen 
Befehl zu geben, in dem ich z.B. D5 mit D6 intern verbinde? Und diese 
Verbindung durch einen weiteren Befehl kurzfristig öffne? Ist sowas 
generell realisierbar?

Andy H. schrieb:
> Da wird es ja mit Spannungen über 100 Volt gehen denk ich mal.

Nein. Der Zündkreis hat auch nur 12 Volt.
#5310408
Lesenswert?

Dan N. schrieb:
> Andy H. schrieb:
>> Da würde mir nur einfallen die Zündung über einen z.B. Mosfet zu
>> aktivieren und diesen dann bei Bedarf wegzuschalten.
>
> Ich denke da eher an was ganz Einfaches. Ist es möglich dem uC einen
> Befehl zu geben, in dem ich z.B. D5 mit D6 intern verbinde? Und diese
> Verbindung durch einen weiteren Befehl kurzfristig öffne? Ist sowas
> generell realisierbar?
>
> Andy H. schrieb:
>> Da wird es ja mit Spannungen über 100 Volt gehen denk ich mal.
>
> Nein. Der Zündkreis hat auch nur 12 Volt.

Der Zündkreis ja, aber du kannst ja für z.B. 100ms nicht die Versorgung 
der Zündanlage unterbrechen oder? Oder mal so gesagt, was unterbrichst 
du mit dem Relais? Wirklich nur die Stromversorgung zur Zündanlage? Ich 
bin in sowas nicht fit.
Gast #5310436
Lesenswert?

Dan N. schrieb:
> mit verschiedenen Delays

Delay ist meistens Pfusch. Für die Aktivzeit des Relais ist das OK, weil 
der µC nichts anderes zu tun hat. Aber dann delay(1000) - nee, so nicht.

Abgesehen davon kommen mir 1000ms ganz schön lange vor, wenn mal zwei 
der drei Gänge zügig gerissen werden sollen?

Man kann die Taste fragen und solange warten, bis sie wieder frei ist
(aus einer meiner Geräte kopiert):

  do {  // warten bis Taste wieder frei
    delay (10);
  }
  while (digitalRead(Taste) == HIGH);

> anderen Variante, indem man das Relais komplett weglässt.
> Ich habe leider keine Ahnung wie das dann softwaretechnisch
> funktionieren könnte...jemand eine Idee?

Ob ein Relais oder Transistor gesteuert wird, ist für die Software ohne 
Bedeutung. Finde Dich damit ab: Der µC direkt kann das nicht, da muss 
ein spannungsfestes Schaltglied zwischen.

Dan N. schrieb:
>> Da wird es ja mit Spannungen über 100 Volt gehen denk ich mal.
> Nein. Der Zündkreis hat auch nur 12 Volt.

Na doch, da ist ein aus Sicht der Elektronik ziemlich unangenehmes 
Bauteil drin: Die Zündspule. Die erzeugt eine deutlich hohe 
Gegenspannug, weit über den 12 Volt.

Irgendwie beschäftigt mich noch die Frage, ob Deine Trennelektronik 
eigentlich keinen ungewollten Zündfunken zur falschen Zeit verursachen 
könnte.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren