Noch eine Terrariensteuerung

Meine Komponenten:

Arduino Uno R3
Display 1602 I2C
2x DHT22
3231 RTC
4xRGB SMD WS2812B IC
4 Channel Relais Board
5 Button Pannel über ein Analog Pin
SD Card Board

Mein Projekt

Ich betreibe zwei Spinnenterrarien und möchte die Beleuchtung(Heizung) und LED über das Relais Board schalten.
Da geht es schon los.
Trotz eingehender recherche, habe ich es noch nicht so ganz begriffen, wie und wann das Relais schaltet.
So wie ich es verstanden habe, gibt es einen Anschluss der standart aktiv ist und einen der aktiv wird wenn das Relay schaltet (rote LED leuchtet???)
Relais 1 soll einen 20W Halogenspot in Terra1 temperatur und zeitabhängig schalten, Nachts aus und Tagsüber bis auf Wunschtemperatur
heizen und erst wieder einschalten wenn die Temperatur mehrere grad gefallen ist (Hysterese)
Relais 2 selbe wie Relais1 für Terra2
Relais 3 soll LED Beleuchtung in Terra 1 zeitabhängig einschalten wenn Halogenspot aus
Relais 4 selbe wie Relais3 für Terra2

Ich stehe noch relativ am Anfang,
Temperatur auslesen klappt schon ohne Probleme.
Im Moment arbeite ich an dem Relaiscode, was mir schon einige graue Haare bereitet hat.

Mein Code sieht so aus

#include <DHT.h>
#include "DHT.h"

#define DHTPIN1 2    
#define DHTPIN2 4 
   
#define DHTTYPE1 DHT22 // DHT 22(AM2302)
#define DHTTYPE2 DHT22 // DHT 22(AM2302)


int RELAY1 = 8;
int RELAY2 = 9;
int RELAY3 = 10;
int RELAY4 = 11;


// Initialize DHT sensor.
DHT dht221(DHTPIN1, DHTTYPE1);
DHT dht222(DHTPIN2, DHTTYPE2);

void setup() 
{
  pinMode(RELAY1, OUTPUT);
  pinMode(RELAY2, OUTPUT);
  pinMode(RELAY3, OUTPUT);
  pinMode(RELAY4, OUTPUT);

  Serial.begin(9600);
  
  //Serial.println("Thermometer");

  dht221.begin();
  dht222.begin();

}
void loop() 
{
delay (2000);

  float h1 = dht221.readHumidity();
  float t1 = dht221.readTemperature();
  float h2 = dht222.readHumidity();
  float t2 = dht222.readTemperature();

  // Temperatur unter 24°C
if ((t1 < 24) && (digitalRead(RELAY1) == LOW))
{
digitalWrite(8, HIGH);
Serial.print("Halogen an LED aus");
  }

else {
  //Temperatur größer 26,5°C ausschalten
if ((t1 > 25,2) && (digitalRead(RELAY1) == HIGH))
{
digitalWrite(8, LOW);
Serial.print("Halogen aus LED an");
   }
  }
   Serial.print("Hum:  "); 
   Serial.print(h1);
   //Serial.print("%");  
   Serial.print(";");
   Serial.print(h2);
   Serial.print("%");
   Serial.println();
   Serial.print("Temp: "); 
   Serial.print(t1);
   //Serial.println("C");
   Serial.print(";");
   Serial.print(t2);
   Serial.println("C");
}


//}
//to do
//button control pad 5
//display communication
//real time clock
//esp8229
//fancy stuff

Meine Ausgabe sieht so aus:

Halogen an LED ausHum: 83.70;nan%
Temp: 23.30;nanC
Halogen aus LED anHum: 83.60;nan%
Temp: 23.30;nanC
Halogen an LED ausHum: 83.60;nan%
Temp: 23.30;nanC
Halogen aus LED anHum: 83.60;nan%
Temp: 23.30;nanC
Halogen an LED ausHum: 83.60;nan%
Temp: 23.30;nanC
Halogen aus LED anHum: 83.70;nan%
Temp: 23.30;nanC

Wo ist der verdammte Fehler, oder gibt es eine Anlaufbedingung?
Mir qualmt der Kopf...
Also muss das Terra warm, kalt oder auf Normaltemperatur sein wenn ich das Arduino starte.
Das Relais schaltet immer ein und aus wenn unter 24C.
Bei über 24C leuchtet wie alle anderen und keine Meldung.
Temp: 24.00;nanC
Hum: 87.30;nan%
Temp: 24.00;nanC
Hum: 87.50;nan%
Temp: 24.10;nanC
Hum: 87.50;nan%
Temp: 24.10;nanC
Hum: 87.50;nan%
Temp: 24.10;nanC
Hum: 87.50;nan%
Temp: 24.10;nanC
Hum: 87.40;nan%
Temp: 24.10;nanC
Hum: 87.40;nan%
Temp: 24.10;nanC

Bei über 26,5C
Temp: 26.50;nanC
Hum: 86.70;nan%
Temp: 26.60;nanC
Hum: 86.70;nan%
Temp: 26.50;nanC
Hum: 86.70;nan%
Temp: 26.60;nanC
Hum: 86.70;nan%

Dann soll das Display eingebunden werden, also permanent beide temps und hums angezeigt werden und als screensaver dann die Uhrzeit oder so,
später irgendwann ein Menü.
Daten sollen mit Zeitstempel auf sd geschrieben werden.
Irgendwann dann mit dem esp auf nen kleinen webserver senden und mit einer android app abrufen.

Würde mich über einige Anregungen und Tipps, besonders was die Relais angeht, freuen.

Liebe Grüße Chris

if ((t1 > 25,2) && (digitalRead(RELAY1) == HIGH))

soll vermutlich heißen:

if ((t1 > 25.2) && (digitalRead(RELAY1) == HIGH))

DHT.h brauchst du nur 1 x includieren
digitalWrite(8, HIGH); warum nutzt du hier nicht die Variable (RELAY1) die du vergeben hast?
Die Relais sind LOW aktiv, d.h. sie Schalten mit einem LOW Signal.
Sie haben 2 Kontakte, 1. NO (normal offen) 2. NC (normal geschlossen)
Wofür ist das delay(2000) in der Loop?

#include <DHT.h>
#define DHT1PIN 2         // Zur Messung verwendeter Pin 2
#define DHT2PIN 4        // Zur Messung verwendeter Pin 4
#define DHTTYPE DHT22  // DHT 22
DHT dht1(DHT1PIN, DHTTYPE);  // Initialisieren des DHTs
DHT dht2(DHT2PIN, DHTTYPE);
void Loop()
{
t1=dht1.readTemperature();
t2=dht2.readTemperature();

Vielen Dank für die Kurzeinführung Relais, also wenn das Lämpchen leuchtet sind die NC´s offen und die NO´s zu oder bleiben die auf? Sorry
Wie meinst du das, deine Korrektur ist identisch mit dem Zitat :stuck_out_tongue:
Der delay ist tatsächlich unnötig.

Relais: led aus --> NC geschlossen; NO offen
led an --> NC offen; NO geschlossen

du brauchst kein DHT TYPE1 +2, da beides DHT 22 sind
außerdem solltest du deine Ausgabe um folgendes

 Serial.print("Hum:  "); 
   if (!isnan(t1) && !isnan(h1) && (!isnan(t2) && !isnan(h2)) {) {
   Serial.print(h1);
   //Serial.print("%");  
   Serial.print(";");
   Serial.print(h2);
   Serial.print("%");
   Serial.println();
   Serial.print("Temp: "); 
   Serial.print(t1);
   //Serial.println("C");
   Serial.print(";");
   Serial.print(t2);
   Serial.println("C");
   }

erweitern

Relais: led aus --> NC geschlossen; NO offen
led an --> NC offen; NO geschlossen

Ist auf meinem Notitzblock verewigt :wink:

Bei deinen Klammern wird mir und dem kompiler schwindelig, wofür soll diese ausgabe gut sein?

#include <DHT.h>
#define DHT1PIN 2               // Zur Messung verwendeter Pin 2
#define DHT2PIN 4               // Zur Messung verwendeter Pin 4
#define DHTTYPE DHT22           // DHT 22
DHT dht1(DHT1PIN, DHTTYPE);     // Initialisieren des DHTs
DHT dht2(DHT2PIN, DHTTYPE);


int RELAY1 = 8;
int RELAY2 = 9;
int RELAY3 = 10;
int RELAY4 = 11;


void setup() 
{
  pinMode(RELAY1, OUTPUT);
  pinMode(RELAY2, OUTPUT);
  pinMode(RELAY3, OUTPUT);
  pinMode(RELAY4, OUTPUT);

  digitalWrite(RELAY2, HIGH);
  digitalWrite(RELAY3, HIGH);
  digitalWrite(RELAY4, HIGH);
 
  Serial.begin(9600);
  
  //Serial.println("Thermometer");

//  dht221.begin();
  //dht222.begin();

}
void loop() 
{
  t1=dht1.readTemperature();
  t2=dht2.readTemperature();
  h1=dht1.readHumidity();
  h2=dht2.readHumidity();

}
  // Temperatur unter 24°C
if ((t1 <= 24) && (digitalRead(RELAY1) == LOW))
{
digitalWrite(8, HIGH);
Serial.print("Halogen an LED aus");
  }

else {
  //Temperatur größer 26,5°C ausschalten
if ((t1 >= 25,2) && (digitalRead(RELAY1) == HIGH))
{
digitalWrite(8, LOW);
Serial.print("Halogen aus LED an");
   }
  }
   Serial.print("Hum:  ");
   if (!isnan(t1) && !isnan(h1) && (!isnan(t2) && !isnan(h2)) {) {
   Serial.print(h1);
   //Serial.print("%"); 
   Serial.print(";");
   Serial.print(h2);
   Serial.print("%");
   Serial.println();
   Serial.print("Temp: ");
   Serial.print(t1);
   //Serial.println("C");
   Serial.print(";");
   Serial.print(t2);
   Serial.println("C");
   }


//}
//to do
//button control pad 5
//display communication
//real time clock
//esp8229
//fancy stuff

Jetzt flippt der völlig aus, das ist ziemlich viel input, die variablen sind nicht deklariert (t1, etc.)
:art:

Ich kann es nicht testen, aber versuche es mal so:

void loop()
{
  t1 = dht1.readTemperature();
  t2 = dht2.readTemperature();
  h1 = dht1.readHumidity();
  h2 = dht2.readHumidity();

  // Temperatur unter 24°C
  if ((t1 <= 24) && (digitalRead(RELAY1) == LOW))
  {
    digitalWrite(8, HIGH);
    Serial.print("Halogen an LED aus");
  } else {
    //Temperatur größer 26,5°C ausschalten
    if ((t1 >= 25, 2) && (digitalRead(RELAY1) == HIGH))
    {
      digitalWrite(8, LOW);
      Serial.print("Halogen aus LED an");
    }
  }
  Serial.print("Hum:  ");
  if (!isnan(t1) && !isnan(h1) && (!isnan(t2) && !isnan(h2)) {
  Serial.print(h1);
    //Serial.print("%");
    Serial.print(";");
    Serial.print(h2);
    Serial.print("%");
    Serial.println();
    Serial.print("Temp: ");
    Serial.print(t1);
    //Serial.println("C");
    Serial.print(";");
    Serial.print(t2);
    Serial.println("C");
  }
}

ich hoffe mal ich habe alle Bolzen raus

#include <DHT.h>
#define DHT1PIN 2               // Zur Messung verwendeter Pin 2
#define DHT2PIN 4               // Zur Messung verwendeter Pin 4
#define DHTTYPE DHT22           // DHT 22
DHT dht1(DHT1PIN, DHTTYPE);     // Initialisieren des DHTs
DHT dht2(DHT2PIN, DHTTYPE);


const int RELAY1 = 8;
const int RELAY2 = 9;
const int RELAY3 = 10;
const int RELAY4 = 11;


void setup()
{
  pinMode(RELAY1, OUTPUT);
  pinMode(RELAY2, OUTPUT);
  pinMode(RELAY3, OUTPUT);
  pinMode(RELAY4, OUTPUT);

  digitalWrite(RELAY2, HIGH);
  digitalWrite(RELAY3, HIGH);
  digitalWrite(RELAY4, HIGH);
 
  Serial.begin(9600);
 
  //Serial.println("Thermometer");

  dht1.begin();
  dht2.begin();

}
void loop()
{
float  t1=dht1.readTemperature();
float  t2=dht2.readTemperature();
float  h1=dht1.readHumidity();
float  h2=dht2.readHumidity();


  // Temperatur unter 24°C
if ((t1 <= 24) && (digitalRead(RELAY1) == LOW))
{
digitalWrite(RELAY1, HIGH);
Serial.print("Halogen an LED aus");
  }

else {
  //Temperatur größer 26,5°C ausschalten
if ((t1 >= 25.2) && (digitalRead(RELAY1) == HIGH))
{
digitalWrite(RELAY1, LOW);
Serial.print("Halogen aus LED an");
   }
  }
   Serial.print("Hum:  ");
   if (!isnan(t1) && !isnan(h1) && !isnan(t2) && !isnan(h2))  {
   Serial.print(h1);
   //Serial.print("%");
   Serial.print(";");
   Serial.print(h2);
   Serial.print("%");
   Serial.println();
   Serial.print("Temp: ");
   Serial.print(t1);
   //Serial.println("C");
   Serial.print(";");
   Serial.print(t2);
   Serial.println("C");
   }
   }


//}
//to do
//button control pad 5
//display communication
//real time clock
//esp8229
//fancy stuff

Meine Serielle Ausgabe ist jenseits von gut und böse, vielleicht sollte ich direkt das display mit einbinden`?

m: Hum: Hum: Hum: HHalogen an LED ausHum: Hum: Hum: Hum: Hum: Hum: Hum: Hum: Hum: Hum: Hum: Hum: Hum: Hum: Hum: Hum: Hum: Hum: Hum: Hum: Hum: Hum:

Dennoch sind alle Relais auf High, trotzdem die Temperatur unter 24C ist.
Ich glaube aber wir kommen der Sache näher... :slight_smile:

das

   Serial.print("Hum:  ");
   if (!isnan(t1) && !isnan(h1) && !isnan(t2) && !isnan(h2))  {

muß dahin

   if (!isnan(t1) && !isnan(h1) && !isnan(t2) && !isnan(h2))  {
   Serial.print("Hum:  ");

Serial.print("Hum: ");
if (!isnan(t1) && !isnan(h1) && !isnan(t2) && !isnan(h2)) {

habe ich geändert und t2 bzw h2 auskommentiert, da zu testzwecken nur ein sensor ausgelesen werden kann.

Ich glaube da war auch noch ein Dreher mit den Highs und Lows.
Wenn es zu kalt ist also unter 24C soll der NC an Relais1 ja auf(Led an) :stuck_out_tongue: bis 26C erreicht ist, dann zu bis wieder unter 24C gefallen.

#include <DHT.h>
#define DHT1PIN 2               // Zur Messung verwendeter Pin 2
#define DHT2PIN 4               // Zur Messung verwendeter Pin 4
#define DHTTYPE DHT22           // DHT 22
DHT dht1(DHT1PIN, DHTTYPE);     // Initialisieren des DHTs
DHT dht2(DHT2PIN, DHTTYPE);


const int RELAY1 = 8;
const int RELAY2 = 9;
const int RELAY3 = 10;
const int RELAY4 = 11;


void setup()
{
  pinMode(RELAY1, OUTPUT);
  pinMode(RELAY2, OUTPUT);
  pinMode(RELAY3, OUTPUT);
  pinMode(RELAY4, OUTPUT);

  digitalWrite(RELAY2, HIGH);
  digitalWrite(RELAY3, HIGH);
  digitalWrite(RELAY4, HIGH);
 
  Serial.begin(9600);
 
  //Serial.println("Thermometer");

  dht1.begin();
  dht2.begin();

}
void loop()
{
float  t1=dht1.readTemperature();
float  t2=dht2.readTemperature();
float  h1=dht1.readHumidity();
float  h2=dht2.readHumidity();


  // Temperatur unter 24°C
if ((t1 <= 24) && (digitalRead(RELAY1) == HIGH))
{
digitalWrite(RELAY1, LOW);
Serial.print("Halogen an LED aus");
  }

else {
  //Temperatur größer 26°C ausschalten
if ((t1 >= 26) && (digitalRead(RELAY1) == LOW))
{
digitalWrite(RELAY1, HIGH);
Serial.print("Halogen aus LED an");

if (!isnan(t1) || !isnan(h1)) //&& !isnan(t2) && !isnan(h2))  
      {
   Serial.print("Hum:  ");
   Serial.print(h1);
   //Serial.print("%");
   Serial.print(";");
   Serial.print(h2);
   Serial.print("%");
   Serial.println();
   Serial.print("Temp: ");
   Serial.print(t1);
   //Serial.println("C");
   Serial.print(";");
   Serial.print(t2);
   Serial.println("C");
      }
 }
    }
   
}

Leider habe ich jetzt gar keine serielle Ausgabe mehr.
Nochmals vielen Dank an der Stelle für den tollen Support.
Vielleicht mlchte sich noch jemand einklinken.
Sehe den Wald vor lauter lows und highs nicht mehr :smiley:
Es muss doch eine Einstiegsbedingung geben, da die Relais sich scheinbar willkürlich schalten oder muss einmal generell geschaltet werden bis die schleife anständig läuft?

So noch ein bisschen umgeschrieben wegen der Ausgabe.

#include <DHT.h>
#define DHT1PIN 2               // Zur Messung verwendeter Pin 2
#define DHT2PIN 4               // Zur Messung verwendeter Pin 4
#define DHTTYPE DHT22           // DHT 22
DHT dht1(DHT1PIN, DHTTYPE);     // Initialisieren des DHTs
DHT dht2(DHT2PIN, DHTTYPE);


const int RELAY1 = 8;
const int RELAY2 = 9;
const int RELAY3 = 10;
const int RELAY4 = 11;


void setup()
{
  pinMode(RELAY1, OUTPUT);
  pinMode(RELAY2, OUTPUT);
  pinMode(RELAY3, OUTPUT);
  pinMode(RELAY4, OUTPUT);

  digitalWrite(RELAY2, HIGH);
  digitalWrite(RELAY3, HIGH);
  digitalWrite(RELAY4, HIGH);
 
  Serial.begin(9600);
 
  //Serial.println("Thermometer");

  dht1.begin();
  dht2.begin();

}
void loop()
{
float  t1=dht1.readTemperature();
float  t2=dht2.readTemperature();
float  h1=dht1.readHumidity();
float  h2=dht2.readHumidity();


if (!isnan(t1) || !isnan(h1)) //&& !isnan(t2) && !isnan(h2))  
      {
   Serial.print("Hum:  ");
   Serial.print(h1);
   //Serial.print("%");
   Serial.print(";");
   Serial.print(h2);
   Serial.print("%");
   Serial.println();
   Serial.print("Temp: ");
   Serial.print(t1);
   //Serial.println("C");
   Serial.print(";");
   Serial.print(t2);
   Serial.println("C");
   delay(1000);
      }
      
  // Temperatur unter 24°C
if ((t1 <= 24) && (digitalRead(RELAY1) == HIGH))
{
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, HIGH);
Serial.print("Halogen an LED aus");
  }

else {
  //Temperatur größer 26°C ausschalten
if ((t1 >= 26) && (digitalRead(RELAY1) == LOW))
{
digitalWrite(RELAY1, HIGH);
digitalWrite(RELAY2, LOW);
Serial.print("Halogen aus LED an");
}
}
}


//}
//to do
//button control pad 5
//display communication
//real time clock
//esp8229
//fancy stuff

Die Ausgabe sieht wie folgt aus:

Temp: 25.90;nanC
Hum: 91.30;nan%
Temp: 26.00;nanC
Halogen aus LED anHum: 91.30;nan%
Temp: 26.00;nanC
Hum: 90.70;nan%

Bei dem switch bekomme ich die Meldung

Temp: 24.10;nanC
Hum: 86.60;nan%
Temp: 24.00;nanC
Halogen an LED ausHum: 86.60;nan%
Temp: 24.00;nanC
Hum: 86.80;nan%
Temp: 24.10;nanC

Die Relais 1 und 2 schalten auf jeden Fall richtig soweit ich es bis jetzt beurteilen kann, muss noch weiter testen...
Versuche Morgen mal das 1602 über I2C einzubinden.
Dann kann ich unter finalen Bedingungen testen und die Ausgabe anständig sehen.
Habe auch noch ein delay eingefügt, da die Werte sonst im millisekundentakt rausballern.

ich habe deine Ausgabe mal in eine Funktion ausgelagert, die jede Sekunde aufgerufen wird

#include <DHT.h>
#define DHT1PIN 2               // Zur Messung verwendeter Pin 2
#define DHT2PIN 4               // Zur Messung verwendeter Pin 4
#define DHTTYPE DHT22           // DHT 22
DHT dht1(DHT1PIN, DHTTYPE);     // Initialisieren des DHTs
DHT dht2(DHT2PIN, DHTTYPE);


const int RELAY1 = 8;
const int RELAY2 = 9;
const int RELAY3 = 10;
const int RELAY4 = 11;
float  t1, h1, t2, h2;

void ser_ausgabe()
{
   Serial.print("Hum:  ");
   Serial.print(h1);
   //Serial.print("%");
   Serial.print(";");
   Serial.print(h2);
   Serial.print("%");
   Serial.println();
   Serial.print("Temp: ");
   Serial.print(t1);
   //Serial.println("C");
   Serial.print(";");
   Serial.print(t2);
   Serial.println("C");
   
 }
   
void setup()
{
  pinMode(RELAY1, OUTPUT);
  pinMode(RELAY2, OUTPUT);
  pinMode(RELAY3, OUTPUT);
  pinMode(RELAY4, OUTPUT);

  digitalWrite(RELAY2, HIGH);
  digitalWrite(RELAY3, HIGH);
  digitalWrite(RELAY4, HIGH);
 
  Serial.begin(9600);
 
  //Serial.println("Thermometer");

  dht1.begin();
  dht2.begin();

}
void loop()
{
  float t11=dht1.readTemperature();
  float t21=dht2.readTemperature();
  float h11=dht1.readHumidity();
  float h21=dht2.readHumidity();
  if (!isnan(t11)) t1=t11;
  if (!isnan(t21)) t2=t21;
  if (!isnan(h11)) h1=h11;
  if (!isnan(h21)) h2=h21;

if (millis() % 1000 == 0) ser_ausgabe();
     
  // Temperatur unter 24°C
if ((t1 <= 24) && (digitalRead(RELAY1) == HIGH))
{
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, HIGH);
Serial.print("Halogen an LED aus");
  }

else {
  //Temperatur größer 26°C ausschalten
if ((t1 >= 26) && (digitalRead(RELAY1) == LOW))
{
digitalWrite(RELAY1, HIGH);
digitalWrite(RELAY2, LOW);
Serial.print("Halogen aus LED an");
}
}
}


//}
//to do
//button control pad 5
//display communication
//real time clock
//esp8229
//fancy stuff

if (millis() % 1000 == 0) ser_ausgabe();

Dies bewirkt, dass

  • falls loop () mehrfach je milliSekunde drankommt, jede Sekunde einmal ein Schwall Ausgaben produziert wird
  • falls loop() nicht jede milliSekunde drankommt, ist es Glückssache wie oft die Ausgabe gemacht wird.

Besser als die bewährte 'BlinkWithoutDelay' Methode ist es jedenfalls nicht, sorry.

static unsigned long lastAusgabe;
if (millis() - lastAusgabe >= 1000) {lastAusgabe=millis(); ser_ausgabe(); }

Werde Morgen versuchen das einzubinden, erscheint mir doch sehr Sinnvoll.
Wahnsinn was ich hier in kurzer Zeit lerne.

Eine Frage noch am Rande:
Um Später im Gehäuse Platz zu sparen und die Kabel etwas zu sortieren habe ich mir einen kleinen 5V Verteiler gebastelt.

Schafft das Arduino
Display 1602 I2C
2x DHT22
3231 RTC
4xRGB SMD WS2812B IC
4 Channel Relais Board
5 Button Pannel über ein Analog Pin
SD Card Board
an seinem 5V Pin, oder sollte ich besser extern versorgen?
In den Specs steht nur,
DC Current per I/O Pin 20 mA
DC Current for 3.3V Pin 50 mA.

Schafft das Arduino
Display 1602 I2C
2x DHT22
3231 RTC
4xRGB SMD WS2812B IC
4 Channel Relais Board
5 Button Pannel über ein Analog Pin
SD Card Board
an seinem 5V Pin, oder sollte ich besser extern versorgen?
In den Specs steht nur,
DC Current per I/O Pin 20 mA
DC Current for 3.3V Pin 50 mA.

die Relais und die WS2812B werden warscheinlich zu viel ziehen, also lieber extern versorgen.

siehe hier: ArduinoPinCurrentLimitations

ATMEL ATMEGA328 (UNO and Duemilanove) Current Specifications:

Absolute Maximum Ratings - the point where damage will start to happen

DC Current per I/O Pin ........... 40.0 mA

DC Current VCC and GND Pins...... 200.0 mA

1 VCC pin: Means these Arduinos can Source a total of 200mA

2 GND pins: Means these Arduinos can Sink a total of 400mA

Hängt mehr davon ab, was bei Vin reinkommt. Weil die Differenz zu 5V im Regler verbraten wird.
Der Stromfluss über Vcc (5V) und GND des atmega328p ist erstmal weniger das Problem, denke ich.

Wichtig sind auch die Limits für die Pin-Gruppen. Da wird es kompliziert, da die Strom-Treiber nicht direkt den Ports entsprechend und die auch noch für Sink und Source unterschiedlich sind.

Wobei die Prozessoren selbst da sehr robust sind. Wenn man das etwas überschreitet geht es meistens erst mal trotzdem. Die Arduino Hardware außen herum ist die größere Schwachstelle.

Ich möchte für alles nur ein Netzteil verwenden (DC12V 5A).
Verteilt wird über:

Da kann der Arduino auch noch ein Ausgang haben.
Wird dann an Vin und irgendendeinem grd pin angeschlossen?!
Für die externe 5V Stromversorgung kann ich doch von 12 V mit

(AMS1117 3.3H439PE)
auf 5V runterregeln, oder?

Fragen über Fragen, nochmal Danke an der Stelle :slight_smile:
Für coden ist heute leider keine Zeit :frowning:

PS.: Ich sehe gerade der AMS ist glaube ich der falsche, werde dann warscheinlich einfach noch nen 5V Netzteil mit 1,2A für die Geräteversorgung nutzen :stuck_out_tongue:

an das 12V Netzteil kannst du einen StepDown Regler z.B. Stepdown Regler anschließen.

PS. was möchtest du mit den 12V versorgen?

2x 20W Halogen, 4xLED Strip, Arduino und alle anderen Bauteile runter geregelt auf 5V