Go Down

Topic: Neuling sucht eine Lösung (Read 5136 times) previous topic - next topic

michael_x

Ich auch :)  8)

Es überhaupt digital zu versuchen, war nur meine eigene schlechte Idee.

blackscorpion371

So, mal in den Warenkorb gelegt:


- Lichtwiderstand Perkin Elmer VT 93 N1 THT 1 St. (L x B x H) 4.37 x 3.66 x 1.78 mm
- Trimmer linear 0.25 W 50 kΩ 250 ° 270 ° Piher PT 15 LV 50K 1 St.
- Elektrolyt-Kondensator radial bedrahtet 1.5 mm 22 µF 10 V 20 % (Ø) 4 mm Panasonic EEA-GA1A220 1 St.

Brauche ich Bauteile mäßig noch etwas?

Die Relaisplatine wird wie ich bemerkt habe Minus gesteuert, kann man das dem Controller sagen, z.B. D1 und D2 minus und D3 Plus?

Wie müsste der Sketch aussehen, damit bei Signal auf USB Eingang und entsprechend gemessener Dunkelheit, auf D1 und D2 kurz minus gesteuert wird, damit die beiden Relais kurz anziehen?





 

agmue

Die Relaisplatine wird wie ich bemerkt habe Minus gesteuert, kann man das dem Controller sagen, z.B. D1 und D2 minus und D3 Plus?
Ja beispielsweise:
Code: [Select]
digitalWrite(D1, LOW);
oder:

Code: [Select]
#define RELAIS_EIN LOW
#define RELAIS_AUS HIGH
...
digitalWrite(D1, RELAIS_EIN);

Was man macht, ist Geschmackssache :)
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

HotSystems

Die Relaisplatine wird wie ich bemerkt habe Minus gesteuert, kann man das dem Controller sagen, z.B. D1 und D2 minus und D3 Plus?

Hier ist die Aussage "Minus gesteuert" fachlich falsch.
Bitte nicht falsch verstehen.

Der richtige Ausdruck ist GND.

Wenn du "Minus" in einen Eingang reingibst, kann es den Controller oder andere Hardware zerstören.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

blackscorpion371

So mal einen Sketch aufgespielt:

const int relaisPin = 3;

 
void setup() {
  pinMode(relaisPin, OUTPUT); // Den PWM PIN "relaisPin" als Ausgangssignal setzen.
}
 
void loop() {
  digitalWrite(relaisPin, HIGH); //Relais an
  delay(500);  //500ms warten
  digitalWrite(relaisPin, LOW);  //Relais aus
  delay(1000);// 1000ms warten
}


Was muss ich ändern das es nur 1x kurz schaltet bei Signal von USB?

noiasca

how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

blackscorpion371

nein eigentlich nicht.

sind meine ersten Gehversuche.
das loop heist ja wohl immer wiederholen, das will ich aber nicht wenn ich da aber setup hinschreibe bekomme ich eine Fehlermeldung

HotSystems

Sieh dir mal die zahlreichen Beispiele an.
In ALLEN findest du ein Setup.

Und du musst dir in einer Variablen merken, ob du schon geschaltet hast und entsprechend reagieren.

Und bei einem derartigen Projekt solltest du dich zwingend um die Grundlagen kümmern, das alles können wir dir nicht beibringen. Da hilft ein Fachbuch sehr effektiv.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

uxomm

#23
Feb 01, 2018, 07:06 pm Last Edit: Feb 01, 2018, 07:11 pm by uxomm
Falls der Arduino nichts weiter zu tun hat, als auf den Alarm zu warten und dann das Relais für eine kurze Dauer einzuschalten, dann kann folgendes einfaches Programm funktionieren (eventuell musst du es noch ein wenig anpassen):

Code: [Select]
// Schalten eines Relais bei "Alarm"
//
// Falls ein 'A' über die serielle Schnittstelle empfangen wird,
// wird ein LDR ausgewertet. Bei "Dunkelheit" wird der "relaisPin"
// für eine bestimmte Dauer auf LOW geschalten.

const int ldrSchwellwert = 200;      // Wert wurde "experimentell" für meinen LDR ermittelt
const int stromstossDauer = 400;     // gewünschte Stromstoß-Dauer (Millisekunden)
const byte relaisPin = 3;
const byte ldrPin = A0;

void setup() {
  Serial.begin(9600);
  digitalWrite(relaisPin, HIGH);  // Das Relais-Modul ist "active LOW". Dies ist ein "Trick", damit es bei Reset nicht einschaltet.
  pinMode(relaisPin, OUTPUT);
}

void loop() {
  if (Serial.available()) {      // wenn Zeichen auf der seriellen Schnittstelle empfangen wurden...
    int inbyte = Serial.read();  // ein Zeichen lesen
    if (inbyte == 'A') {         // falls das Zeichen ein A ist...
      if (analogRead(ldrPin) < ldrSchwellwert) {    // LDR auswerten und falls es "dunkel" ist, das Relais schalten:
        digitalWrite(relaisPin, LOW);  // Relais EIN
        delay(stromstossDauer);
        digitalWrite(relaisPin, HIGH);  // Relais AUS
      }
    }
  }
}

Zur beachten ist: Dieser Sketch verwendet "delay". Das bedeutet, dass während dieser Zeit (im Beispiel: 400 Millisekunden) das Board "blockiert" ist. Es wird dabei einfach die Zeit "totgeschlagen" und es kann auf nichts reagiert werden. In manchen Fällen ist das überhaupt kein Problem, in anderen aber schon. Falls also der Arduino sonst nichts zu tun hat, ist das OK.

Den LDR anschließen:
Code: [Select]
Arduino 5V Pin ------------------------+
                                       |
                                    ___|___
                                   | L D R |
                                    -------
                                       |
                                       |
Arduino Pin A0 ------------------------+
                                       |
                                       _
                                      | |
                                      | |  R (z.B. 10...20kOhm)
                                      |_|
                                       |
Arduino GND Pin -----------------------+
                                     

ldrSchwellwert musst du auf deine Gegebenheiten (deinen LDR) anpassen.

Werte meines LDR (Typ unbekannt) mit 10k als Spannungsteiler:
Code: [Select]
    335 ... 380  Deckenlampe eingeschaltet
     80          Beschattung des LDR mit Handfläche
     kleiner 50   Deckenlampe aus ("es ist ziemlich dunkel")
    800          Beleuchtung des LDR mit Taschenlampe

Ich habe 200 gewählt, weil dieser Wert deutlich unter dem Wert für "Deckenlampe ein" liegt und deutlich über "Abschattung" bzw. "Dunkelheit". Mit deinem LDR ist möglicherweise ein anderer Wert nötig.

Konsolen-Kommando (bzw. bat-Datei) für Windows zum Aktivieren des Relais über die serielle Schnittstelle ausgehend von folgender Konfiguration:
       - Arduino hängt auf COM3
       - COM3 läuft mit 9600 Baud
Code: [Select]
echo Alarm > COM3
Hinweis: das funktioniert zuverlässig mit niedrigen Port-Nummern (unter 10). Bei höheren Nummern ist folgendes erfolgversprechend (Stichwort: kompletter "Dateiname") - Beispiel: COM23
Code: [Select]
echo Alarm > \\.\COM23

Natürlich geht auch folgendes, weil ja nur auf das 'A' reagiert wird:
Code: [Select]
echo A > COM3
Folgendes funktioniert aber NICHT, weil ja ein großes A nötig ist:
Code: [Select]
echo a > COM3

Anzeige der aktuellen COM-Port-Einstellungen:
Code: [Select]
mode COM3
Die wesentlichste Einstellung ist die Baudrate. Diese muss 9600 betragen.
Falls COM3 konfiguriert werden muss, so geht das auf der Kommandozeile (bzw. bat-Datei) z.B. so:
Umstellen auf 9600 Baud:
Code: [Select]
mode COM3: baud=9600
Einstellen mehrer Parameter: 
Code: [Select]
mode com3: baud=9600 parity=n data=8 stop=1

Um ein Reset beim Öffnen/Schließen der seriellen Schnittstelle zu verhindern wird (zum Beispiel) ein Elko gebraucht (wurde schon erwähnt - Minus auf "GND", Plus auf "Reset").
Zum Programmieren (Aufspielen des Sketch auf den Arduino) muss dieser Elko aber entfernt werden.
Always decouple electronic circuitry.

blackscorpion371

Das ist eine tolle Erklärung,

sobald ich morgen mein Conradpaket von der Post geholt habe lege ich los und werde berichten.

@uxomm Vielen Dank schon mal

blackscorpion371

wie schließe ich den Widerstand für den LDR an?

agmue

wie schließe ich den Widerstand für den LDR an?
Widerstände haben keine Polarisierung wie manche Kondensatoren, ist also egal.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

blackscorpion371

das ein Widerstand keine Polarisierung hat weis ich

So Aufbau steht, prinzipiell arbeitet es auch, glaube nur das mein LDR nicht brauchbar ist.

bis ldrSchwellwert = 32767 schaltet die Geschichte, aber eben auch wenn ich mit der Taschenlampe genau drauf leuchte. ab ldrSchwellwert = 32768 schaltet nix mehr.

HotSystems

das ein Widerstand keine Polarisierung hat weis ich
Warum fragst dann danach ?
uxomm hat doch schon gezeigt, wie du alles anschließen musst.

Quote
So Aufbau steht, prinzipiell arbeitet es auch, glaube nur das mein LDR nicht brauchbar ist.

bis ldrSchwellwert = 32767 schaltet die Geschichte, aber eben auch wenn ich mit der Taschenlampe genau drauf leuchte. ab ldrSchwellwert = 32768 schaltet nix mehr.
Hast du den LDR und Widerstand so wie uxomm gezeigt hat angeschlossen?
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

agmue

bis ldrSchwellwert = 32767 schaltet die Geschichte ...
Der analoge Eingang des Nano kann nur Werte von 0 bis 1023 liefern. Da stimmt was nicht!
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

Go Up