In diesem Tutorial möchte ich gerne ein kleines Projekt über die Temperaturanzeige in Grad Celsius auf fünf 8×8 LED Matrixen vorstellen.
Komponenten für den Aufbau
- Arduino UNO*,
- 5x 8×8 LED Matrix*,
- oder einfacher als 1 Modul jedoch nur mit 4 Feldern*,
- 1x Temperatursensor DS18B20*,
- 1x 4,7 kOhm Widerstand*,
- Breadboard*,
- Breadboardkabel*
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Aufbau
MAX7219 | Arduino UNO |
---|---|
VCC | 5V |
GND | GND |
DIN | digitaler PIN D8 |
CS | digitaler PIN D9 |
CLK | digitaler PIN D10 |
DS18B20 | Arduino UNO |
---|---|
VCC | 5V |
DATA | digitaler PIN D2 |
GND | GND |
Zusammenbau
Die Module können beliebig lang verbunden werden.
Die Grenzen sind der maximal verfügbare Strom sowie natürlich das Datenfeld (Integer – 32,767) für die Übergabe der Anzahl der Module.
Wenn man nun wie ich es getan habe 5 Module hintereinander (kaskadierend) verdrahtet so erhält man ein ziemliches Durcheinander.
Diesem durcheinander kann man nur mit festkleben oder anschrauben entgegenwirken.
Ich habe mir ein Stativ aus Holz erstellt, somit kann ich später diese Module noch vielseitig anders verwenden.
Quellcode
Der Quellcode ist ein „Mix“ aus den bereits vorgestellten Tutorials Arduino Lektion 8: Max7219 8×8 LED Shield und Arduino Projekt: LED Matrix Uhr.
//Die MaxMatrix Bibliothek #include <MaxMatrix.h> #include <avr/pgmspace.h> //Ausgelagerte CHAR Arrays damit dieser Code übersichtlicher bleibt. #include "statics.h" #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 2 //Sensor DS18B20 am digitalen Pin 2 OneWire oneWire(ONE_WIRE_BUS); // DallasTemperature sensors(&oneWire); int data = 8; // DIN Pin vom MAX7219 Shield int load = 9; // CS Pin vom MAX7219 Shield int clock = 10; // CLK Pin vom MAX7219 Shield int maxInUse = 5; //Dieser Wert bestimmt wieviele MaxMatrix Shields hintereinander (kaskadiert) verwendet werden. MaxMatrix m(data, load, clock, maxInUse); // Definiert nun ein Objekt der Klasse MaxMatrix. void setup(){ m.init(); // Das Max7219 initialisieren. m.setIntensity(1); // LED Leucht intensität, Werte von 0-15 sind hier erlaubt. Serial.begin(9600); // Übertragungsgeschwindigeit der seriellen Verbindung } void loop(){ char bu[100]; String msg = "Temperatur "; msg+=String(getTemperatur(),2); msg+="C "; msg.toCharArray(bu,100); printStringWithShift(bu, 35); //Schreibt die Message auf die Max LED Matrix, mit einer wiederholungsgeschwindigkeit von 75ms. } float getTemperatur(){ sensors.begin(); //Starten der Kommunikation mit dem Sensor sensors.requestTemperatures(); float value = sensors.getTempCByIndex(0); Serial.println(value); return value; } void printCharWithShift(char c, int shift_speed){ if (c < 32) return; c -= 32; byte buffer[100]; memcpy_P(buffer, CH + 7*c, 7); m.writeSprite(32, 0, buffer); m.setColumn(32 + buffer[0], 0); for (int i=0; i<buffer[0]+1; i++) { delay(shift_speed); m.shiftLeft(false, false); } } void printStringWithShift(char* s, int shift_speed){ while (*s != 0){ printCharWithShift(*s, shift_speed); s++; } }
Die externe Datei „statics.h“ enthält die Byte Werte für die LED Matrix.
Ich habe diese Werte ausgelagert da das sonst den Quellcode unnötig aufblähen würde.
PROGMEM const unsigned char CH[] = { 3, 8, B0000000, B0000000, B0000000, B0000000, B0000000, // space 1, 8, B1011111, B0000000, B0000000, B0000000, B0000000, // ! 3, 8, B0000011, B0000000, B0000011, B0000000, B0000000, // " 5, 8, B0010100, B0111110, B0010100, B0111110, B0010100, // # 4, 8, B0100100, B1101010, B0101011, B0010010, B0000000, // $ 5, 8, B1100011, B0010011, B0001000, B1100100, B1100011, // % 5, 8, B0110110, B1001001, B1010110, B0100000, B1010000, // & 1, 8, B0000011, B0000000, B0000000, B0000000, B0000000, // ' 3, 8, B0011100, B0100010, B1000001, B0000000, B0000000, // ( 3, 8, B1000001, B0100010, B0011100, B0000000, B0000000, // ) 5, 8, B0101000, B0011000, B0001110, B0011000, B0101000, // * 5, 8, B0001000, B0001000, B0111110, B0001000, B0001000, // + 2, 8, B10110000, B1110000, B0000000, B0000000, B0000000, // , 4, 8, B0001000, B0001000, B0001000, B0001000, B0000000, // - 2, 8, B1100000, B1100000, B0000000, B0000000, B0000000, // . 4, 8, B1100000, B0011000, B0000110, B0000001, B0000000, // / 4, 8, B0111110, B1000001, B1000001, B0111110, B0000000, // 0 3, 8, B1000010, B1111111, B1000000, B0000000, B0000000, // 1 4, 8, B1100010, B1010001, B1001001, B1000110, B0000000, // 2 4, 8, B0100010, B1000001, B1001001, B0110110, B0000000, // 3 4, 8, B0011000, B0010100, B0010010, B1111111, B0000000, // 4 4, 8, B0100111, B1000101, B1000101, B0111001, B0000000, // 5 4, 8, B0111110, B1001001, B1001001, B0110000, B0000000, // 6 4, 8, B1100001, B0010001, B0001001, B0000111, B0000000, // 7 4, 8, B0110110, B1001001, B1001001, B0110110, B0000000, // 8 4, 8, B0000110, B1001001, B1001001, B0111110, B0000000, // 9 2, 8, B01010000, B0000000, B0000000, B0000000, B0000000, // : 2, 8, B10000000, B01010000, B0000000, B0000000, B0000000, // ; 3, 8, B0010000, B0101000, B1000100, B0000000, B0000000, // < 3, 8, B0010100, B0010100, B0010100, B0000000, B0000000, // = 3, 8, B1000100, B0101000, B0010000, B0000000, B0000000, // > 4, 8, B0000010, B1011001, B0001001, B0000110, B0000000, // ? 5, 8, B0111110, B1001001, B1010101, B1011101, B0001110, // @ 4, 8, B1111110, B0010001, B0010001, B1111110, B0000000, // A 4, 8, B1111111, B1001001, B1001001, B0110110, B0000000, // B 4, 8, B0111110, B1000001, B1000001, B0100010, B0000000, // C 4, 8, B1111111, B1000001, B1000001, B0111110, B0000000, // D 4, 8, B1111111, B1001001, B1001001, B1000001, B0000000, // E 4, 8, B1111111, B0001001, B0001001, B0000001, B0000000, // F 4, 8, B0111110, B1000001, B1001001, B1111010, B0000000, // G 4, 8, B1111111, B0001000, B0001000, B1111111, B0000000, // H 3, 8, B1000001, B1111111, B1000001, B0000000, B0000000, // I 4, 8, B0110000, B1000000, B1000001, B0111111, B0000000, // J 4, 8, B1111111, B0001000, B0010100, B1100011, B0000000, // K 4, 8, B1111111, B1000000, B1000000, B1000000, B0000000, // L 5, 8, B1111111, B0000010, B0001100, B0000010, B1111111, // M 5, 8, B1111111, B0000100, B0001000, B0010000, B1111111, // N 4, 8, B0111110, B1000001, B1000001, B0111110, B0000000, // O 4, 8, B1111111, B0001001, B0001001, B0000110, B0000000, // P 4, 8, B0111110, B1000001, B1000001, B10111110, B0000000, // Q 4, 8, B1111111, B0001001, B0001001, B1110110, B0000000, // R 4, 8, B1000110, B1001001, B1001001, B0110010, B0000000, // S 5, 8, B0000001, B0000001, B1111111, B0000001, B0000001, // T 4, 8, B0111111, B1000000, B1000000, B0111111, B0000000, // U 5, 8, B0001111, B0110000, B1000000, B0110000, B0001111, // V 5, 8, B0111111, B1000000, B0111000, B1000000, B0111111, // W 5, 8, B1100011, B0010100, B0001000, B0010100, B1100011, // X 5, 8, B0000111, B0001000, B1110000, B0001000, B0000111, // Y 4, 8, B1100001, B1010001, B1001001, B1000111, B0000000, // Z 2, 8, B1111111, B1000001, B0000000, B0000000, B0000000, // [ 4, 8, B0000001, B0000110, B0011000, B1100000, B0000000, // backslash 2, 8, B1000001, B1111111, B0000000, B0000000, B0000000, // ] 3, 8, B0000010, B0000001, B0000010, B0000000, B0000000, // hat 4, 8, B1000000, B1000000, B1000000, B1000000, B0000000, // _ 2, 8, B0000001, B0000010, B0000000, B0000000, B0000000, // ` 4, 8, B0100000, B1010100, B1010100, B1111000, B0000000, // a 4, 8, B1111111, B1000100, B1000100, B0111000, B0000000, // b 4, 8, B0111000, B1000100, B1000100, B0101000, B0000000, // c 4, 8, B0111000, B1000100, B1000100, B1111111, B0000000, // d 4, 8, B0111000, B1010100, B1010100, B0011000, B0000000, // e 3, 8, B0000100, B1111110, B0000101, B0000000, B0000000, // f 4, 8, B10011000, B10100100, B10100100, B01111000, B0000000, // g 4, 8, B1111111, B0000100, B0000100, B1111000, B0000000, // h 3, 8, B1000100, B1111101, B1000000, B0000000, B0000000, // i 4, 8, B1000000, B10000000, B10000100, B1111101, B0000000, // j 4, 8, B1111111, B0010000, B0101000, B1000100, B0000000, // k 3, 8, B1000001, B1111111, B1000000, B0000000, B0000000, // l 5, 8, B1111100, B0000100, B1111100, B0000100, B1111000, // m 4, 8, B1111100, B0000100, B0000100, B1111000, B0000000, // n 4, 8, B0111000, B1000100, B1000100, B0111000, B0000000, // o 4, 8, B11111100, B0100100, B0100100, B0011000, B0000000, // p 4, 8, B0011000, B0100100, B0100100, B11111100, B0000000, // q 4, 8, B1111100, B0001000, B0000100, B0000100, B0000000, // r 4, 8, B1001000, B1010100, B1010100, B0100100, B0000000, // s 3, 8, B0000100, B0111111, B1000100, B0000000, B0000000, // t 4, 8, B0111100, B1000000, B1000000, B1111100, B0000000, // u 5, 8, B0011100, B0100000, B1000000, B0100000, B0011100, // v 5, 8, B0111100, B1000000, B0111100, B1000000, B0111100, // w 5, 8, B1000100, B0101000, B0010000, B0101000, B1000100, // x 4, 8, B10011100, B10100000, B10100000, B1111100, B0000000, // y 3, 8, B1100100, B1010100, B1001100, B0000000, B0000000, // z 3, 8, B0001000, B0110110, B1000001, B0000000, B0000000, // { 1, 8, B1111111, B0000000, B0000000, B0000000, B0000000, // | 3, 8, B1000001, B0110110, B0001000, B0000000, B0000000, // } 4, 8, B0001000, B0000100, B0001000, B0000100, B0000000, // ~ };
Download
Hier das gesamte Projekt zum Download.
Arduino Projekt: Temperaturanzeige auf einer 8×8 LED Matrix. Hola quiero montar tu circuito pero solo quiero poner 4 displays 8×8 led Matrix MAX7219 , mi pregunta es , si el sketch es el mismo o hay que modificarlo , es que no se de programaciòn .Un saludo
I am using 4 in 2 module. Not able to rotate scrolling. Text is moving down.
Funktioniert nicht ! 90 Grad alles verdreht! Gruss!
Hi,
schade das es bei dir nicht funktioniert aber wenn es verdreht ist wird wohl die Richtung der Module nicht stimmen.
Gruß,
Stefan
Hi,
größten Dank für das Projekt.
Ich habe die 4 Segmente auf einer Platine.
Allerdings läuft die Temperatur jetzt Quer und nicht längs.
Gibt es dazu eine Lösung?
Größten Dank und Gruß Franz
Hi,
welche Bibliothek verwendest du zum Programmieren?
Ggf. muss man die „direction“ einstellen.
Gruß,
Stefan Draeger
Ich verwende die MaxMatrix.
Wie stellt man die direction um?
Danke für deine Hilfe
Moin moin.
Ich benutze ein Blaues 4x 8×8 (in eins) Modul MAX7219 1088AB mit der
MAX_MATRIX.h
und
einem funktionierendem Sketch (DS3131 Uhr mit BT Steuerung)
ALLes funktioniert, DS3231, BluetoothSteuerung und das Durchlaufen.
ABER ich bekommenicht raus, wie ich es anstelle, das Text, Zeit und Temperatur
wagerecht von rechts nach links läuft.
Momentan läuft zwar alles von rechts nach links,
ABER auf jedem der Vier um 90 Grad verdreht;-((
Vielleicht könnten Sie noch einmal von Ihrer kostbaren Zeit etwas opfern
und mir erneut auf die Sprünge helfen.
Das wär toll.
Mit freundlichem Gruß