Author Topic: Sun Tracker / Sonnennachführung  (Read 2605 times)

heinz_a

  • Newbie
  • *
  • Posts: 8
    • View Profile
Sun Tracker / Sonnennachführung
« on: February 25, 2018, 14:57:19 »
Solarmodul per Servo der Sonne nachführen.
Material: Servo-Brick, Servo, PV-Modul, Raspberry-Pi
Das Programm ist recht einfach gehalten. An Sonenauf-/untergang kann mach noch weiterentwickeln.

Die Zeiten im Programm sind für Tests reduziert. Das Poti ist zum manuellen Stellen, z.B. nach Sonnenuntergang ...

#!/usr/bin/env python
# -*- coding: utf-8 -*- 

HOST = "localhost"
PORT = 4223
UID_servo = "6KveiL" # Change to your UID
UID_rotary = "y5A"
servo_num = 1

from tinkerforge.ip_connection import IPConnection
from tinkerforge.brick_servo import Servo
from tinkerforge.bricklet_rotary_poti import RotaryPoti
from threading import *
from datetime import time, datetime, timedelta

ipcon = IPConnection() # Create IP connection
servo = Servo(UID_servo, ipcon) # Create device object
poti = RotaryPoti(UID_rotary, ipcon)

Sonnenzeit = timedelta(hours=10)
Sonnenuntergang = time(17, 0, 0).hour
Trackzeit = 10 #1800 = halbe Stunde

def track():
    jetzt = datetime.now().hour
    Zeit_bis_Untergang = timedelta(hours=(Sonnenuntergang-jetzt))
    print("Zeit: {0}".format(str(datetime.now())))
    print("Sonnenuntergang: {0}".format(str(Sonnenuntergang)))
    print("Verbleibende Zeit: {0} ".format(str(Zeit_bis_Untergang)) + " (Std.)")
    global akt_position
    servo.set_position(6, akt_position)
    akt_position = akt_position + 900
    t = Timer(Trackzeit, track)
    t.start()


def cb_position(position): #Poti zum manuellen Positionieren
    servo.set_position(6,60*position)

def cb_reached(servo_num, position): #Zielposition erreicht
    global akt_position
    print("Position: {0}".format(str(akt_position)))
    if position == 9000:
        akt_position = -9000
        t = Timer(14, track) #14*3600 Min. bis Sonnenaufgang

if __name__ == "__main__":
    ipcon.connect(HOST, PORT) # Connect to brickd

    servo.register_callback(servo.CALLBACK_POSITION_REACHED, cb_reached)
    servo.enable_position_reached_callback()

    servo.set_velocity(6, 4000) #Geschwindigkeit niedrig
    servo.set_acceleration(6,8000) #Beschleunigung gering
    servo.set_position(6, 0)
    servo.enable(6)
    poti.set_position_callback_period(50)
    poti.register_callback(poti.CALLBACK_POSITION, cb_position)

    global akt_position
    jetzt = datetime.now().hour
    if jetzt > Sonnenuntergang: # Nacht
        Stunden_bis_Start = timedelta(hours=24-jetzt+7)
        print("Start in {0} Stunden".format(str(Stunden_bis_Start)))
        t = Timer(Stunden_bis_Start.total_seconds()/3600, track)
        t.start() # bei Sonnenaufgang starten
    else:
        print("jetzt: {0}".format(str(jetzt)))
        # Startposition anfahren
        akt_position = 9000-(Sonnenuntergang-jetzt)*1800 #Endposition - Stunden * Winkel/Std.
        akt_position = -9000
        t = Timer(3, track) #
        t.start()           # sofort starten

    raw_input('Press key to exit\n') # Use input() in Python 3
    ipcon.disconnect()
    t.cancel()
« Last Edit: February 28, 2018, 18:30:40 by heinz_a »

FlyingDoc

  • Sr. Member
  • ****
  • Posts: 451
    • View Profile
    • Head Up Display für UL Flieger
Re: Sun Tracker / Sonnennachführung
« Reply #1 on: February 25, 2018, 23:29:32 »
Also so we ich es sehe fürst du dein Solarmodul Zeitgesteuert. Also je nach Zeit eine bestimmte Position. Richtig?
Warum fürst du dein Solarmodul nicht nach dem wirklichen Sonnenstand?
Ich habe sowas vor knapp über 20 Jahren mit einer Microsteuerung von Conrad für einen Kumpel gebaut.
Nur das ich seine Solarmodule, hatte er selber gebaut in dem er Wasser durch Rohre geführt hat um seinen Kessel zu erwärmen, über zwei kleine Solarmodule dem Sonnenstand nachgeführt habe.
Ich hab nur eine Achse gesteuert. Lässt sich aber einfach auf 2 Achsen, also Höhe und Schwenken, erweitern.
Dazu habe ich einfach 2 Minisolarzellen direkt nebeneinander gelegt und dann das ganze in ein Gehäuse eingebaut, das oben eine definierte Öffnung hatte.
Dazu habe ich die Spannung beider Solarzellen verglichen und die Solarmodule , an dem meine Solarmesseinrichtung mit befestigt waren, einfach solange in die Richtung bewegt bis beide Solarzellen den fast gleichen Wert brachten.
Die Richtung die man bewegen muss erkennt man daran, welche Solarzelle mehr Spannung liefert.

Ansonsten eine gute einfache Umsetzung. ;)
« Last Edit: February 25, 2018, 23:32:03 by FlyingDoc »
Mein Projekt

Head Up Display für UL Flieger

heinz_a

  • Newbie
  • *
  • Posts: 8
    • View Profile
Re: Sun Tracker / Sonnennachführung
« Reply #2 on: February 28, 2018, 18:36:03 »
Funktion zum Laden des Akkus

def akku_spannung():
    spannung = servo.get_external_input_voltage()
    if spannung < 6500: # 6,5 V
        print("Laden")
        #Relais ein     # NiMH-Akku 7,2 V
        relais.set_state(True, False)
    elif spannung > 8500: #8,5 V
        print("Stop Laden")
        #Relais aus
        relais.set_state(False,False )
    return spannung