heinz_a Geschrieben February 25, 2018 at 13:57 Share Geschrieben February 25, 2018 at 13:57 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() Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
FlyingDoc Geschrieben February 25, 2018 at 22:29 Share Geschrieben February 25, 2018 at 22:29 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. Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
heinz_a Geschrieben February 28, 2018 at 17:36 Autor Share Geschrieben February 28, 2018 at 17:36 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 Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.