Habe hier folgendes Projekt am laufen. Wie vielleicht manche hier wissen besitzen viele IP Kameras hinten 2 "Alarm" Eingänge und 2 Ausgänge. Manchmal sind die Ausgänge einfache Relais die per Weboberfläche oder über die Android App Ip Cam Viewer geschalten werden können. In meinem Fall ist es so, dass ich auf Pin #3 der IP Kamera +5V aktivieren kann und auf Pin #4 die Masse(GND) habe. Diese Eigenschaft kann man sich zu nutze machen und zum Beispiel ein Garagentor damit ansteuern welches per 24V Stromfluss aktiviert wird. Nun haben diese IP Kameras oft den Nachteil, dass nach einem Stromausfall und dem entsprechenden Neustart des Geräts das Relais bzw. die 5V+ für einige Sekunden aktiviert und wieder deaktiviert werden. Daher würde ich gerne einen Arduino zwischenschalten um dieses Verhalten im Falle eines Stromausfalls abfangen zu können und ein ungewolltes Öffnen des Garagentors zu vermeiden. Nun habe ich mir folgende Verkabelung überlegt bin mir aber nicht sicher ob ich das korrekt gemacht habe da ich noch nicht besonders viel Elektronikerfahrung habe: Arduino digital I/O #2 --> Camera #3 +5V Arduino digital I/O #3 --> Relay IN (Input) 1 Arduino digital I/O GND --> Camera #4 GND Arduino 5V+ --> Relay VCC Arduiono GND --> Relay GND Bitte um eure Meinung! Folgenden Code würde ich für den Arduino verwenden (Danke an Robert vom hit-mob.com Forum):
1 | // constants won't change. They're used here to
|
2 | // set pin numbers:
|
3 | const int buttonPin = 2; // ping which is HIGH when camera relay is shorted/closed, LOW when camera relay is open |
4 | const int relayPin = 3; // the number of the garage relay pin |
5 | |
6 | // variables will change:
|
7 | int bInitialized = false; |
8 | int buttonState = 0; // variable for reading the pushbutton status |
9 | |
10 | void setup() { |
11 | // initialize the pushbutton pin as an input:
|
12 | pinMode(buttonPin, INPUT); |
13 | |
14 | // initialize the relay pin as an output:
|
15 | pinMode(relayPin, OUTPUT); |
16 | digitalWrite(relayPin, LOW); |
17 | |
18 | }
|
19 | |
20 | void loop(){ |
21 | |
22 | if( bInitialized == false ) |
23 | {
|
24 | // it seems the camera bounces relay during startup so just delay 30 seconds on power up
|
25 | delay( 30 * 1000 ); |
26 | |
27 | bInitialized = true; |
28 | }
|
29 | |
30 | // wait until camera relay goes low
|
31 | while( true ) |
32 | {
|
33 | buttonState = digitalRead(buttonPin); |
34 | if( buttonState == LOW ) |
35 | {
|
36 | break; |
37 | }
|
38 | }
|
39 | |
40 | // wait until user clicks camera relay on
|
41 | while( true ) |
42 | {
|
43 | buttonState = digitalRead(buttonPin); |
44 | if( buttonState == HIGH ) |
45 | {
|
46 | break; |
47 | }
|
48 | }
|
49 | |
50 | // pulse garage door
|
51 | digitalWrite(relayPin, HIGH); |
52 | delay( 1000 ); |
53 | digitalWrite(relayPin, LOW); |
54 | |
55 | // delay a bit before next action to let things settle down
|
56 | delay( 250 ); |
57 | }
|