Raketenmodellbau.org Portal > Forum > Wasserraketen > Nutzlasten und Bergungssysteme > Altimeter mit TinyLily Mini und BMP180 Sensor
Du kannst keine neue Antwort schreiben
Seiten (3): « 1 [2] 3 »

Autor Thema 
Oliver Arend

Administrator


Administrator

Oliver Arend

Registriert seit: Aug 2000

Wohnort: Leinfelden

Verein: RMV / TRA #8311 L1 / Solaris

Beiträge: 8016

Status: Offline

Beitrag 7632624 [Alter Beitrag10. Oktober 2014 um 12:26]

[Melden] Profil von Oliver Arend anzeigen    Oliver Arend eine private Nachricht schicken   Oliver Arend besitzt keine Homepage    Mehr Beiträge von Oliver Arend finden

Sehr schade.

Auch wenn es theoretisch möglich ist, eine eigene PWM-Routine zu entwickeln und damit einen anderen digitalen Ausgang anzusteuern ...

Oliver
AchimO

Wasserratte

Registriert seit: Jul 2014

Wohnort: Berlin

Verein: AGM

Beiträge: 948

Status: Offline

Beitrag 7632629 [Alter Beitrag11. Oktober 2014 um 10:43]

[Melden] Profil von AchimO anzeigen    AchimO eine private Nachricht schicken   AchimO besitzt keine Homepage    Mehr Beiträge von AchimO finden

Oliver,

was Du da andeutest, gibt es bereits. Es ist eine Library 'Software Servo', die nicht Teil der Standard-Library ist. Im Gegensatz zu letzterer
- basiert sie nicht auf Interrupts, so dass ein Aufruf einer Routine refresh() alle 50 ms erfolgen muss
- kann sie mit allen Ports, also auch analogen(!) umgehen
- usw.

Ich werde das dann mal mit dem Port A0 versuchen. Periodische Aufrufe an sich sind ja in der Arduino-Software-Architektur kein Problem, da die zentrale Anwendungsroutine loop() sowieso immer periodisch aufgerufen wird. Man darf sich dort nur nicht zu lange "ausmähren".

Achim

Schneiden, schleifen, schrumpfen, kleben: das ist Wara-Bauers Leben,
Danach schleifen, laminieren: So kann dem Drucktank nichts passieren!

Oder wie die Lateiner sagen: laminare necesse est!
Oliver Arend

Administrator


Administrator

Oliver Arend

Registriert seit: Aug 2000

Wohnort: Leinfelden

Verein: RMV / TRA #8311 L1 / Solaris

Beiträge: 8016

Status: Offline

Beitrag 7632630 [Alter Beitrag11. Oktober 2014 um 12:20]

[Melden] Profil von Oliver Arend anzeigen    Oliver Arend eine private Nachricht schicken   Oliver Arend besitzt keine Homepage    Mehr Beiträge von Oliver Arend finden

Wie kann man dann sicherstellen, dass genau alle 50 ms refresht wird, ohne Interrupt? Der Ablauf der loop() muss ja dann immer genau gleich lang sein. Den Rest müsste man über "Wie viele Takte braucht dieser Befehl zur Verarbeitung" ausrechnen ...

Aber gut zu wissen dass Du nicht der erste mit dem Problem bist ;-)

Oliver

Geändert von Oliver Arend am 11. Oktober 2014 um 12:21

AchimO

Wasserratte

Registriert seit: Jul 2014

Wohnort: Berlin

Verein: AGM

Beiträge: 948

Status: Offline

Beitrag 7632632 [Alter Beitrag11. Oktober 2014 um 12:27]

[Melden] Profil von AchimO anzeigen    AchimO eine private Nachricht schicken   AchimO besitzt keine Homepage    Mehr Beiträge von AchimO finden

Ich hätte besser schreiben müssen, "mindestens alle 50 ms", ist also nicht das Problem.

Achim

Schneiden, schleifen, schrumpfen, kleben: das ist Wara-Bauers Leben,
Danach schleifen, laminieren: So kann dem Drucktank nichts passieren!

Oder wie die Lateiner sagen: laminare necesse est!
Lschreyer

Überflieger

Lschreyer

Registriert seit: Nov 2006

Wohnort: Zeven

Verein: AGM, L3

Beiträge: 1975

Status: Offline

Beitrag 7632633 [Alter Beitrag11. Oktober 2014 um 13:05]

[Melden] Profil von Lschreyer anzeigen    Lschreyer eine private Nachricht schicken   Lschreyer besitzt keine Homepage    Mehr Beiträge von Lschreyer finden

Also normalerweise erzeugt man ein Servosignal mit einem Timer, das geht eigentlich recht simpel. Ich bin jetzt nicht so mit Arduino bekannt, aber das sind ja atmegas. Man muss nur alle ca. 10-20 ms ein Highimpuls von 1-2 ms Länge erzeugen. Ein Timer wird so eingestellt, dass er alle 1,5 ms ein Interrupt auslöst, diese Zeit kann man je nach Servoposition um 0,5 ms verkürzen oder verlängern.
Die Zeit zwischen zwei Impulsen kann irgendwo zwischen 10 und 30 ms liegen, die ist nicht kritisch.


D. H. Man stellt den Timer auf die gewünschte Zeit ein, schaltet den Pin ein, schaltet dann den Timer an, und nach Ablauf des Timers wird im erzeugten Interrupt der Pin wieder ausgemacht, und der Timer wieder deaktiviert. Damit hat man genau die gewünschte Impulslänge.
Mit einem zweiten Timer kann man den Abstand zwischen den Impulsen auch genau einstellen. Im Interrupt des zweiten Timers, z.b. Alle 20 ms, kann man dann das obige Spielchen machen.


Wies geht steht auch hier.
http://www.mikrocontroller.net/articles/Modellbauservo_Ansteuerung


Always keep the pointy side up!
AchimO

Wasserratte

Registriert seit: Jul 2014

Wohnort: Berlin

Verein: AGM

Beiträge: 948

Status: Offline

Beitrag 7632643 [Alter Beitrag13. Oktober 2014 um 00:03]

[Melden] Profil von AchimO anzeigen    AchimO eine private Nachricht schicken   AchimO besitzt keine Homepage    Mehr Beiträge von AchimO finden

Louis,

vielen Dank für die Hinweise zur Servobehandlung. Beim Konzept des Arduino wollte man die Programmierung so einfach wie möglich machen und hat deshalb die Hardware-nahen Aktionen in Libraries gesteckt. Dadurch sollen dem Anwender Zugriffe auf die Hardware leicht gemacht werden, ohne dass man sich mit den Details auskennen muss. Die Arduino Servo Library arbeitet auch mit den Timern.

Nun wäre es aber m. E. nicht gut, wenn sich dabei Applikationsprogramm und die System-nahen Software-Komponenten - sprich Libraries - um Hardware-Ressourcen streiten und sich ins Gehege kommen würden.

Ich habe daher den auf den Arduino-Webseiten vorgeschlagenen Weg mit der Software Servo Library eingeschlagen und, siehe da, wenn man wirklich alle womöglich im Programm noch vorhandenen Wartezeiten mit refresh()-Aufrufen versieht, funktioniert es. Allerdings muss man dann auch bei Debug-Ausgaben sparsam sein, denn die erfolgen seriell auf den COM-Port (mit Warten - also wie weiland bei MS-DOS), und da geht die Zeit schnell drauf (bei 9600 Bd ca. 1 ms / Zeichen).

Man fühlt sich ein wenig in die Zeit zurückversetzt, als Computer noch keine Interrupte hatten. Aber in diesem Fall ist das kein Problem.

Wie gesagt, mein Test (Treppensteigen zwischen Erdgeschoss und 2. Etage) lief erfolgreich. Jetzt muss es natürlich noch aufs Feld gehen.

Hier der aktualisierte Schaltplan:



Achim

Schneiden, schleifen, schrumpfen, kleben: das ist Wara-Bauers Leben,
Danach schleifen, laminieren: So kann dem Drucktank nichts passieren!

Oder wie die Lateiner sagen: laminare necesse est!
Lschreyer

Überflieger

Lschreyer

Registriert seit: Nov 2006

Wohnort: Zeven

Verein: AGM, L3

Beiträge: 1975

Status: Offline

Beitrag 7632646 [Alter Beitrag13. Oktober 2014 um 10:57]

[Melden] Profil von Lschreyer anzeigen    Lschreyer eine private Nachricht schicken   Lschreyer besitzt keine Homepage    Mehr Beiträge von Lschreyer finden

Die Zusammenarbeit der verschiedenen Libraries ist der Grund, warum ich meinen Kram selber programmiere, dabei lernt man auch gleich noch wie das funktioniert. Ich hatte schon die seltsamstem Effekte, weil irgend eine Library einen Timer verwendet und eine andere den mitten drin umstellt. Timer sind schon eine komplizierte Sache, die sind ja sehr sehr universell und haben viele Knöpfchen an denen man drehen kann.
Aber wenns läuft ist es ja gut :-)


Always keep the pointy side up!
AchimO

Wasserratte

Registriert seit: Jul 2014

Wohnort: Berlin

Verein: AGM

Beiträge: 948

Status: Offline

Beitrag 7632704 [Alter Beitrag21. Oktober 2014 um 12:59]

[Melden] Profil von AchimO anzeigen    AchimO eine private Nachricht schicken   AchimO besitzt keine Homepage    Mehr Beiträge von AchimO finden

Bei Watterott habe ich OpenLog von Sparkfun entdeckt.





OpenLog ist in der Lage, auf Micro-SD-Karte alles aufzuzeichnen, was über Serial.print() ausgegeben wird. Man kann sogar in den Command-Modus wehseln und einige Commands ausgeben. Man könnte darüber z. B. eine kleine Konfigurationsdatei auf der Micro-SD-Karte auslesen (habe ich aber noch nicht ausprobiert). Dafür werden dann also die Pins D0, D1 (Rx, Tx) benötigt.

Das Teil ist nicht ganz preiswert (knapp 22 €), weil auf dem Board ein ATMega328 sitzt, der so programmiert ist, dass er über die entsprechenden Arduino-Libraries auf die Karte zugreift.

Aber immerhin kann man so die Flugdaten - oder auch Debug-Informationen - abspeichern und am PC auslesen.

So sitzt das dann (steckbar) auf meinem Board:



@Oliver:
Ich könnte ja sagen, ich habe extra dafür Platz auf meinem Board gelassen, aber das wäre gelogen; es war Zufall, dass der noch da war ...

Achim

Schneiden, schleifen, schrumpfen, kleben: das ist Wara-Bauers Leben,
Danach schleifen, laminieren: So kann dem Drucktank nichts passieren!

Oder wie die Lateiner sagen: laminare necesse est!
AchimO

Wasserratte

Registriert seit: Jul 2014

Wohnort: Berlin

Verein: AGM

Beiträge: 948

Status: Offline

Beitrag 7632750 [Alter Beitrag26. Oktober 2014 um 12:59]

[Melden] Profil von AchimO anzeigen    AchimO eine private Nachricht schicken   AchimO besitzt keine Homepage    Mehr Beiträge von AchimO finden

Nachdem ich meine Grippe auskuriert habe, war gestern endlich mal die Gelegenheit, den neuen Altimeter mal zu testen (als Arbeitstitel nenne ich ihn mal AltiWR = Altimeter für Wasser-Raketen).

Er wurde mit meiner Milan 4.4, einer Wasserrakete von 4,4 ltr aus 1-Literflaschen geflogen. An Bord waren 2 Fallschirme (Vorschirm im Gipfel, Hauptschirm bei 60 m). Ich war mutig und nahm zum Vergleich auch den Altimax! G3 mit ( in einem stabilen Rohr).

AltiWR stellte eine Höhe von 96 m fest, Altimax! dagegen 103 m.

Hier das von Excel aus den Flugdaten ermittelte Diagramm:





Aus dem Altimax! konnte ich nur die maximale Höhe, aber keine weiteren Flugdaten auslesen; warum, bleibt noch zu klären.

Die Sinkgeschwindigkeit ist mit 7,4 m/s relativ hoch. Grund ist, dass der Altimeter den Hauptschirm zwar auslöste, der Arretierungsstift des Servos aber noch ein wenig herausragte (neu gebaute Fallschirmkammer), so dass es nicht zur Auslösung kam.

Zusammenfassend lässt sich also sagen, dass AltiWR seinen Zweck erfüllt, der Drucksensor BMP180 aber offensichtlich nicht die Genauigkeit z. B. des Altimax! G3 erreicht.

Achim

Schneiden, schleifen, schrumpfen, kleben: das ist Wara-Bauers Leben,
Danach schleifen, laminieren: So kann dem Drucktank nichts passieren!

Oder wie die Lateiner sagen: laminare necesse est!
Lschreyer

Überflieger

Lschreyer

Registriert seit: Nov 2006

Wohnort: Zeven

Verein: AGM, L3

Beiträge: 1975

Status: Offline

Beitrag 7632763 [Alter Beitrag26. Oktober 2014 um 21:04]

[Melden] Profil von Lschreyer anzeigen    Lschreyer eine private Nachricht schicken   Lschreyer besitzt keine Homepage    Mehr Beiträge von Lschreyer finden

Hast du die neueste Software con der Website zum Auslesen genommen?

Always keep the pointy side up!
Seiten (3): « 1 [2] 3 »
[Zurück zum Anfang]
Du kannst keine neue Antwort schreiben