Solar Tracker mit Schrittmotoren und OLED-Display - AZ-Delivery

Jeden Tag wird mehr und mehr bewiesen, dass wir uns in einem Klimawandel befinden, der auf die Umweltverschmutzung zurückzuführen ist. Es gibt keinen Zweifel daran, die extremen Wetterphänomene in Europa werden immer häufiger. Das war die Frage, die ich mir gestellt habe. Es gibt auf der Welt eine saubere und gleichzeitig billige Energiequelle, nämlich die Sonne. Hier in Spanien haben wir viele Stunden Licht, die wir mit Hilfe von Solarmodulen nutzen können. Um die beste Leistung zu erzielen, müssen sie idealerweise immer senkrecht zu den Sonnenstrahlen ausgerichtet sein. Eine Möglichkeit, dies zu erreichen, ist der Bau eines Solarlicht-Trackers.

Bei dem hier entwickelten Projekt handelt es sich um zwei Bewegungsachsen, sowohl horizontal als auch vertikal. So werden die Solarmodule immer senkrecht zu den Sonnenstrahlen ausgerichtet und ihre Effizienz maximiert. Als Referenz für die Lichtmenge, die das Solarpanel erreicht, werden 4 LDR-Widerstände verwendet (Light Dependent Resistor; lichtabhängiger Widerstand). Wir verwenden zwei Endschalter, um zu erkennen, wann die Sonnenuntergangs- und Sonnenaufgangsposition erreicht ist. Da es sich so zu sagen um ein "grünes" Projekt handelt, habe ich für das Chassis, die Motorhalterung, die LDR-Widerstände und das Solarpanel einige Obstkisten aus Sperrholz und ein Paar Endschalter von einer alten Maus wiederverwendet.

Benötigte Hardware und Materialien

1

Mega 2560 Board mit ATmega2560 mit USB Kabel

1

0,96 Zoll OLED SSD1306 Display I2C 128 x 64 Pixel

4

Fotowiderstand Photo Resistor Dioden Set 150V 5mm LDR5528 GL5528

4

Widerstand 10 KOhm

1

Widerstand 220 Ohm

2

ULN2003 Schrittmotor mit Antrieb Modulplatine

1

Solarpanel 5V 1,5W Wasserdichtes Polysilizium Mini Solar Modul

2

Mikro Endschalter mit Roller

1

PCB Board Set Lochrasterplatine

 

Kabel

 

Holz

 

Benötigte Software

  • Arduino DIE
  • solar_light_tracker Sketch
  • Wire Library (integriert)
  • Adafruit_GFX library (über Bibliotheksverwalter)
  • Adafruit_SSD1306 library (über Bibliotheksverwalter)

Schaltplan

Schaltplan

Download des Schaltplans

Beschreibung der Funktionsweise und des Quellcodes

Wie auf dem folgenden Foto zu sehen ist, befinden sich sowohl das Solarpanel als auch die LDR-Widerstände in derselben Ebene. Dies ist notwendig, da die Lichtmenge, die das Solarpanel empfängt, dieselbe sein muss, die auch auf die vier LDRs trifft. Diese sind in einer 2 x 2-Matrix angeordnet.

Die folgende Zeichnung zeigt die Anordnung der LDR-Widerstände von vorne gesehen. Diese Referenzen werden bei den Berechnungen berücksichtigt, um die beste Lichtmessung zu erhalten.

Das Herzstück des Aufbaus ist der Mega 2560 R3, der die Messwerte der 4 LDR-Widerstände empfängt, die notwendigen Berechnungen durchführt, die beiden Schrittmotoren bewegt und die Spannungsdaten an das OLED-Display sendet.

Als erstes müssen die notwendigen Bibliotheken für die I2C-Kommunikation und das OLED-Display in den Sketch eingebunden werden.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Anschließend müssen wir die Anzahl der Pixel für Breite und Höhe des OLED-Bildschirms definieren und ein Bildschirm-Objekt implementieren. Als Konstruktor-Parameter übergeben wir die Variablen der Anzahl der Pixel für Breite und Höhe des Bildschirms, die Referenz auf das Wire-Objekt. Außerdem hier noch die -1 für den Anschluss des Reset-Pins, wenn er vorhanden ist.

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

Wir deklarieren vier Variablen, um anzugeben, welcher LDR-Widerstand mit welchem Port des Mikrocontrollers verbunden ist. Außerdem deklarieren wir auch vier weitere Variablen für den Wert des Widerstandes, wenn das Licht auftrifft.

int LDR_SD = A0;
int LDR_SI = A1;
int LDR_II = A2;
int LDR_ID = A3;

int SD, SI, II, ID; 

Um Durchschnittswerte in den jeweils gleichen Spalten und Zeilen der gemessenen vier Werte der LDR-Widerstände zu berechnen, deklarieren wir weitere vier Variablen. Dadurch erhalten wir eine Referenz, um die Ausrichtung des Solarpanels zu verändern. In der obigen Zeichnung sehen Sie, welche Widerstände auf jeder Seite beteiligt sind. Wir deklarieren auch eine Toleranzvariable, um ständige Bewegungen zu vermeiden.

int sup_aver, inf_aver, right_aver, left_aver;     
int tolerance = 10;

Für die Spannungsmessung am Solarpanel deklarieren wir die Variable SPV. Sie enthält den Pin, an den wir das Panel anschließen (in unserem Projekt ist es Pin 4). Die Variable solar_panel_read für den Eingangswert der Messung der Spannung (Es handelt sich um analoge Werte) und die Variable solar_panel_voltage, um die Analog-Digital-Umwandlung durchzuführen. Mit dem Wert können wir arbeiten und ihn auf dem OLED-Bildschirm anzeigen.

int SPV = A4;
int solar_panel_read;
float solar_panel_voltaje;

Für die Geschwindigkeit der Schrittmotoren werden wir zwei Variablen deklarieren. Die Variable retardo (sp. delay) ist für die Bewegung der Motoren im normalen Betrieb gedacht. Die Variable retardo_inicializacion (sp. delay_initialisation) verwenden wir für die Bewegung des horizontalen Motors, wenn er sich in die Ausgangsposition bewegt.

int retardo = 5;
int retardo_inicializacion = 15;

Es wurden zwei Endschalter für Sonnenauf- und untergang in die Anlage eingebaut. Wenn der Sonnenaufgang stattfindet, befindet sich die Anlage in der Sonnenaufgangsposition. Der Sonnenaufgangsendschalter (switch_sunrise) ist normal closed (NC) und mit Pullup-Widerstand angeschlossen. Er ist immer geschlossen, wodurch dauerhaft 5V am Pin anliegen und sein Zustand somit HIGH ist. Er wird gedrückt und damit geöffnet, wenn sich das Panel in einer fast vertikalen Position befindet. Es zeigt in östlicher Richtung, da dort die Sonne aufgeht. Wenn das Panel während des Tages der Bewegung der Sonne am Himmel folgt, wird es bei Erreichen der Sonnenuntergangsposition wieder fast senkrecht stehen und Richtung Westen ausgerichtet sein.

Dann wird der normal open (NO) Sonnenuntergangs-Endschalter (switch_sunset) aktiviert. Er ist mit Masse und dem RESET-Pin des Mikrocontrollers verbunden. So wird er zurückgesetzt, wenn der Pin auf Masse gelegt wird. Dadurch kehrt das Solarpanel in die Sonnenaufgangsposition zurück. Dieser Code wird im setup()-Teil des Sketches ausgeführt. In den nächsten beiden Zeilen konfigurieren wir also den Anschluss des Endschalters an Port 10 des Mikrocontrollers und definieren ihn standardmäßig mit HIGH.

int sunrise_pin = 10;
int switch_sunrise = HIGH;

Nachdem wir die Bibliotheken eingebunden, die Variablen deklariert und die Komponentenobjekte instanziiert haben, müssen wir sie in der Methode setup() initialisieren. Als erstes initialisieren wir den seriellen Monitor und den OLED-Bildschirm an Adresse 0x3C, wir löschen den Bildschirm und stellen die Textfarbe Weiß ein.

Serial.begin(9600);

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
  Serial.println(F("SSD1306 allocation failed"));
  for(;;);
}

display.clearDisplay();
display.setTextColor(WHITE);

Als Nächstes konfigurieren wir die Mikrocontroller-Pins, die von den LDR-Widerständen, dem Solarpanel, den Motoren und dem Endschalter für den Sonnenaufgang verwendet werden, als Eingang oder Ausgang.

pinMode (LDR_SD, INPUT);      // LDR resistors
pinMode (LDR_SI, INPUT);
pinMode (LDR_II, INPUT);
pinMode (LDR_ID, INPUT); 

pinMode (SPV, INPUT);         // Solar panel

pinMode (5, OUTPUT);          // Horizontal motor
pinMode (4, OUTPUT);
pinMode (3, OUTPUT);
pinMode (2, OUTPUT);

pinMode (9, OUTPUT);          // Vertical motor
pinMode (8, OUTPUT);
pinMode (7, OUTPUT);
pinMode (6, OUTPUT);

pinMode (sunrise_pin, INPUT); // Sunrise limit switch

Die letzten Punkte, die wir konfigurieren werden, sind die Zustände des LDR-Widerstands und des Solarpanels, wenn der Mikrocontroller initialisiert wird. Als Erstes müssen wir den Zustand des Endschalters switch_sunrise kennen. Wenn er sich im HIGH-Zustand befindet, d.h. nicht gedrückt ist, zeigen wir eine Meldung über den seriellen Monitor an und führen die Methode inicializacion_motor_horizontal()  (initialization_horizontal_motor) aus. Solange er nicht gedrückt ist, bewegt sich der Motor der horizontalen Achse, bis dieser Endschalter gedrückt wird und die Initialisierung abgeschlossen ist.

switch_sunrise = digitalRead(sunrise_pin);
        
while (switch_sunrise == HIGH) { 
  Serial.println("Inicializando motor horizontal, espere ......");
  inicializacion_motor_horizontal();
  switch_sunrise = digitalRead(sunrise_pin);
}

Wir sind mit der setup()-Methode fertig, jetzt werden wir die loop()-Methode analysieren, die kontinuierlich ausgeführt wird. In dieser Methode werden das empfangene Licht gemessen und die Motoren bewegt.

Ein LDR (Light Dependent Resistor - lichtabhängiger Widerstand) ändert seinen Widerstand mit der Lichtmenge, die auf ihn fällt. Die beste Leistung wird erzielt, wenn das Licht senkrecht einfällt. Wie Sie im Schaltbild sehen können, wurde eine Spannungsteilerschaltung mit jedem LDR und einem 10K-Widerstand hergestellt. Wenn wir sie an eine Spannung von 5V anschließen und jeder LDR mit einem analogen Port des Mikrocontrollers verbunden ist, können wir die jeweils variierende Spannung messen. Wir werden die Spannungswerte jedes LDRs in den Variablen speichern, die wir zu diesem Zweck deklariert haben.

SD = analogRead(LDR_SD);
SI = analogRead(LDR_SI);
II = analogRead(LDR_II);
ID = analogRead(LDR_ID);

Die Berechnungen, die der Mikrocontroller für die Bewegung der Motoren durchführen muss, lauten wie folgt:

Es werden jeweils die Werte der horizontal gelegenen LDRs addiert und dann halbiert. Dann werden die jeweils vertikal liegenden LDRs ebenfalls addiert und halbiert. So erhalten wir die Mittelwerte. Die Ergebnisse speichern wir in den zuvor deklarierten Variablen. Die Anordnung der LDRs sehen Sie oben in der Abbildung.

sup_aver = (SD + SI)/2;
inf_aver = (ID + II)/2;
right_aver = (SD + ID)/2;
left_aver = (SI + II)/2;

Nun, da wir die Durchschnittswerte haben, müssen wir die beiden Motoren in Bewegung setzen. Dazu vergleichen wir die Werte der gegenüberliegenden Seiten mit der Toleranz. Immer wenn die berechnete Differenz der Werte der verglichenen Seiten größer ist, als die Toleranz (int tolerance = 10;), müssen wir mit Hilfe der Methoden paso_izq(), paso_der(), paso_up() y paso_down() (step left, right, up und down) dem entsprechenden Motor den Befehl geben. Er ändert die Richtung der Seite, deren Wert höher ist, bis der Wert der Differenz kleiner als die Toleranz ist.

/***************** Horizontal Motor **************************/
if (right_aver == left_aver) {
   apagado_hor();
}
  
if (right_aver > left_aver && (right_aver-left_aver) > tolerance) {
  paso_izq();
}
 
if (left_aver > right_aver && (left_aver-right_aver) > tolerance) {
  paso_der();
}
apagado_hor();
delay(500);

/**************** Vertical Motor ****************************/

if (sup_aver == inf_aver) {
   apagado_ver();
}
  
if (sup_aver > inf_aver && (sup_aver-inf_aver) > tolerance) {
    paso_up();
}
 
if (inf_aver > sup_aver && (inf_aver-sup_aver) > tolerance) {
    paso_down();
}
apagado_ver();
delay(500);

Für die Bewegung des Solarpanels und der LDR-Widerstände wurden zwei 28BYJ-Motoren und die dazugehörigen ULN2003-Controllermodule gewählt. Wobei ein Motor auf die Bewegung der X-Achse und der andere Motor auf die Y-Achse wirkt.

Hinweis: Es sollte eine externe Spannungsquelle für die Versorgung der Motoren angeschlossen werden.

In den folgenden Zeilen des Sketches sehen Sie, dass immer zwei Spulen, also zwei Pins für einen Schritt des Motos aktiviert werden. Die Geschwindigkeit der Motordrehung regulieren wir mit delay(retardo).

void paso_XXX() {
  digitalWrite(5, LOW); 
  digitalWrite(4, LOW);  
  digitalWrite(3, HIGH);  
  digitalWrite(2, HIGH);  
     delay(retardo); 
  digitalWrite(5, LOW); 
  digitalWrite(4, HIGH);  
  digitalWrite(3, HIGH);  
  digitalWrite(2, LOW);  
     delay(retardo); 
  digitalWrite(5, HIGH); 
  digitalWrite(4, HIGH);  
  digitalWrite(3, LOW);  
  digitalWrite(2, LOW);  
     delay(retardo); 
  digitalWrite(5, HIGH); 
  digitalWrite(4, LOW);  
  digitalWrite(3, LOW);  
  digitalWrite(2, HIGH);  
     delay(retardo);  
}

Um die Spannungswerte zu visualisieren, die das Solarmodul zu einem bestimmten Zeitpunkt erhält, haben wir einen 0,96-Zoll-OLED-Bildschirm installiert. Die Spannung des Solarpanels ermitteln wir an Pin 4. Vor der Ausgabe auf dem Display müssen wir den analogen in einen digitalen Wert umwandeln.

Das Solarpanel liefert eine maximale Spannung von 5V, die dem am analogen Eingang eingelesenen Wert 1023 entspricht. Mit einer einfachen Operation können wir diesen Wert umwandeln und auf dem Bildschirm ausgeben.

solar_panel_read = analogRead(SPV);
solar_panel_voltaje = (solar_panel_read*5.0) / 1023.0;
oled_message();

Die Methode zur Anzeige von Daten auf dem OLED-Bildschirm (oled_message()) ist sehr einfach. Sie führt folgende Schritte aus:

Löschen des Bildschirms, Einstellen der Textgröße auf 2, Platzieren des Cursors auf den X- und Y-Koordinaten in Pixeln und Vorbereiten des Textes, um ihn in die erste Zeile des Textes zu schreiben. Textgröße auf 3 einstellen, Cursor erneut auf die neuen X- und Y-Koordinaten bringen, den neuen anzuzeigenden Text vorbereiten (Spannungswert mit 2 Dezimalstellen des Solarpanels) und die letzte Zeile ist die Ausgabe des gesamten zuvor eingestellten Textes.

void oled_message() {
  display.clearDisplay();
  display.setTextSize(2);
  display.setCursor(7,0);
  display.print("Solar Vols");
  display.setTextSize(3);
  display.setCursor(20, 30);
  display.print(solar_panel_voltaje, 2);
  display.display();
}

Skizzen der Bauteile mit Maßangaben als PDF Download

Der Leser Thorsten Hartwig hat aus der Vorlage ein Modell für den 3D-Drucker erstellt und Ihn freundlicherweise mit uns geteilt. Vielen Dank noch einmal an dieser Stelle. Zur Projektseite auf Thingiverse geht es hier entlang. Das gesamte Projekt ist auf Github geparkt. Dort wird ein ESP statt ATmega328p verwendet.

Quelle: https://www.thingiverse.com/thing:5437654

Jetzt, wo es Sommer ist und die Sonne scheint, könnte man daraus zum Beispiel ein Handyladegerät bauen. Ein passendes Projekt dazu folgt demnächst.

DisplaysFür arduinoProjekte für anfänger

37 Kommentare

Miguel Torres Gordo

Miguel Torres Gordo

Hallo Kay Dreessen,
in diesem Sunlight-Tracker-Projekt haben wir keine Endschalter für die vertikale Bewegung vorgesehen. Die Bewegung folgt der Sonne, die morgens am Horizont auf einer Seite aufgeht. Mittags wird sie am höchsten Punkt sein und wenn sie auf der anderen Seite untergeht, dann sollte das Array mit der Solarplatte vertikal nach Osten ausgerichtet sein, so dass es sich in einer optimalen Position befindet.
Wenn das Set initialisiert wird, ist der Motor, der sich zuerst bewegt, derjenige der horizontalen Bewegung. Er sollte zum Sonnenaufgangsschalter gehen, um sofort mit der Suche nach der Position der besten Lichtsammlung zu beginnen. So wie Sie es beschreiben, dass sich der Motor der vertikalen Bewegung zuerst bewegt, scheint es, dass Sie die Verbindungen der Motoren zum Mikrocontroller geändert haben. Denn wenn Sie den Sonnenaufgangsschalter drücken, beginnt die Suche nach dem besten Maß an Licht und der OLED-Bildschirm beginnt, Spannungswerte zu auszugeben.

Im Video im Blog-Beitrag können Sie die Bewegung sehen, die er macht, wenn der Sunlight Tracker initialisiert wird.

Mit freundlichen Grüßen, Miguel Torres Gordo
Kay Dreessen

Kay Dreessen

Hallo,
müsste dieser Solar Tracker nicht eigentlich auch für vertikalen Bewegungen Endstopps besitzen?

Mein Solar Tracker fährt direkt nach dem Einschalten erstmal in die vollständige Waagerechte und kommt dann nicht weiter, weil der Motor gegen einen Widerstand arbeitet, den er nicht überwinden kann (Kabel denke ich). Man muss erst den Sunrise-Endstopp betätigen. Danach fährt er zurück in eine adequate Position und auch das OLED-Display zeigt richtig an (vorher nur Griesel).

Kay Dreessen

Kay Dreessen

Hallo,
sollte jemand einen Arduino Nano Clone nutzen, anstelle eines Arduino Mega 2560, dann fehlen ihm die Anschluss-Pins SCL und SDA – für das OLED-Display. Deshalb verbindet man diese OLED-Pins mit A4 (SDA) und A5 (SCL) auf dem Nano. Nun fehlt quasi der Pin A4 für die Spannungsmessung des Solar Panels, weil er mit SDA belegt ist. Man stecke den Solar Panel (+)-Ausgang an Pin A6, der noch frei ist. Und überschreibe im Code in Reihe 31: “int SPV = A4;” mit “int SPV = A6;”

Kay Dreessen

Kay Dreessen

OK, peinlich, peinlich…
Aber vielleicht hilfreich für andere.
Hatte alles zusammengebaut (Eigenkonstruktion). Aber aus dem dann gekoppelten Netzteil wurden 0,7 A (!) gezogen. Normal wären ohne Motorbewegung so 25 mA.
Grund: Kaufe die 0,96" SSD1306 immer beim selben Anbieter an. Habe inzwischen mehrere “rumliegen”. Sehen alle ziemlich “gleich” aus. Habe einen eingebaut ohne auf die Anschlüsse zu achten. Habe dann das eingebaute OLED-Display gemäß der Anschlüsse zweier anderer identisch aussehender OLED verkabelt. Leider war bei dem eingebauten OLED VCC und GND – gegenüber meinen anderen 0,96"-OLEDs – vertauscht! Weil durch den Einbau aber die OLED-Platine mit den Eingangs-Bezeichnungen verdeckt war, hatte ich mich an dem Anschlußschema der beiden “rumliegenden” OLEDs orientiert.

Kay Dreessen

Kay Dreessen

Hallo,

ich habe ein analoges Problem bei diesem Solar Tracker, dass ich , trotz vielen Messens, nicht in den Griff bekomme. Und das mir unlogisch erscheint.

Mein gemessener Widerstand meiner an dem Spannungsversorgungeingang, ohne dass die Spannungsversorgung selber angeschlossen ist, beträg ca. 210 Ohm. Diese ergeben sich aus dem 220 Ohm “Sunrise-Switch-Widerstand” parallel zu den vier LDR jeweils in Reihe mit ihren 10 kOhm-Widerständen. Rechnerisch ist das OK. Und praktisch auch. Ich habe alles nochmal zusätzlich, parallel auf einem Steckboard aufgebaut und komme auf den ähnlichen Wert (der schwankt natürlich ein wenig, je nach Licheinfall auf die LDRs). Soweit so gut. I=U/R. Ergo müssten fließen I=23 mA. Schließe ich aber mein Netzteil mit 5V Gleichspannung an, zieht die Schaltung 700mA, macht fast 3,5 W.
Wo ist mein Denkfehler?

Kay Dreessen

Kay Dreessen

Hallo,

habe die Schaltung separat und mit einem Nano Clone aufgebaut. Compilieren und Hochladen läuft. OLED an A4 und A5 zeigt meine 5 Volt der Stromversorgung an. Aber: meine LDR-Werte (GL5528) spinnen. Sie zeigen auf dem IDE-Monitor einen Wert so um 870. Halte ich einen mit dem Finger zu, gehen zwei Werte auf 650 zurück (nicht mehr). Klebe ich alle vier LDRs ab (schwares Isolierband) zeigen zwei LDRs Werte um 250 und die beiden anderen Werte um 550 an. Ich weiß, ich weiß, es ist die Beschaltung. Habe aber alles dutzende Male durchgescheckt auch die Widerstände nachgemessen (10kOhm) etc. Die beiden Stepper drehen übrigens auch nur zu Beginn. Nach Betätigung des Sunset- und des Sunrise-Schalters tut sich nichts. Ich komme seit diversen Abenden nicht weiter… Any helpful recommendations?

Andreas Wolter

Andreas Wolter

@Kay Dreessen: soweit ich das überblicke, dürfte es Probleme beim Anschluss des OLEDs geben. Das wird per I2C angesteuert. Der Nano nutzt A4 und A5 als SDA und SCL. Die sind auf dem MEGA Board separat auseführt. Wenn Sie das Dispplay nicht benöigen, könnten Sie versuchen, im Code die Pinnummern anzupassen und es für den Nano zu portieren.

Soweit ich mich erinnere, gibt es eine Software I2C Bibliothek. Damit könnte man beliebige Pins als I2C Pins verwenden. Eventuell könnte man das als Alternative verwenden.

Probieren Sie es aus und teilen Sie gern Ihre Erfahrungen mit uns.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Kay Dreessen

Kay Dreessen

Hallo,

ich habe noch eine Frage. Habe den Code solar_light_tracker.ino von Miguel Gordo. Aber auch irgendwo her – von dieser Seite – einen kürzeren Code von Thorsten namens solartracker.ino. Was macht der kürzere Code von Thorsten?
Gruß Kay

Kay Dreessen

Kay Dreessen

Hallo,

setze gerade einen Solar Tracker mit z.T. eigenen Teilen zusammen.
Frage: kann man auch einen Arduino Nano Clone nutzen, anstelle des Mega 2560 R3?
Was spräche dagegen, da die notwendige Performance doch wohl relativ gering ist.
Gruß Kay

Andreas Wolter

Andreas Wolter

@Oli: der Sunset Switch ist an den RST Pin angeschlossen, nicht an einen der GPIOs. Daher wird der auch nicht deklariert und abgefragt. Der Mikrocontroller müsste damit neugestartet werden.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Oli

Oli

Hallo, Habe das Skript runtergeladen und auf meine Hardware angepasst (MicrostepDriver)
Was ich in dem Skript vermisse ist irgendwas mit dem SUNSET, da der Schalter so kein Funktion auslöst. Oder ich verstehe es nur nicht. Kann mir jemand helfen?

Andreas Wolter

Andreas Wolter

@Wilfried: ich würde zuerst einen Test aufbauen mit dem A4988 Treiber. Dazu gibt es eine zweiteilige Blogreihe, die das Thema behandelt.
https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/schrittmotorsteuerung-mit-dem-arduino-nano-teil-1

https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/weitere-steuerungsmoglichkeiten-fur-unsere-schrittmotor-teil-2

Im Quellcode dieses Projekts hier ist alles ausführlich kommentiert. Ab Zeile 181 sind die Methoden/Funktionen/Prozeduren für die Motordrehung deklariert. Die müssten dann geändert werden. Der Aufruf der Methoden geschieht ab Zeile 143. Abhängig von den Werten des Lichtsensors wird jeweils die passende Methode aufgerufen. In den Methoden sieht man, welche Pins wie geschaltet werden, um die korrekte Drehung auszuführen.

Im Beitrag für den A4988 ist der Aufruf der Funktion MotorDirectionControl() in Zeile 220. Die Deklaration beginnt in Zeile 79. Auch dort werden die Pins entsprechend auf LOW oder HIGH gesetzt.

Ich hoffe, das hilft Ihnen für den Anfang.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Wilfried

Wilfried

Hallo Arduino Experten,
ich möchte den Solartracker nachbauen und die zwei ULN2003 durch zwei A4988 austauschen, weil ich stärkeren Stepper NEMA17 mit Getriebe verwenden möchte.
Mein Anliegen ist: wie und wo muss ich den Sketch ändern damit es auch mit dem A4988 funktioniert.
Allerdings bin ich Anfänger, 76 Jahre jung und benötige nur ernst gemeinte Unterstützung.
Schöne Grüße Wilfried

.DrHook

.DrHook

Hallo ich würde gern diese minitreiber Boards gegen größere Stepper driver und NEMA Motoren ansteuern tauschen kann mir jemand verraten wie ich die anschließen muss bzw. pinbelegung auf dem mega (auf dem driver sind die ja mit DIR PUL und EMA beschriftet) und nicht einfach mit den Pin Nummern
Dank euch

Miguel Torres

Miguel Torres

Hi Sascha,

To connect a 12 volt solar panel to the Microcontroller, you must make a voltage divider circuit with two series resistors, R1= 1.4K ohm and R2 1k ohm, connect the output of the solar panel to the ends of the series circuit (remember to connect the ground line of the panel to the ground line of the microcontroller) and connect to the A4 port of the microcontroller the junction between R1 and R2, in this way you reduce the voltage from the 12 volts of the panel to the 5 volts working voltage of the port.

Next, you must modify the line of code that takes the voltage reading from the a-panel:
solar_panel_voltaje =((solar_panel_read*5.0)/1023.0)*2.4
Multiply by 2.4 to get the actual solar panel reading on the screen.

We hope we have helped you. Best regards.

Miguel Torres Gordo

Sascha

Sascha

Hallo zusammen.

Ich würde dieses Projekt gerne mit einem 12 V Panel realisieren (Antrieb einer Teichpumpe). Zugegeben, ich bin nicht so tief in der Arduino Materie. Sehe ich das richtig, dass ich für ein 12 V Panel einen Voltage Sensor brauche? Kann ich den dann einfach an A4 hängen und den Code dementsprechend anpassen?

Viele Grüße
Sascha

Otmar Becker

Otmar Becker

@Andreas Wolter: Vielen Dank für den Hinweis. Ich habe jetzt den Sketch von Pontifex installiert (wieso nicht gleich?) und das Kompilieren funktioniert, ebenfalls das Hochladen auf den D1 32. Super!
Gruß
Otmar

Andreas Wolter

Andreas Wolter

@Otmar Becker: welche Probleme haben Sie denn genau? Gibt es spezielle Fehlermeldungen? Wenn Sie den Sketch von Pontifex verwenden, könnte er Ihnen eventuell besser weiterhelfen. Er hat das Projekt für den ESP angepasst.
Ganz allgemein müsste das ESP32 Dev Module richtig sein. Sie könnten auch das ESP32 Wrove Module testen.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Otmar Becker

Otmar Becker

Hallo,
ich habe Probleme beim Kompilieren des Sketch´s von Thorsten (13.08.2022). Als Board habe ich in der Arduino IDE das Board “ESP32 Dev Module” eingegeben, da ich das D1 32 (ESP32 Wroom – 32) von Az-Delivery benutzen möchte. Habe ich überhaupt das richtige Board in der IDE angegeben. Sonst funktioniert das Board ja mit dieser Einstellung.

Grüße
Otmar

Andreas Wolter

Andreas Wolter

@Horst: danke für den Hinweis. Wir haben das Bild (auch das zum Downloaden) ausgetauscht.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Horst

Horst

Hallo,
In der Zeichnung des Schaltbildes sind die beiden Motoren vertauscht. Laut Schaltplan wird der horizontale Motor zu Pin 6-9 verdrahtet, in der Software wird jedoch der horizontale Motor über Pin 2-4 gesteuert (und umkehrt für den vertikalen Antrieb).

LG
Horst

Andreas Wolter

Andreas Wolter

@Eddy: ja es sollte direkt funktionieren. Ich vermute, dass die verwendeten Bibliotheken fehlen. Es kann noch andere Ursachen haben. Dort würde ich aber zuerst anfangen zu suchen. Sie können auch die Fehlermeldung posten. Die geben meistens schon die nötigen Informationen aus.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Eddy Lösel

Eddy Lösel

hallo
ich hab versucht das teil zu bauen
Scheitere aber schon am kompilieren lauter Fehlermeldungen und google liefert leider auch keine lösung.
Sollet nach dem Software download nicht mit arduino ide ein einfaches kompilieren und anschliesender upload in den arduino möglich sein

?!?

Gruß Eddy

Hat das jemand vertig am laufen und kamm mir die Arduino datei senden

Thx

Andreas Wolter

Andreas Wolter

@Eddy: ich vermute, dass die fehlenden Bibliotheken (siehe Übersicht im Beitrag) nicht vollständig installiert wurden. Den Quelltext aus der Webseite zu kopieren, ist nicht notwendig, da einfach nur einzelne Teile daraus beschrieben werden. Den Sketch downloaden und per Arduino IDE auf den MC laden sollte direkt funktionieren. Ansonsten bitte auch gern die Fehlermeldung posten.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Eddy

Eddy

Hallo
Also ich hab versucht das Ding nach zu bauen und scheitere aber schon am Upload zum Arduino (mega2560)
Arduino ide gestartet das file aus dem Zip geladen Board, Port usw. eingestellt aber schon beim Kompilieren ellen lange fehler meldungen

Wenn ich die weiter oben genannten code zeilen auch noch einfüge wir die Fehler meldungs seite nur um so länger

Kann da jemand helfen ?

big thx

Thorsten Hartwig

Thorsten Hartwig

Da überraschend viele Downloads auf Thingiverse zu verzeichnen sind, habe ich das Teil nun auch mal fertig gebaut.
Einige 3D-Teile wurden noch etwas verbessert, habe es auf Thingiverse aktualisiert.

Ich habe ein “Wemos D1 R32” Board verwendet. Das hat einen ESP32 anstatt des antiken 328P Prozessors. Einfach endgenial, dieses Board. Das gibts hier:
https://www.az-delivery.de/products/esp32-d1-r32-board

Da ich Lochraster hasse und für diese Kleinigkeit ein eigens konstruiertes PCB wohl übers Ziel hinausgeschossen wäre habe ich ein Breadboard genommen, das werde ich zur Stabilisierung einfach in Heisskleber ersäufen.
Gibts hier:
https://www.az-delivery.de/products/mini-breadboard

Wer sich das im Detail mit Bildern und Video ansehen möchte, es liegt alles auf GitHub nachbaufertig parat. (Auf Thingiverse sind halt nur STL und Fotos). Statt Fritzing-Bildchen ist da ein KiCad-Schematic, aber die PIN-Liste in PinConfig.h sollte auch reichen zum Nachbauen. Die Blaue Onboard-LED und der zugehörige 1k-Widerstand müssen vom Wemos Board entfernt werden, sonst geht der GPIO2 nicht wie gewünscht. GPIO33 ist zum Anlöten auf dem Board zu finden.

https://github.com/Pontifex42/SolarTracker
Hier das Video:
https://github.com/Pontifex42/SolarTracker/blob/master/Media/ProveSmall.mp4

Have fun!

Andreas Wolter

Andreas Wolter

@Thorsten Hartwig: Ich habe mir die Bilder kurz angesehen. Sieht sehr gut aus. Ich verlinke das im Projekt. Vielen Dank!

Grüße,
Andreas Wolter
AZ-Delivery Blog

Thorsten Hartwig

Thorsten Hartwig

Wie versprochen, hier die STL Dateien. Es ist so wesentlich einfacher als mit Holz. Habe natürlich einiges geändert, 3D-Druck ist halt ein völlig anderes Konstruieren. Eine finale Version des Solarpanel-Rahmens wird gelegentlich upgedated. Aber ohne die Skizzen wäre ich völlig hilflos gewesen, nochmals vielen Dank an den Autor.

https://www.thingiverse.com/thing:5437654

Freue mich über jeden Make. Haut rein.

Pontifex42

Pontifex42

Vielen vielen Dank für die Zeichnungen. Ich habe das soweit in Fusion360 abgezeichnet. Das ist aber alles für Holzschnitt gedacht. Für 3D Druck muss ich noch einiges ändern. Z.B. kann man alle Löcher gleichmit drucken anstatt später zu bohren. Ausserdem kann man einige Sachen gleich am Stück machen anstatt aus flachen Einzelteilen zusammenzustecken. Zudem sind einige Stellen auf “Maß” gemacht, d.h. man steckt ein 30mm Stück in einen 30mm Slot. Bei Druckteilen sollte man da ein oder zwei Zehntel mm Spiel vorsehen, spart das Feilen. Die Materialstärke von 3mm ist eh nicht so optimal für 3D-Druck, da werden es eher 1,5-2mm.
Ich schicke die Dateien zum Veröffentlichen, wenn ich das erfolgreich zusammengebaut habe. Vermutlich in den nächsten 5 Tagen.

Andreas Wolter

Andreas Wolter

Wir haben am Ende des Beitrags einen Link zu einer PDF-Datei ergänzt. Sie enhält Skizzen mit Maßangaben der einzelnen Bauteile.

Wenn Sie Parts für den 3D-Drucker erstellen und diese bei uns veröffentlichen möchten, dann geben Sie Bescheid. Wir können Sie dann hier ebenfalls veröffentlichen.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Andreas Wolter

Andreas Wolter

Was die Maße angeht, ist der Autor des Beitrags dabei, eine Übersicht anzufertigen. Die werden wir nachreichen.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Jack

Jack

Gibt es abmessungen von die drehscheibe und so weiter?
Danke.
Jack.

Peter

Peter

@Pontifex42
Bitte ich hätte Interesse an den..STL files
Danke!

Andreas Wolter

Andreas Wolter

@Alex: das ist korrekt. Nach Aussage des Autors hatte er zur Zeit der Erstellung des Projektes nur dieses andere Display zur Hand. Es hat jedoch den gleichen Chip und wird genauso verwendet, wie das verlinkte Display.

@Marco: theoretisch wäre es möglich. Es müssen jedoch Anpassunge an den Verbindungen und im Code vorgenommen werden. Der analoge Pin zum Auslesen der Spannung des Solarpanels muss dort für die Verbindung des OLEDs verwendet werden.
(Info des Autors)

Grüße,
Andreas Wolter
AZ-Delivery Blog

Pontifex42

Pontifex42

@Marco: Ja, Nano geht auch. Hab jetzt die Pins nicht durchgezählt, aber sollte reichen. Und wenn es knapp mit den Pins wird: einfach die Endschalter parallel zu zwei der LDRs schalten, das lässt sich dann per Software erkennen.
@Alex: Es gibt diese Displays tatsächlich in einer Variante, die oben fix einen gelben Bereich haben und darunter blau oder weiss sind. Findet man bei Suche nach “OLED Display blue yellow”, dauert halt einen Augenblick.
@AZDelivery: Wollte das schon lange mal nachbauen, aber da ist keine Skizze für die Holzteile. Gibt es da was? Bin etwas unbegabt beim mechanischen konstruieren. Würde ich sowieso nicht aus Holz machen sondern 3D-Drucken. Falls jemand dann interesse an den STL-Dateien hat, kann ich die gern publishen.

Marco

Marco

Hallo,
Ein interessantes Projekt. Ich habe noch einen Nano V3.0 mit Atmega328 CH340 herumliegen. Funktioniert das auch mit dem Arduino?
Danke Maro

Alex

Alex

Hallo,

das angegebene Display ist doch eigentlich weiss bzw. monochrom, wie ist es möglich, dass der angezeigte Text gelb und blau ist ?

Grüße

Kommentar hinterlassen

Alle Kommentare werden von einem Moderator vor der Veröffentlichung überprüft

Empfohlene Blogbeiträge

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery