Go Down

Topic: Mein erstes Projekt, reicht diese Hardware? (Read 952 times) previous topic - next topic

nrg112

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  :)

Hummelpups

#1
Feb 14, 2014, 01:14 pm Last Edit: Feb 14, 2014, 01:19 pm by Hummelpups Reason: 1
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

michael_x

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 ...

nrg112

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.

michael_x

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 ) .

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...


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);
}

Klaus_ww


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!

guntherb


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)"
Grüße
Gunther

sschultewolter

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

=> x = digitalRead(inPin);
Keinen technischen Support über PN!

A.R.Ty

#9
Feb 14, 2014, 05:10 pm Last Edit: Feb 14, 2014, 05:27 pm by A.R.Ty Reason: 1
Hoi,
Quote
Ok ich bin gerade ziemlich überfordert  smiley-confuse, muss mich da glaubig erstmal reinfinden.

kurze Erklärung auf "Deutsch"  ;)

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


Dum spiro, spero - if you find my posting helpful, please click my Karma :)<br />~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />Do you know A.R.T, the FREE Android Root Tool ?

guntherb

#10
Feb 14, 2014, 05:12 pm Last Edit: Feb 14, 2014, 05:16 pm by guntherb Reason: 1
Das sollte der Kollege eingentlich wissen!
Meine C-Kenntnisse sollten denke ich reichen...




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)
Grüße
Gunther

A.R.Ty

Notepad++ halt - Aufnahme gestartet (aus Versehen) - aber nur bemängeln reicht nicht, auch die Lösung nennen  8)
Dum spiro, spero - if you find my posting helpful, please click my Karma :)<br />~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />Do you know A.R.T, the FREE Android Root Tool ?

guntherb


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

Hab ich doch.

Du schreibst "if(inPin == LOW)"
meinst aber bestimmt "if(x== LOW)"
Grüße
Gunther

A.R.Ty

Dum spiro, spero - if you find my posting helpful, please click my Karma :)<br />~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />Do you know A.R.T, the FREE Android Root Tool ?

michael_x

Quote
Du schreibst "if(inPin == LOW)"


Der Compiler erlaubt sogar
Code: [Select]
  if (inPin=LOW)
was dazu führt, dass gar nichts mehr geht, weil danach inPin = 0 ist statt 2 !

Es heisst übrigens
const int inPin = 2;
damit der Compiler das merkt.
;)  Ich bin sicher, der Compiler merkt es auch so und grinst fies  ;)

Go Up