Jump to content

heinz_a

Members
  • Gesamte Inhalte

    21
  • Benutzer seit

  • Letzter Besuch

Posts erstellt von heinz_a

  1. In der Zwischenzeit hat das Bricklet ohne weiteres Zutun zu rauchen angefangen, dachte schon es wäre tot. Es hat sich auch eine zeitlang sehr merkwürdig verhalten.
    Jetzt habe ich das Magnetventil durch einen PC-Lüfter getauscht. Beim Anschließen der Stromversorgung ist zwar der Viewer abgerauscht, aber inzwischen verhält sich das Bricklet als wäre nichts gewesen.  Egal, wo ich den Strom unterbreche, nichts friert mehr ein.

     

  2. Noch präziser: Wenn ich den Strom auf der Ausgangsseite des VC trenne, verabschieden sich kurzzeitig die Tabs im BrickViewer (bis auf SetUp), anschließend tauchen diese wieder auf, mit dem Unterschied, daß beim VC die vertikalen Werte stehen bleiben, die Zeitachse läuft weiter. Ich versuch mal von dem Vorgang einen Film zu machen.

  3. Der Akku liegt am Eingang des VC, am Ausgang in diesem Fall ein Magnetventil (ein Linearmotor hat den gleichen Effekt).
    Wenn ich den Strom beim Akku unterbreche zeigt das OLED 0.00 W, beim Anschließen wieder korrekt, wie im Bild.
    Aber wenn ich auf der Verbraucherseite unterbreche tut das VC nichts mehr.
    Um die Schaltung wiederzubeleben muß ich im BrickViewer resetten, im BrickViewer funktionierts dann wieder.
    Beim RED muß ich das Programm neu starten, daß die Leistung im OLED wieder korrekt angezeigt wird.
    Das Merkwürdige ist, daß es egal ist, ob der Stapel von USB oder vom Akku versorgt wird.

    VoltageCurrent_800.JPG

  4. 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

  5. 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()

    FullSizeRender.thumb.jpg.e441c678ecf78da69efafd749d2b71d3.jpg

    FullSizeRender_4.thumb.jpg.f1bafcbca489dad23faade34028489ce.jpg

  6. Die Konzentration der Säure ändert sich nicht so stark, dass man diese über den Behandlungszeitraum überwachen müßte. Sensoren gibt es, die dann mehrere hundert Euronen kosten. Wenn man es mit Tinkerforge angehen will, wären Impedanz und Dichte ein Ansatz.

    Für den Imker macht die Überwachung des Gewichtes des Bienenstocks Sinn. Das kann man mit dem „Load Cell Bricklet“ realisieren.

  7. Callback function ist besser ....

     

    def cb_illuminance(illuminance):

        global StartZeit

        global StopZeit

        if illuminance/10.0 > 50:# Lampe leuchtet

            StartZeit = time.time()

        if illuminance/10.0 < 20:# Lampe aus

            StopZeit = time.time()

            print('Brennerzeit = {0}'.format(str(round(StopZeit - StartZeit,0)))+' Sekunden')

            # Tag, Uhrzeit, Brennerzeit in DB schreiben

×
×
  • Neu erstellen...