Sonnennachführung ?

So nun geht es etwas weiter.
Habe nach langer Zeit etwas in mein Projekt weiter gemacht und nun die Schrittmotor Ansteuerung fertig gestellt.

Falls es jemand es braucht, ich habe auch noch ein kleines Testprogramm dazu gemacht und eine Platine, der Aufbau ist wie auf der Seite rn-wissen.de.

Wie nun aber kann ich die Zeit mit der Ansteuerung Synchronisieren, hat jemand eine Idee.

Gruß Micha
 

Anhänge

  • test3.bas
    1,4 KB · Aufrufe: 21
  • schrittmotor.zip
    63,6 KB · Aufrufe: 11
Hi Micha,

wenn der Schrittmotor funktioniert dann hast Du ja schon einmal die erste Hälfte Deiner Aufgabe erledigt.

Die Zeit setzt Du über die Position der Schrittmotoren in Bezug. Du weißt ja, morgens = Osten, mittags = Süden, abends = Westen.
Du benötigst also auf jeden Fall Variablen oder Endschalter oder oder zur Positionsbestimmung. Hast Du so etwas? Wenn ja dann kannst Du Dir ausrechnen, wie viele Schritte für den Schrittmotor in 12 Stunden betaktet werden müssen, damit das Ding von Ost nach West dreht. Dabei bleibt es Dir überlassen, ob Du das kontinuierlich machst oder ob Du alle 5 Minuten oder alle Stunde nachführst.

Du wirst auf jeden Fall eine Uhrzeit und ggf. auch ein Datum brauchen um Zeit und Position zu verrechnen.

Grüße,
Markus
 
Hi Makus,
lebst ja auch noch :D
ja ich wollte 180° nehmen von morgens um 9 bis Abends um18 Uhr oder so.
Ja natürlich kommt da noch eine Uhr mit rein, ich dachte da an einem DS1307, aber ich war schon am grübel, wird da Automatich die Sommerzeit umgestellt ? ich kenne mich nicht mit dem Teil aus.

wie nun bekomme ich die zeit zum Motor, muss ich da eine Formel von der Sonnen Führung verwenden ?

Gruß Micha
 
Hallo Micha,

ja ich leben noch :p Bin zur Zeit nur total unter Wasser und unterwegs und deswegen habe ich weniger Zeit mich hier im Forum "auszutoben" :rolleyes:

Eigentlich verstehe ich Deine Frage nicht richtig und ich verstehe auch nicht wo das Problem ist. Vielleicht dazu noch ein paar Gedanken von mir:

- Ich glaube Du musst Dir keine Gedanken um Winterzeit und Sommerzeit machen. Meiner Meinung nach reicht es zur Nachführung immer mit Winterzeit und damit mit der Normalzeit zu fahren. Die Normalzeit ist die echte Zeit denn die Sommerzeit ist künstlich um eine Stunde verschoben.
Die Sonne steht zur Normalzeit Mittags um 12:00 Uhr genau im Süden. Bei Sommerzeit ist das 1 Uhr. Also was solls, lass die Uhrzeit einfach auf Winterzeit und Du hast die feste regel 6 Uhr Osten. 12 Uhr Sünden. 18 Uhr Westen.

- So, nun kannst Du Dir überlegen wie Du die Panels nachführen möchtest. Möchtest Du zyklisch/kontinuierlich nachführen oder die Position der Panels alle 30 Minuten ändern oder alle Stunde?

- Eigentlich ist doch dann der Ansatz ganz einfach. Gehen wir davon aus, dass Du jede Stunde die Panels nachführen möchtest.
Wir beginnen um 6 Uuhr bei 0 Grad im Osten und Du weißt, dass Du um 12 Uhr bei 90° im Süden stehen möchtest. Bedeutet, Du überwachst die Uhrzeit und immer zur vollen Stunde fährst Du die Panels mit dem Motor um 15° nach Westen.
Dann bist Du um 12 im Süden und nach 12 Stunden bei 180° im Westen.

- Im Westen würde ich bis 23 Uhr stehen bleiben und dann wieder 180° zurück auf Osten drehen damit die Panels für das frühe Morgenlich schon richtig Richtung Osten stehen.

Fazit:
Du musst nicht die zeit mit einer Formel in Bezug setzen sonder Dir überlegen, wann Du was machen möchtest und mit einer Abfrage auf die zeit die entsprechende Aktion auslösen.

Ich hoffe das hilft Dir nun weiter den Knoten zu lösen. Sicherlich gibt es noch weitere Ansätze aber ich würde zunächst einfach anfangen.

Grüße,
Markus
 
Hi Markus,
ja vielleicht denke ich wieder mal zu kompliziert, oder drücke mich mal wieder mistich aus :eek:
Ich würde es gern mit einer zyklischen nachführung machen.
also ich habe mal 180° und will 9 h nachführen von 9-18 Uhr würde dann später 5 minütig nachfuhren wollen, wir nehmen mal hier für 30 Minuten,
wären dann 18 Positionen die wider durch 180 aufteilen sind 10° pro zyklus.

Aber ich würde denn noch jeden Zyklus genau festlegen mit Art einer Tabelle wie bei der 7 Segmentanzeige, so da jede zeit ein bestimmte stellung hat.

z.B.
Schritte:
' 0 1 2 3
Data 9 , 9.30 , 10 10.30 .... usw

geht das irgend wie ??

Gruß Micha
 
Hi Micha,

wie Tabelle? Ich verstehe es nicht! Du weißt Doch für wie viel Grad Du welche Schritte machen muss. Rechne Dir doch aus wie viele Schritte Dein Schrittmotor machen muss um 180° zu drehen und mache jede Sekunde oder jede Minute oder alle 30 Minuten die entsprechenden Schritte.

Warum Tabelle? Was willst Du mit der Tabelle? Du kannst ohne Tabelle die Nachführhung sogar via SW einstellbar machen und einstellen, alle wieviel Minuten Du nachführen möchtest. Bezug dafür ist die Anzahl an Schritten vom Schrittmotor oder wenn Du Gradinformation hast die Gradanzahl, geteilt durch die Unterteilungsschritte.

Warum willst Du erst um 9 Uhr mit dem nachführen beginnen?

Grüße,
Markus
 
Hi Markus,
ja nee, ich glaube wir müssen das etwas anders machen.

Gruß Micha
 
Weiterführung

So, nach Markus seinen Tipp bin ich nun auf dem Servo gekommen.
Nun soll der Servo, da er ja jeden Grat nach Angabe an fährt, die Nachtführung übernehmen, mit Markus seiner unterstützung habe ich nun etwas zusammengerechnet, aber so funktioniert es noch nicht.

Die zuordnung von der Zeit zur der Stunde im rechenprogramm bekomme ich noch nicht hin, so wie die Weiterleitung von Uhrzeit_in_minuten, irgendwie komme ich da nicht weiter.
Kann jemand helfen, wie ich den Knoten lösen kann :D

Gruß Micha

Code:
'##### ein servo soll nach zeit ein bestimmten winkel ansteuern

$regfile = "M8def.dat"
$crystal = 8000000

$framesize = 128
$hwstack = 128
$swstack = 128

Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2

Config Lcd = 16 * 2
Initlcd
Waitms 50
Cursor Off Noblink
Cls


Config Adc = Single , Prescaler = Auto , Reference = Avcc   '##### interen 5V
Cursor Off

Config Servos = 1 , Servo1 = Portb.0 , Reload = 10


Config Debounce = 200

Config Portd = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portc.5 = Output

Config Portd.0 = Input
Config Portd.1 = Input
Config Portc.4 = Input
Config Portb.0 = Output

Portd.0 = 1                                                 '##### Taster1, Zeit/Datum stellen, PullUp ein, schaltet gegen Minus
Portd.1 = 1                                                 '##### Taster2,  Zahl hochzählen, PullUp ein, schaltet gegen Minus
Portc.4 = 1                                                 '##### Eingang für '' schaltet gegen Minus

Portc.0 = 0                                                 '##### AD Eingang
Portc.3 = 0                                                 '##### AD Eingang
Portb.1 = 1                                                 '##### Ausgang für
Portb.2 = 1                                                 '##### Ausgang für
Portc.5 = 0                                                 '##### Ausgang für
Portb.0 = 0


Tast1 Alias Pind.0                                          '##### Taster1
Tast2 Alias Pind.1                                          '##### Taster2

Const Grad = 0.25                                           ' ##### 12 Stunden = 720 Minuten = 180° = 0 , 25° Pro Minute.

Dim Uhrzeit As Word
Dim Minuten As Single
Dim Stunden As Single
Dim Winkel As Byte
Dim Uhrzeit_in_minuten As Word
Dim Differenzzeit As Word



Servo(1) = Winkel

'Const An = 150
'Const Aus = 40

Config Timer1 = Timer , Prescale = 256
Const Timerwert = 34286

On Timer1                                                   ' ##### Timer1_sprung
Enable Timer1
Enable Interrupts
Timer1 = Timerwert


Config Clock = Soft

Time$ = "07:59:00"


Start Adc

Do                                                          '##### Anfang der Hauptschleife


    Locate 1 , 1
    Lcd Time$

    Debounce Pind.0 , 0 , Zeit , Sub                        '##### Sprung in Subroutine -Zeit/Analog-



 Servo(1) = Winkel

' _hour = Stunden
 '_min = Minuten

 If _hour > 6 And _hour < 18 Then


'Beginnst  6 Uhr bis 18 : 00 Uhr Osten Ist 0 Grad , Westen Ist 180°
'Bedeutet 12 Stunden = 720 Minuten = 180° = 0 , 25° Pro Minute.

 Uhrzeit_in_minuten = Stunden * 60                          '##### Uhrzeit Umrechnen Auf Minuten
 Uhrzeit_in_minuten = Uhrzeit_in_minuten + Minuten

 Uhrzeit = Uhrzeit - 360
 Uhrzeit = Uhrzeit * Grad

 Differenzzeit = Uhrzeit - 360                              '##### Differenzzeit sind 6 h  Uhrzeit Abziehen : 6 * 60 = 360 Minuten

 Winkel = Differenzzeit * Grad
                                                             '##### "Grad" 12 Stunden = 720 Minuten = 180° = 0 , 25° Pro Minute.
 End If



 'Servo(1) = Winkel
 'Waitms 10


Loop

End



'Stunde#########################################################################
Zeit:

Cls                                                         '##### Einsprungpunkt der Subroutine -Time/Analog-
Waitms 200
Cls                                                         '##### lösche Zeilen
Do
    Locate 1 , 1
    Lcd "Set Hour:"                                         '##### Stunden setzen
    Locate 2 , 1
    Lcd _hour
    If Tast2 = 0 Then                                       '##### Mit Taster 2
        Incr _hour                                          '##### hochzählen
        Locate 2 , 1
        Lcd _hour
        Waitms 100
    End If
    If _hour > 23 Then
        Cls
        _hour = 00
    End If                                                  '##### solange, bis Taster 1 gedrückt
Loop Until Tast1 = 0
Waitms 200

'Minute#########################################################################
Cls
Do
    Locate 1 , 1
    Lcd "Set Minute:"
    Locate 2 , 1
    Lcd _min
    If Tast2 = 0 Then
        Incr _min
        Locate 2 , 1
        Lcd _min
        Waitms 100
    End If
    If _min > 59 Then
        Cls
        _min = 00
    End If
Loop Until Tast1 = 0
Waitms 200
Cls


Return
 
Hi Micha,

im Grund hast Du verstanden was ich Dir am Telefon erklärt habe. Nur mit der Umsetzung hapert es noch a bissle :p

Schauen wir uns mal den Kern Deiner Rechung an:

Code:
If _hour > 6 And _hour < 18 Then


'Beginnst  6 Uhr bis 18 : 00 Uhr Osten Ist 0 Grad , Westen Ist 180°
'Bedeutet 12 Stunden = 720 Minuten = 180° = 0 , 25° Pro Minute.

 Uhrzeit_in_minuten = Stunden * 60                          '##### Uhrzeit Umrechnen Auf Minuten
 Uhrzeit_in_minuten = Uhrzeit_in_minuten + Minuten

 Uhrzeit = Uhrzeit - 360
 Uhrzeit = Uhrzeit * Grad

 Differenzzeit = Uhrzeit - 360                              '##### Differenzzeit sind 6 h  Uhrzeit Abziehen : 6 * 60 = 360 Minuten

 Winkel = Differenzzeit * Grad
                                                             '##### "Grad" 12 Stunden = 720 Minuten = 180° = 0 , 25° Pro Minute.
 End If


1. Uhrzeit_in_minuten = Stunden * 60 '##### Uhrzeit
Hmmm, woher kommt die Vraible Stunde? Angelegt ist sie aber ich finde nirgends eine Zuweisung!?!?!

2. Uhrzeit = Uhrzeit - 360
Was soll das? Wie ist Uhrzeit vor der Berechung gesetzt?

Alsooo..... ich würde es so angehen:

Code:
Uhrzeit_in_minuten = _hour * 60
Uhrzeit_in_minuten = Uhrzeit_in_minuten + _min

Differenzzeit = Uhrzeit_in_minuten - 360

Winkel = Differenzzeit * Grad

Zur Hilfe rate ich Dir dringen folgendes:
Schaffe Dir eine RS232 Verbindung zum PC uns mache Dir Traceausgaben mit denen Du ganz einfach Deine Rechenwerte ausgibst und verfolgst, was der Code macht. Das ist speziell wenn Du icht sattelfest bist sooooo Hilfreich!

Ich hoffe Du kommst nun a bissle weiter!

Grüße,
Markus
 
Hi markus,
Das ist speziell wenn Du icht sattelfest bist sooooo Hilfreich!
das war volle Breitseite, hast ja recht, das sollte ich wirklich mal machen mit der Ausgabe zum PC.
Ich sagte doch das ich dies zuordnung, zur Stunde nicht wirklich hin bekam.

Gruß Micha
 
Hi Markus,
habe gerade festgestellt das die Einteilung des Servos ab 1° funktioniert so würde die 0.25 wegfallen, müsste ich dann noch in der Rechnung berücksichtigen.
Das Problem ist nur das der Servo irgendwas im falschen Hals bekommt, der reagiert erst bei einen wert (Winkel) von 100 ? danach kann ich mit einer Schritte weiter gehen.

Nun da werde ich noch etwas suchen müssen.

Gruß Micha
 
Hi Micha,

wollte Dir nich Breitseite geben :adore:

Aber ich war schon ein bissle überrascht als ich den Code gesehen habe.
Ich würde sagen, wenn Du Dir etwas Zeit genommen hättest und Dir ne gemütliche Tasse Kaffee gegönnt hättest dann wären Dir die großen Schnitzer, z.B. die Verwendung von nicht initialisieren Variablen usw. schon aufgefallen.

Du musst die 0.25 Grad als Faktor beibehalten!!!!! Daran darfst Du zur Rechnung nicht drehen.
Nur das Endergebnis welches nach der rechnung raus kommt, das kannst Du auf eine ganze Zahl runden und dem Servo füttern. Mir war schon von Anfang an klar, dass der Servo nur ganze Zahlen kann aber zum Rechnen brauchst Du unbedingt 0.25 denn nach vier Minuten muss hier 1 Grad rauskommen und nach 6 Stunden 90 Grad und das schaffst Du nur mit der Fließkommazahl!!!!

Achtung damit!

Hmmmmm; könntes es sein, das Du es och nicht ganz verstanden hast, wie die Rechnung funktioniert? Setzt Dich mal hn und male Dir das ganze mal auf einem Stück Papier auf. Oder komm mich einfach mal besuchen und dann erkläre ich Dir das :p

Grüße und viel Spass beim Grübeln,
Markus
 
Hi markus,
ja das stimmt wohl das ich es bestimmt erkannt hätte, aber zur zeit geht mal wieder alles drunter und drüber, das habe ich schon oft mit bekommen das dann solche Angelegenheiten einfach nicht gleich im Kopf wollen.

Die rechnung funktioniert, das stimmt schon, aber die 0.25 machen am ende immer eine ungerade Zahl, so das der servo damit nicht zurecht kommt, wen eine 15.25 errechnet wird springt der servo auf 0 und dreht wie doof, er würde erst wieder weiter gehen, wen er die 16 erreicht, wie du schon sagst 4 Minuten.
Habe es mal in Excel ausgeführt.

wen ich nun aber Const Grad = 1 nehme und am ende der Rechnung den Winkel / 4 nehme , fäht er wenigstens die Winkel schon mal richtig an
nur das er die komplette Zeit auch teilt, ist der nachteil, ab 10 Uhr 16 springt er wieder auf 0.
Mal sehen was sich noch machen lässt.
Du meinst die 0.25 lassen und in der Rechnung die Angelegenheit um rechen !?

Gruß Micha
 
Hallo,

wen ich nun aber Const Grad = 1 nehme und am ende der Rechnung den Winkel / 4 nehme , fäht er wenigstens die Winkel schon mal richtig an
nur das er die komplette Zeit auch teilt, ist der nachteil, ab 10 Uhr 16 springt er wieder auf 0.
Mal sehen was sich noch machen lässt.
Du meinst die 0.25 lassen und in der Rechnung die Angelegenheit um rechen !?
Ich kenne aus Basic noch die Funktion INT() und ROUND(). Gibts die bei Bascom
auch ?

INT(3.2)=3
INT(3.7)=3
INT(4.4)=4

ROUND(3.2)=3
ROUND(3.7)=4
ROUND(4.4)=4

INT() schneidet den Nachkommateil ab (Integer/Ganzzahl)
ROUND() rundet arithmetisch

Bei beiden kommen Ganzzahlen raus.

Gruß
Dino
 
Hi Dino,
ja die gibt es da auch,INT, SGN,Round, habe sie gefunden, Round hört sich nach meiner Meinung passend für diese Angelegenheit an.
Wen ich es heute Zeitlich schaffe werde ich es mal versuchen den Wert, Winkel, am ende der Rechnung mit rund auf ganze zahlen gehen zu lassen.

Gruß Micha
 
Hallo,

Hi Dino,
ja die gibt es da auch,INT, SGN,Round, habe sie gefunden, Round hört sich nach meiner Meinung passend für diese Angelegenheit an.
Die Funktionen sind bei Berechnungen immer recht oft in Verwendung ...

ABS() - Absolutwert (ohne Vorzeichen)
SGN() - Sign/Vorzeichen (+1,0,-1)
INT() - Integer (ohne Nachkommaanteil)
ROUND() - arithmetisch gerundet (evtl kann man die verbleibenden Stellen angeben)
VAL() - Zahl aus einem String erzeugen
STR$() - String aus einer Zahl erzeugen

Gruß
Dino
 
Hi Micha,

ja da bin ich aber froh. Sorry, ich habe nicht antworten können da ich die letzten Tage auf Seminar war. Aber Dino hat Dir ja toll weitergeholfen.

Grüße,
Markus
 
Hi Markus,
ja hat super geklappt, ich glaube der Reset sollte kein Problem mehr sein.
Wen ich mal das richtig durchdenke könnte die 'Rechnung auch auf ein Schrittmotor angewandt werden, aber so ist schon ganz gut, 4 Minuten ist für eine sonnennachführung schon optimal.

Gruß Micha
 
Hi Micha,

das hört sich gut an. Und wenn Du weitere Fragen hast dann stell einfach die Fragen hier im Forum ein. Du siehst ja, es sind ne Menge Leute dabei die auch gute Ideen haben. :p

Grüße,
Markus
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)