Die I/O-Pins des Arduino können nur maximal 40mA aufbringen. Das reicht, um andere Digitaleingänge oder einzelne LED's anzusteuern. Bei großen Lasten, wie z.B. Power-LEDS, Gleichstrommotoren, Relais oder Heizfolien benötigt man eine Zusatzschaltung, um den I/O-Pin zu verstärken.

Die Grundschaltung

Für das Schalten von großen Strömen bieten sich Power-MOSFET's an, welche es für wenig Geld zu kaufen gibt. Ein MOSFET ist ein elektronischer Schalter, welcher hohe Ströme durch Anlegen einer Steuerspannung am Gate schalten kann. Ein voll durchgesteuerter MOSFET hat zwischen Drain und Source im eingeschalteten Zustand nur wenige Milliohm Widerstand. Die Verlustleistung am MOSFET bleibt deshalb gering. Allerdings muss man die richtigen Typen auswählen, welche sich mit der geringen Steuerspannung von 0..5V des Arduino vollständig öffnen lassen. Im Internet sucht man nach "Logic Level MOSFET" um diese Typen zu finden. Nach einigen Schaltplanvergleichen habe ich mich für den N-Channel-Typ IRLIZ44N von International Rectifier entschieden. Den gibt es bereits für 81 Cent bei Reichelt: IRLIZ44N. Das Datenblatt findet sich hier!

Das TO220-Gehäuse ist für Kühlkörper geeignet. Ich habe bei meinen Versuchen mit der 12Watt-Heizfolie keinen benötigt. Der MOSFET hat sich überhaupt nicht erwärmt. DER IRLIZ44N kann maximal 55V bei 30A schalten und hat einen Drain-Source-Widerstand von 0,022Ohm. Zusätzlich ist eine Schutzdiode für das Schalten induktiver Lasten integriert.

Es ist darauf zu achten, dass Der MOSFET am unteren Ast des Stromkreise (bei GND) liegt und die Last bei der Versorgungsspannung. Vertauscht man Last und MOSFET, kann dieser nicht mehr durchschalten!

IRLIZ44N-Schaltung für Arduino

 

 

Zwischen den Klemmen K3 und K4 kann die zu schaltende Last integriert werden. Dies können Lampen, Motoren der Heizfolien sein. Die Sicherung F1 mit 2A dient dem Schutz der Schaltung, wenn es zu einem Kurzschluß kommen sollte.

Der Widerstand R2 mit 10kOhm zieht das Gate gegen Ground, wenn der Arduino bootet und sein Ausgang Pin 5 noch hochohmig ist.

Widerstand R1 mit 180 Ohm begrenzt den Umladestrom des Gate bei einem Pegelwechsel auf etwa 30 mA. Das Gate stellt eine Kapazität zu Drain und Source dar, welche bei schnellen Wechseln hohe Ströme verursacht.

Pinout des IRLIZ44N

 

 

 

Der IRLIZ44N hat eine Standard-Pinbelegung: von Links nach rechts:

  • G = Gate
  • D = Drain
  • S= Source

 

Schaltungsaufbau mit IRLIZ44N

 

 

Auf einem Protoboard werden die Bauteile aufgesteckt und verdrahtet. Im gezeigten Beispiel bildet ein Arduino UNO den Träger. Vversorgungsspannung und Heizfolie werden über Schraubklemmen angeschlossen.

Schaltnetzteil

 

 

Ein preiswertes Schaltnetzteil mit 12V und 2,6A Ausgangsstrom für etwa 10€ versogt die Schaltung und den Arduino.

Aufbau mit Heizfolie

 

 

 

 

Das Heizpad von Reichelt hat eine Verlustleistung von 12Watt. Es fliesst also ein Strom von 1A durch den MOSFET.

Das Netzteil wird über die Hohlbuchse angesteckt.

 

Die Arduino-Befehle

Der MOSFET kann auf zwei verschiedene Arten schalten:

  1. Ein-/Ausschalten mit Digital Pin
  2. Leistungsregelung durch Pulsweitenmodulation

Für ersteres kann ein beliebiger Digital-Pin (im Beispiel 5) des Arduino verwendet werden:

pinMode(5, OUTPUT;   // in der Setup-Routine
digitalWrite(5, HIGH); // Einschalten des MOSFET
digitalWrite(5, LOW);  // Ausschalten des MOSFET


Für Pulsweitenmodulation (PWM) muss ein PWM-fähiger Pin des Arduino verwendet werden: 3, 5, 6, 10, 11. Bei PWM wird ein Signal mit etwa 490Hz am Pin erzeugt, dessen Impuls-/Pauseverhältnis mit einem 8Bit-Wert (0...255) gesteuert wird:

analogWrite(5, 128)  // 50%

erzeugt ein Puls-/Pauseverhältnis von 50%. Die beiden Grenzwerte lauten:
analogWrite(5, 0)     // 0% ausgeschaltet
analogWrite(5, 255) // 100% voll eingeschaltet

Die PWM-Ansteuerung kann verwendet werden, um die Drehzahl von Gleichstrommotoren, die Helligkeit einer LED oder die Wärmeabgabe einer Heizfolie zu steuern.

 

Heizfolienansteuerung mit Temperaturmessung

Für meine WeatherStation muss ein Arduino im Freien montiert werden. Der Regenmesser meiner Wetterstation soll ebenfalls eine Heizung erhalten, damit der Schnee geschmolzen wird. Damit kann auch im Winter die Regenmenge gemessen werden. In beiden Fällen soll die Heizung mit einer handelsüblichen Wärmefolie erfolgen, welche mit dem MOSFET geschaltet wird. Um die Erwärmung der Heizfolie steuern und die sich ergebende Temperatur messen zu können, wurde auf dem Protoboard die MOSFET-Schaltung und zwei Temperatursensoren DS18B20 aufgebaut. Sensor 1 misst jede Sekunde die Raumtemperatur auf dem Board, während Sensor 2 die Oberflächentemperatur der Heizfolie misst. Über den Serialmonitor werden die Werte ausgegeben. Außerdem kann per Eingabe der PWM-Wert zwischen 0 und 255 vorgegeben werden.

Nach Aufzeichnung der Messwerte über ein Terminalprogramm und Auswertung in Excel ergeben sich folgende Kennlinien:

Kennlinie Heizfolie über Leistung

Kennlinie Heizfolie über PWM-Wert

 

/***************************************************************************** 
 * Sketch: HEIZFOLIETEMP_01.ino
 * Author: A. Kriwanek
 * Version: 1.0  01.01.2013/17:22
 * based on OneWire Library 2.0 from http://www.pjrc.com/teensy/td_libs_OneWire.html
 * and the provided example sketch.
 * (Authors: Jim Studt, Tom Pollard, "RJL20", Robin James, Paul Stoffregen)
 *
 * Use Digital Pin 12 for 1Wire bus
 * Pull Up Resistor 4k7 between Digital Pin 12 and +5V
 * Two temperature sensor(s) Dallas 18B20 with known address
 *
 * This sketch reads two DS18B20 sensors every second and displays the temperature
 * values on the serial monitor. The Arduino controls a Power MOSFET via PWM. The
 * user can determine the PWM value by typing in the value in Serial Monitor.
 *
 * My sketch is free software: 
 * This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
 * Dieses Werk bzw. Inhalt steht unter einer Creative Commons Namensnennung - Weitergabe unter
 * gleichen Bedingungen 3.0 Unported Lizenz.
 * http://creativecommons.org/licenses/
 *
 *****************************************************************************/
#include <OneWire.h>
OneWire ds(12);                  // 1Wire Instance on digital pin 12

byte i;
byte present = 0;
byte data[12];
byte addr1[] = {0x28, 0x24, 0xFD, 0xB4, 0x02, 0x00, 0x00, 0xEE};  // Sensor 1
byte addr2[] = {0x28, 0x6A, 0xE0, 0xB4, 0x02, 0x00, 0x00, 0x18};  // Sensor 2
float Temp1, Temp2;
int pwmVal = 0;

String inBuffer;

void setup(void) {
  Serial.begin(115200);
  Serial.println("<<< DS18B20 Monitoring>>>");
  analogWrite(6, pwmVal);
}

void loop(void) {
  ds.reset();
  ds.select(addr1);
  ds.write(0x44,0);              // start conversion S1, with parasite power off

  ds.reset();
  ds.select(addr2);
  ds.write(0x44,0);              // start conversion S2, with parasite power off

  delay(1000);                   // Minimum 750ms conversion time

  ds.reset();
  ds.select(addr1);    
  ds.write(0xBE);                // Read Scratchpad command
  for ( i = 0; i < 9; i++) {     // Read 9 bytes of data
    data[i] = ds.read();
  }
  Temp1 =  ((data[1] << 8) + data[0] ) * 0.0625;  // 12Bit = 0,0625 C per Bit
  
  ds.reset();
  ds.select(addr2);    
  ds.write(0xBE);                // Read Scratchpad command
    for ( i = 0; i < 9; i++) {   // Read 9 bytes of data
    data[i] = ds.read();
  }
  Temp2 =  ((data[1] << 8) + data[0] ) * 0.0625;  // 12Bit = 0,0625 C per Bit
  
  Serial.print( " T1=");
  Serial.print( Temp1, 2);
  Serial.print( " T2=");
  Serial.print( Temp2, 2);
  Serial.print(" Diff=");
  Serial.print( Temp2-Temp1, 2);
  Serial.print(" pwmVal=");
  Serial.print( pwmVal, DEC);
  Serial.println();
  
  while(Serial.available() >= 1) {
    char inChar = Serial.read();
    if (inChar != 13) {
      inBuffer += inChar;
    } else {
      pwmVal = inBuffer.toInt();
      if(pwmVal < 0)   pwmVal =0;
      if(pwmVal > 255) pwmVal =255;
      inBuffer = "";
    }
  }
  analogWrite(6, pwmVal);
}

Die Hardware-IDs der DS18B20 müsst Ihr bitte an Eure Sensoren anpassen. Danach erfolgt eine Messung, die einige Stunden dauert. Ich habe die Heizfolie in 20er-PWM-Schritten angesteuert und die Temperaturerhöhung sowie die Aufheiz-/Abkühldauer notiert. Damit habe ich die Kennlinie meiner Heizfolie für die Nutzanwendungen. Mit Excel kann man daraus eine schöne Grafik machen:

BILD