Solarpanel mit Ausrichtung zur Sonne hin

Hallo zusammen,

Wir haben ein Klein-Projekt mit unserem Kurs gestartet, mit dem wir ein Solarpanel auf einem Stellmotor () montiert haben. Dieses ist wie auf dem Bild unten angebracht. Ziel ist es, dass sich das Solarpanel in Richtung der Sonne ausrichtet. Dafür nutzen wir einen herkömmlichen Fotowiderstand um die Helligkeit auf einem integrierten Monitor anzeigen zulassen und der Stellmotor soll sich bei einem unterschrittenen Wert wieder hingegen der Sonne ausrichten. Wir haben diese Werte entsprechend des Raumlichtes angepasst.
Nun ergibt sich folgendes Problem: Der Fotowiderstand misst zwar korrekt den Wert, allerdings die Übertragung auf den Stellmotor nicht reibunglos. Deshalb richtet sich das Panel nicht aus und der Motor brummt lediglich vor sich hin.
Unsere Hypothesen wären: Einmal, dass die Stromversorgung über den 5V Anschluss nicht ausreichend ist, damit der Motor komplett ausdrehen kann. Da der Arduino nur am Laptop angeschlossen ist.
Zweitens wäre: Ob man mit zwei Anschlüssen am Stellmotor überhaupt auskommt, da man ja normalerweise vier der IN-Anchlüsse genutzt werden um den Motor zum Laufen zu kriegen.
Unser verwendeter Schrittmotor ist der 28BY J-48 mit ULN2003 Treiberplatine am Arduino.

Unser Sketch wäre wie folgt:

const int photoResistorPin= A0;
const int motorStepPin = 8;
const int motorDirectionPin = 9;

const int lightThresholdHigh = 650;
const int lightThresholdLow = 350;

void setup() {
// put your setup code here, to run once:
pinMode (photoResistorPin, INPUT);
pinMode (motorStepPin, OUTPUT);
pinMode (motorDirectionPin, OUTPUT);

Serial.begin (9600);

}

void loop() {
// put your main code here, to run repeatedly:
int lightIntensity= analogRead(photoResistorPin);
Serial.println (lightIntensity);

if (lightIntensity>lightThresholdHigh){
digitalWrite (motorDirectionPin, HIGH);
digitalWrite (motorStepPin, HIGH);
delay (10);
digitalWrite(motorStepPin, LOW);
delay (10);

}else if (lightIntensity<lightThresholdLow){
digitalWrite (motorDirectionPin, LOW);
digitalWrite (motorStepPin, HIGH);
delay (10);
digitalWrite (motorStepPin, LOW);
}



Vielen Lieben Dank, falls ihr uns helfen könntet.

Arduino Gruppe LER+M

Die Verkabelung für den Motor und den Treiber nicht über das Steckbrett ziehen, sondern extra verkabeln!

Gruß André

Hi,
der Code ist nicht vollständig.
Mach mal bitte folgendes:
In der Arduino-IDE auf BEARBEITEN - Für Forum kopieren.

Dann gehst Du in Deinen Post mit dem kleinen Bleistift unten rechts.
Dort markierst Du den gesamten Codeteil und ersetzt mit einem rechten Mausklick und einfügen den Textteil.

Wenn ich das richtig sehe, habt ihr nur zwei der vier Pins von dem Treiber verdrahtet. Das reicht nicht. Der Stepper hat zwei Spulen, die Ihr abwechselnd schalten müsst. Also alle vier Pins verdrahten.

Ein Beispiel:

#include <Arduino.h>

// Motor and clock parameters
constexpr unsigned STEPS_PER_ROTATION {4096};   // steps for a full turn of minute rotor

// wait for a single step of stepper
constexpr int DELAYTIME {2};

// ports used to control the stepper motor
// if your motor rotate to the opposite direction,
const byte NUM_PORTS {4};
const byte port[NUM_PORTS] {2, 3, 4, 5};

// sequence of stepper motor control
constexpr byte NUM_SEQUENCES {8};

// Schaltsequenzen 
//    8     4     2    1
//  LOW,  HIGH, HIGH, LOW 
//  LOW,  LOW,  HIGH, LOW 
//  LOW,  LOW,  HIGH, HIGH
//  LOW,  LOW,  LOW,  HIGH
//  HIGH, LOW,  LOW,  HIGH
//  HIGH, LOW,  LOW,  LOW
//  HIGH, HIGH, LOW,  LOW 
//  LOW,  HIGH, LOW,  LOW
//
constexpr byte seq[NUM_SEQUENCES] {0x06, 0x02, 0x03, 0x01, 0x09, 0x08, 0x0C, 0x04};

void rotate(int step) {
  static int phase {0};
  int i, j;
  int delta {(step > 0) ? 1 : 7};
  int dt {20};

  step = (step > 0) ? step : -step;
  for (j = 0; j < step; ++j) {
    phase = (phase + delta) % NUM_SEQUENCES;
    for (i = 0; i < NUM_PORTS; ++i) { digitalWrite(port[i], (seq[phase] >> i) & 0x01); }
    delay(dt);
    if (dt > DELAYTIME) { --dt; }
  }
  // power cut
  for (i = 0; i < NUM_PORTS; ++i) { digitalWrite(port[i], LOW); }
}

void setup() {
  Serial.begin(9600);
  for (byte p : port) { pinMode(p, OUTPUT); }
}

void loop() { 
  rotate(STEPS_PER_ROTATION); 
  delay(1000);
  rotate(STEPS_PER_ROTATION * -1); 
  delay(1000);
}

Der Motor mach 4096 (Halb-) Schritte für eine komplette Umdrehung. Das Beispielprogramm dreht den Motor einmal komplett Rechts und links herum...
Die Pins 2-5 des Controllers werden entsprechen auf die Pins IN1 bis IN4 gesteckt.

https://cookierobotics.com/042/

Hier ist eine sehr gute Anleitung wie es richtig geht.

Gruß

Pucki

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.