Serielle Kommunikation zwischen Arduino

Hallo Zusammen,
ich habe leider den Vorstellungsthread nicht gefunden....somit hier meine Vorstellung. Ich bin Roland, 48 aus der Schweiz. Programmierkenntnisse sind Vorhanden, Elektronikkentnisse sind auch bis zu einem gewissen Level vorhanden.
Ich stehe momentan vor einem, für viele sicherlich lächerlichen Problem.
Ich möchte für unser Wohnmobil eine Alarmanlage bauen.
Setup:
10x Vibrationssensoren an Fenstern und Türen
1x Arduino Nano hinten
1x Arduino Mega als Hauptplatine
ich möchte 2 Arduinos nutzen, damit ich die Kabellängen in Grenzen halten kann.
Am Arduino Nano hängen 4 Vibrationssensoren
Am Arduino Mega hängen 6 Vibrationssensoren, 1 LCD Display für Infos(i2C), 1 RFID Leser, 2 LEDS (rot und grün......für Zustand) und ein 100dB Piezzo

Meine Herausforderung:

der Nano soll mittels eines analogen oder digitalen Pins dem Mega mitteilen, dass ein Vibrationssensor ausgelöst hat, und der Mega soll dann einen Alarm ausgeben.
Den Code für den RFID, sowie die Schaltung zum ein-/ausschalten des Alarms mittels Badge habe ich schon. Die Zeitschleife für den disarm der Anlage kriege ich auch hin.
Mein Problem ist: Wie kriege ich es hin, dass der Nano mit einem Pin (Analog oder digital) dem Mega mitteilen kann, dass ein Vibrationssensor ein Signal gesendet hat.
Sprich: Einen Pin am Nano hochziehen und mit dem Mega empfangen. Also vorallem die Verdrahtung würde mich interessieren. Muss ich da vom Nano einen Pin plus GND verkabeln?
Es braucht ja für dieses Projekt keine serielle Kommunikation zwischen den Arduinos bestehen. Es reicht, dass der Nano einen Pin schaltet, wenn einer der Sensoren ein Signal liefert.
Kann mir da vielleicht jemand einen Tip geben?
Besten Dank schonmal, und einen schönen Abend
Grüsse
Roland

Ohne gemeinsame Masse (GND) gehen höchstens Funkmodule.

Ich würde den Nano weglassen und dafür Port Expander einsetzen. Die können bei Änderungen auch einen Interrupt an den Controller schicken. Wenn der Mega auch noch mitbekommen soll, welcher Sensor ausgelöst hat, muß mehr Kommunikation implementiert werden als nur ein Alarmsignal.

Wenn's unbedingt ein Nano sein soll, dann kann der als Alarm gleich den Status sein Sensoren über Serial schicken. Für sichere Verbindung zwischen den Controllern ggf. RS-485 Treiber benutzen.

Hallo DrDiettrich
wenn ich das richtig verstehe, muss ich GND + Pin vom Nano auf GND + "horch"Pin auf dem Mega verdrahten. Welcher Sensor auslöst ist mir im Prinzip schon mal egal...der Nano wertet aus, ob mehrere Pins (Wind) angeben, und gibt nur einen Alarm, wenn weniger als 3 Pins ausgeben, einen Alarm weiter...und auch dann nur erst mal einen "stummen" Alarm (Licht an) wenn nicht innerhalb einer gewissen Zeit der selbe Sensor noch einmal eine Vibration registriert. Die beiden Boards arbeiten eigentlich unabhängig voneinander als "Auswerter" aber der Mega ist halt dann der, welcher Alarm schlägt¨

Grüsse
Roland

Wo zu?
Der Mega hat über 50Pins, und wenn dan reicht das der Nano setzt ein Pin auf High oder Low was der Mega bearbeitet sind nur 2 Leitungen ohne Mixmasch für Serial

1 Like

WoMo ist mehr als nen Stück Draht auf'm Steckbrett.
Für Kommunikation im KFZ-Bereich hat sich doch CAN durchgesetzt.
Was hindert Dich daran das zu verwenden?

Ich erklär Dir auch warum ich das für eine bessere Idee halte:

Wenn Dein NANO im hinteren teil stirbt, oder die Zuleitung oder what ever, kommst Du in die Bedrouilie.

Da kann ich dir sagen, dass ich von CAN keine Ahnung habe......die idee war, die Arduinos beide an der Aufbaubatterie anzuhängen, mit Backup-Batterie, wenn das Bordnetz ausfällt. Das sollte eigentlich verhindern, dass der Nano stirbt. Man wird mit so einer Alarmanlage wohl nie einen Ausfall verhindern können (wie mit keiner Alarmanlage), aber man kann möglichst viele Fälle abdecken (darum auch das Backup)

@fony das ist eigentlich genau den Ansatz den ich verfolge, weiss aber nicht, wie das zu verdrahten ist

CAN ist nicht so schwer. Das haben schon ganz andere geschafft - bin da selbst nicht von betroffen, kenn aber... -

Die Controller direkt an der Autobatterie wird Dir soviel Schmutz einschleppen, da kannst Du gar nicht so schnell schauen, als das Dir irgendwas aussteigt.
Die Steuergeräte in KFZ haben da ganze Scharen von Schaltungen um die Funktionssicherheit zu gewährleisten.

Aber Klar. Du könntest auch mit einem einfachen 3poligen Kabel ganz einfach auf Funktion testen:
Gegeben: NANO ein PIN als INPUT mit PULLUP und auf dem MEGA auch einer.
Der Mega zieht den NANO auf GND und der NANO antwortet mit runterziehen des MEGA-PIN.
Kommt der PIN nicht mehr zurück in den Ausgangspegel oder wird nicht wie gewollt gezogen, wird Alarm ausgelöst....

Wege gibt es viele.

Das hat üblicherweise die Karosserie als Masse, also GND von Mega und Nano mit der Karosserie verbinden. Wenn Du einen StepDown ohne Strommessung von 12 V auf 5 V verwendest, passiert das automatisch über die Stromversorgung, vorsichtshalber aber mal überprüfen.

Somit genügt ein Kabel zur Signalübertragung. Üblicherweise wird der Eingang mit einem PullUp-Widerstand auf 5 V gezogen, der Nano-Ausgang schaltet bei Alarm auf LOW. Wegen der langen Leitung würde ich einen kleinen PullUp-Widerstand von 1 kΩ verwenden. Ob das eventuelle elektromagnetische Wellen davon abhält, Dich zu nerven, wird sich zeigen.

Dann könntest Du auf RS485 oder CAN-Bus umsteigen. Wenn Du magst Lesestoff: UNO - Mega - Teensy mittels CAN-Bus verbinden

// Forensketch  2 Controller die gegenseitig Antworten - Hier "Slave"
// https://forum.arduino.cc/

#include <Streaming.h>     // https://github.com/janelia-arduino/Streaming

constexpr byte sendPin {2};
constexpr byte recvPin {3};
constexpr byte buttonPin {5};


void setup()
{
  Serial.begin(115200);
#if (defined(ARDUINO_AVR_MEGA) || defined(ARDUINO_AVR_MEGA2650)) // https://github.com/arduino/Arduino/issues/10764
  delay(300);
#endif
  Serial << (F("\r\nStart...\r\n")) << endl;
  pinMode(sendPin, OUTPUT);
  pinMode(recvPin, INPUT_PULLUP);
  pinMode(buttonPin, INPUT_PULLUP);
}


void  loop()
{
  if (digitalRead(buttonPin))                   // Taste nicht gedrückt
  {
    digitalWrite(sendPin, digitalRead(recvPin)); // antwortet auf den Sender
  }
  else                                          // sonst
  {
    digitalWrite(sendPin, LOW);                 // dauerhaft LOW => Alarm ausgelöst
  }
}
// Forensketch  2 Controller die gegenseitig Antworten - Hier "Master"
// https://forum.arduino.cc/

#include <Streaming.h>     // https://github.com/janelia-arduino/Streaming

constexpr byte sendPin {2};
constexpr byte recvPin {3};

void setup()
{
  Serial.begin(115200);
#if (defined(ARDUINO_AVR_MEGA) || defined(ARDUINO_AVR_MEGA2650)) // https://github.com/arduino/Arduino/issues/10764
  delay(300);
#endif
  Serial << (F("\r\nStart...\r\n")) << endl;
  pinMode(sendPin, OUTPUT);
  pinMode(recvPin, INPUT_PULLUP);
}


void  loop()
{
  digitalWrite(sendPin, LOW);
  delay(2);
  if (digitalRead(recvPin) != LOW)
  {
    ALARM();
  }
  digitalWrite(sendPin, HIGH);
  delay(2);
  if (digitalRead(recvPin) != HIGH)
  {
    ALARM();
  }
}

void ALARM()
{
  Serial << F("Alarm!!!!!") << endl;
}

Ganz einfacher Code - nix besonderes, aber mal zu zeigen, wie es gehen könnte
Zwischen beiden braucht es noch eine Verbindung GND-GND -> fertig.

Der Master sendet ein Signal - der slave muss das genauso beantworten.
Macht er das nicht, weil z.B. die Leitung unterbrochen ist, dann löst der Master aus. Ebenfalls wenn die Taste als Auslöser fungiert.

So jedenfalls die Idee dahinter.

Noch als Nachtrag die Gefahr, die droht:
Wenn der Ausgang des MEGA nicht mit einem LängsWiderstand bestückt ist, kann Dir bei einem Kurzschluss nach GND bei einem HIGH der Pin genauso abrauchen, wie bei einem Schluß nach Bordspannung....
Ich mein ja nur.

das werde ich morgen mal probieren und berichten...gerne auch wenn gewünscht mit codes für beide arduinos

Wäre eine käufliche Version einer Alarmanlage mit Funkverbindung zu den Sensoren keine Lösung? Die funktionieren mit interner Batterie und brauchen keine Verdrahtung.

Grüße Uwe

Hallo Uwe,
das wäre durchaus eine Lösung. Es existiert auch so eine Anlage. Es sind allerdings ein paar Gedanken die ich mir dazu gemacht habe:

  1. was ist, wenn eine Batterie des Sensors leer ist?
  2. Batteriewechsel ist immer mit Abfall verbunden.
  3. Kabel sind für mich immer zuverlässiger als Funk. Funk kann immer auch gestört werden, oder das Signal kann verloren gehen
  4. Bei einem Eigenbau kann ich genau das bauen, programmieren und einstellen was ich will und brauche

und somit bevorzuge ich einen Eigenbau. Und das ist ja auch eigentlich nicht die Frage. Es geht ja grundsätzlich um die Kommunikation der Arduino Boards, zu welchem Zweck auch immer :wink:

Grüsse
Roland

1 Like

Wie soll man sonst was praktisches lernen? :slight_smile:

1 Like

Da muss ich Dir wiedersprechen... Wohnmobilaufbauten sind üblicherweise innen mit Sperrholz beplankt, da ist nix mit Masse... :wink:

Deswegen will er das Ganze doch an die Aufbaubatterie anschließen.
Da ich ja auch viel WoMo Bastelei habe: Mein "WoMo Wächter" (Nano, überwacht aber nur die WoMo Funktionen, keine Alarmanlage) hängt auch an der Aufbaubatterie und läuft problemlos. Aufbau- und KFZ Stromnetz sind aber komplett getrennt, - auch keine Verbindung zum Laden und für alle etwas längeren Signalleitungen verwende ich geschirmte Kabel.

Welche Vibrationssensoren möchtest Du verwenden? (Link)

Hallo,
ich wollte eigentlich diese hier verbauen
https://funduinoshop.com/elektronische-module/sensoren/bewegung-distanz/sw-420-vibrationssensor-neigungssensor

Habe jetzt aber ins Auge gefasst einen Versuch mit Dopplerradar zu starten. damit könnte ich durch die Fenster "schauen" und schon mal bei Bewegung ausserhalb das Licht im WoMo einschalten oder einmal kurz hupen.

Diese Sensoren geben doch nur ein HIGH oder LOW Signal, da ist die Kabellänge eher kein Problem.

Dann geht ja jedes mal der Alarm los wenn jemand am WoMO vorbei läuft...
Fehlauslösungen sind bei solchen Sachen m.E. das größte Problem, - auch bei den Vibratoren. Ich denke man muss die Art der Vibration unterscheiden um zu erkennen "ist ein Einbruch" oder "da ist ein LKW vorbeigefahren".

Eine Masseverbindung über Sperrholz wird problematisch, da muß ich Dir zustimmen. Aber selbst mein Billigwohnwagen hat Rücklichter, die von einer Verteilerbox im Staukasten versorgt werden. Da findet sich dann +12 V und Masse, die man mit einem DC/DC-Wandler verbinden kann. Da bekommt der Arduino dann sein GND.

Nur mal so von Camper zu Camper: Wie lädst Du Deine Aufbaubatterie?

Ja, guter Hinweis, den ich unterstütze! Netzwerkkabel (Cat5 oder sowas) eignen sich gut dafür. Schirm einseitig an Masse/GND anschließen.

Jedes Kabel stellt eine Antenne dar, je länger, desto lieber. Daher würde ich geschirmtes Kabel verlegen und ein Protokoll mit Differenzsignalen (z. B. RS485) verwenden. Nicht ohne Grund wird in Kfz CAN-Bus mit CRC verwendet.

In so ein Kabel paßt dann auch noch +5 V und GND.

Eine Motte zieht ihre Kreise und Du hast Deine Campingnachbarn als Freunde fürs Leben :face_with_hand_over_mouth:

Das denke ich auch....wenn das ganze WoMo rüttelt, bewegen sich ja auch mehrere Sensoren gleichzeitig, und somit kann ein Fehlalarm abgefangen werden. Klar wenn dann ein Einbrecher clever ist, rüttelt er am WoMo, während er die Scheibe aufbricht. Dafür könnte man ja noch einen PIR ins innere setzen.

Solar oder Landstrom vermutlich

Ja das habe ich tatsächlich nicht bedacht....ist wohl doch keine so gute Idee.

Wie reagieren eigentlich PIR-Sensoren auf Fliegen und Mücken und dergleichen?