Mein erstes Projekt, reicht diese Hardware?

Hallo Hallo,

ich wage mich nun auch mal an ein kleines Arduino-Projekt, wollte aber bevor ich mich ausstatte fragen ob mein Vorhaben mit diesen Teilen realisierbar ist oder ob ich mehr benötige.
Das Ziel ist ganz einfach, der Arduino bekommt ein Signal von einem Relais, und soll eine Email versenden.
Leider kann ich gerade noch nichts genaueres zu dem Eingangssignal sagen, nehmen wir einfach mal an ich bekomme 5V.
Meine C-Kenntnisse sollten denke ich reichen um mit eurer Hilfe das Programm auf die Beine zu stellen.
Rausgesucht habe ich mir nun folgendes:
http://www.ebay.de/itm/271394692895?ssPageName=STRK:MEWAX:IT&_trksid=p3984.m1438.l2649

Hoffe die Infos reichen fürs erste und schonmal Vielenk Dank für eure Hilfe :slight_smile:

Ja reicht dafür aus

Sollte es ein Relais sein, verwende beim PinMode INPUT_PULLUP und verbinde das Relais mit dem Input Pin
und GND, dann zieht das Relais den Pin auf GND und du kannst es im Programm abfragen.

Das Signal aufwändig zu entprellen ist wohl nicht notwendig, je nach Schalthäufigkeit reicht denke ich
ein kleiner Timer dass maximal 1 Signal alle X Sekunden möglich ist. ALso beim digitalRead(pin)==LOW AND (millis()-timer)>5000 den timer=millis()
setzen und wie im text beschrieben fragen, bis X Sekunden vergangen sind.

millis gibt glaube ich ein unsigned long als Datentyp zurück. DIeser wird irgendwann überlaufen nach 30 Tagen oder so

Zum Entprellen reicht es, wenn du nach dem Email Senden ein delay beliebiger Größe machst. Am einfachsten deutlich länger als das Relais angezogen ist. ( Oder sollen, solange das Relais an ist, dauernd emails gesendet werden ? )

Ansonsten prellt ein Relais-Kontakt auch eventuell mal beim Abfallen.

Die meisten Mail Server sind übrigens pingelig, von wem und wie sie beauftragt werden. Da sehe ich die größere Aufgabe ...

Hm... das Relais ist leider solange geöffnet, bis ich es manuell zurücksetze (könnten also theoretisch mehrere Stunden sein), es soll aber natürlich nur eine E-Mail gesendet werden.

Musst du dir eben merken, dass die mail schon gesendet wurde, und diesen Merker zurücksetzen, wenn das Relais wieder zurück geht ( und da auch ein kleines entprell-delay vorsehen ) .

Ok ich bin gerade ziemlich überfordert :~, muss mich da glaubig erstmal reinfinden.
Das E-Mail senden muss erstmal hinten ran gestellt werden, blick ja hier schon nicht mehr durch...

int inPin = 2;
int x = 0;
int y = 0;

void setup()
{
pinMode(inPin,INPUT_PULLUP);
}

void loop()
{
x = digitalRead(inPin)

if(inPin == LOW)
{
y++;
}
delay(1000);

if(inPin == HIGH && y==0)
{
// E-mail senden

y = 1;

}
delay(1000);
}

michael_x:
Die meisten Mail Server sind übrigens pingelig, von wem und wie sie beauftragt werden. Da sehe ich die größere Aufgabe ...

Da kann ich ein Lied von singen - graue Haare hab ich bekommen!

nrg112:
Ok ich bin gerade ziemlich überfordert :~, muss mich da glaubig erstmal reinfinden.
Das E-Mail senden muss erstmal hinten ran gestellt werden, blick ja hier schon nicht mehr durch...

Du schreibst "if(inPin == LOW)"
meinst aber bestimmt "if(x== LOW)"

Sollte der Compiler doch eigentlich erkennen
x = digitalRead(inPin)

=> x = digitalRead(inPin);

Hoi,

Ok ich bin gerade ziemlich überfordert smiley-confuse, muss mich da glaubig erstmal reinfinden.

kurze Erklärung auf "Deutsch" :wink:

int inPin = 2; deklariert eine Integer (also GanzZahl) Variable mit namen inPin mit dem realen Pin2 des Arduino
int x = 0;deklariert eine Integer (also GanzZahl) Variable mit namen x und setzt den Wert auf 0
int y = 0;deklariert eine Integer (also GanzZahl) Variable mit namen y und setzt den Wert auf 0

void setup() hier fängt der Setup Bereich an
{
pinMode(inPin,INPUT_PULLUP); hier setzt Du den PinMode (für Pin2) auf INPUT, und zwar mit _PULLUP
}

void loop() hier fängt die Enchilada an sich zu wiederholen
{
x = digitalRead(inPin) der Variable x wird der digital eingelesene Wert von Pin2 zugewiesen

if(x == 0) Wenn der Wert an Pin2 = 0 ist
{
y++; zähle die Variable y einen rauf
}
delay(1000); und warte 'ne Sekunde

if(x == 1 && y==0) wenn das Signal an Pin2 nicht 0 ist UND die Vairbale y O ist dann
{
// E-mail senden

y = 1; ' setze die Variable y wieder auf 1

}
delay(1000); warte nochmal 'ne Sekunde
} Ende der Loop, alles fängt wieder von vorne an

Das sollte der Kollege eingentlich wissen!

nrg112:
Meine C-Kenntnisse sollten denke ich reichen...

A.R.Ty:
if(inPin == LOW) wenn das Signal an Pin2 = LOW ist dann

Und genau das bedeutet die Zeile eben NICHT, das ist ja sein Fehler!
die variable inPin enthält die Pinummer, nicht den Wert.
Er fragt also ab if (2 == LOW)

Notepad++ halt - Aufnahme gestartet (aus Versehen) - aber nur bemängeln reicht nicht, auch die Lösung nennen 8)

A.R.Ty:
Notepad++ halt - Aufnahme gestartet (aus Versehen) - aber nur bemängeln reicht nicht, auch die Lösung nennen 8)

Hab ich doch.

guntherb:
Du schreibst "if(inPin == LOW)"
meinst aber bestimmt "if(x== LOW)"

Sorry - stand da drunter

Mea culpa :blush:

Du schreibst "if(inPin == LOW)"

Der Compiler erlaubt sogar

  if (inPin=LOW)

was dazu führt, dass gar nichts mehr geht, weil danach inPin = 0 ist statt 2 !

Es heisst übrigens

[b]const[/b] int inPin = 2;

damit der Compiler das merkt.
:wink: Ich bin sicher, der Compiler merkt es auch so und grinst fies :wink:

Erstmal danke für die rege Beteiligung! Echt super!

Also meint ihr das könnte so funktionieren?
const int inPin = 2;
int x = 0;
int y = 0;

void setup()
{
pinMode(inPin,INPUT_PULLUP);
}

void loop()
{
x = digitalRead(inPin);

if(x == LOW)
{
y=0;
}
delay(1000);

if(inPin == HIGH && y==0)
{
// E-mail senden

y = 1;

}
delay(1000);
}

Das Relais ist übrigens praktisch nur ein Schalter wenn ich das richtig verstanden habe.
Ich Schließe also ein Kabel an GND und eins an Eingang 2 an? ist der Schalter dann geschlossen habe ich HIGH anliegen, aber wo kommt die Spannung her? Hmmm wenn ich 2 als INPUT deklariert habe liegt ja keine Spannung an, also müsste ich doch theoretisch einen 5v Trafo anschliesen, um überhaupt eine Spannung für das Signal zu haben.

Was das PULLUP für einen Vorteil bringt habe ich auch noch nicht ganz verstanden.

nrg112:
Also meint ihr das könnte so funktionieren?

Ja, so könnte das funktionieren.

nrg112:
Das Relais ist übrigens praktisch nur ein Schalter wenn ich das richtig verstanden habe.
Ich Schließe also ein Kabel an GND und eins an Eingang 2 an? ist der Schalter dann geschlossen habe ich HIGH anliegen, aber wo kommt die Spannung her? Hmmm wenn ich 2 als INPUT deklariert habe liegt ja keine Spannung an, also müsste ich doch theoretisch einen 5v Trafo anschliesen, um überhaupt eine Spannung für das Signal zu haben.
Was das PULLUP für einen Vorteil bringt habe ich auch noch nicht ganz verstanden.

ja, ein Relais ist ein Schalter.

du hast recht, wenn dein Eingang als Input geschalten ist, liegt da erstmal keine Spannung an.
Dafür brauchts eine Widerstand nach 5V, de den Eingang auf 5V hochzieht, wenn das Relais offen ist. (Pullup-Widerstand)
Diesen Pullup-Widerstand hat der Arduino schon eingebaut.
Mit "pinMode(inPin , INPUT_PULLUP);" wird der interne Pullup "angeschaltet".

Mhm...dies auch ?

if(inPin == HIGH && y==0)

und dies auch ?

if(x == LOW)

AFAIK ist LOW keine int - oder geht das doch / auch / trotzdem ?

Ja theoretisch hast du natürlich recht, ich hab mir diese Frage auch schon gestellt aber im WIki ist es ähnlich gelöst. Als int deklariert, speichert aber HIGH oder LOW.

Top, jetzt bin ich total dadurch-guntherb schrieb doch dass das nicht funktionieren soll

if(inPin == LOW)

Wenn es jetzt doch richtig sein soll - Whats up ?