Servo temperaturabhängig regeln

Kholdstare

Erfahrener Benutzer
#1
Hallo Leute :cool:

Ich bin's wieder mal. Bleibe euch erhalten, keine Angst. Hab' nur mal wieder eine 'Modellbau-Pause'. Zur Frage.

Ausgangslage:

Ich meiner Anwendung verbaue ich das Heck eines SAB Goblin 770 competion Helis. Das Heck wird (wie bei jedem Heli) durch ein Servo gesteuert. Und zwar regelt das Servo Pitch (Anstellwinkel der Blätter).

Ziel:

Ich möchte das Servo temperaturabhängig steuern. Zwischen 0 - 70°C soll das Servo Ruhestrom ziehen, in Nullposition sein. Zwischen 70 - 90°C soll das Servo paralell zur steigenden Temperatur in einen, sagen wir 60° Winkel gehen.

Also:

0-70°C = Servo hat Mitte
>=70 = Servo zieht an
<=90 = Servo ist in maximal Position (sagen wir 60° Winkel, ist egal kann ich über die Mechanik dann ausgleichen)

Vorgehen:

Meine Digitalkenntnisse sind leider verkümmert. Ich kenn mich mit Analogtechnik aus, dachte da an einen NTC udn eine einfach Schaltung ala Servotester.

Nur habe ich das Problem, dass ich keinen definierten Referenzwert bekomme, da sich der Widerstand umgebungstemperaturbedingt sich natürlich immer ändert. Das Servo hätte immer irgendeinen Zustand, nur nicht immer null. Ausserdem soll das Ding optimalerweise bis 70° nur Ruhestrom ziehen, und nicht irgendwelche FAxen machen.

Frage an euch: Komme ich ohne Digitaltechnik hier rum? Habt ihr Lösungsvorschläge?

Danke, Philipp
 

DudeX

Neuer Benutzer
#2
Hallo Philipp,

dafür würde ich unbedingt einen Arduino in Verbindung mit einem passenden Temperatursensor empfehlen. Wenn du ein paar Grundkentnisse beim Programmieren mit C hast, ist das überhaupt keine Schwierigkeit. Wenn nicht, kann man das in hunderten Tutorials lernen ;) Oder man findet jemanden, der es für einen macht.

Analog kenne ich mich nicht gut aus :D Jeder wird es wohl auf die Art lösen, mit der er sich am besten auskennt. Ich kann nur sagen, dass die digitale Lösung relativ leicht sein sollte.

LG Christoph
 

MaxWin

(╯°□°)╯︵ ┻━┻
#3
Hi,

auch ich würde in die Richtung Arduino gehen. Dort gibt es einen haufen Projekte die du einfach mit einander vermischen kannst.

Spontan fällt mir für Temperatur das mysensor projekt ein: http://www.mysensors.org/build/humidity
Einen servo ansteuern ist simpel und auch dafür gibt es fertige Funktionen.
 

Kholdstare

Erfahrener Benutzer
#4
Hi,

auch ich würde in die Richtung Arduino gehen. Dort gibt es einen haufen Projekte die du einfach mit einander vermischen kannst.

Spontan fällt mir für Temperatur das mysensor projekt ein: http://www.mysensors.org/build/humidity
Einen servo ansteuern ist simpel und auch dafür gibt es fertige Funktionen.
Arduino ist halt ein bisschen overkill. Aber ihr habt recht, ich muss das endlich mal angehen.

Also ich habe jahrelang nächtelang vb6 programmiert und das meist sehr systemnah. Auch javascript, .net, unix shell script, powershell, minimal C++, hauptsächlich Verschlüsselungssoftware, systemnahe Programmierung und auch GUIs. Solange ich mit C mich nicht um Pointer und memory Allozierungsgeraffel kümmern muss denke ich werde ich klar kommen.

Soll ich mir einfach mal dieses Kit schiessen?

http://www.ebay.com/itm/Arduino-Uno...from-EUROPE-/221818219294?hash=item33a5656b1e

Ich meine die 50$ kann man auch dümmer ausgeben.

Gruss, Philipp
 
#5
Kommt drauf an was du vorhast.
Für deinen Zweck gehts auch billiger:

http://www.banggood.com/ATmega328P-...Improved-Version-With-USB-Cable-p-933647.html
http://www.banggood.com/Wholesale-D...al-Temperature-Temp-Sensor-Probe-p-53674.html

Zusammen ~ 6€
Wenn du willst noch 2€ für priority direct mail Versand dann isses auch in 10 Tagen da.

und als Software:
https://www.arduino.cc/en/reference/servo
http://www.milesburton.com/?title=Dallas_Temperature_Control_Library

Mit Deinen Kentnissen sollte das kein Problem sein. Genau die Pointer und Speicher Geschichten kapselt Arduino großenteils für dich.

if (temp > x) servo.write(y);
 

Kholdstare

Erfahrener Benutzer
#6
Kommt drauf an was du vorhast.
Für deinen Zweck gehts auch billiger:

http://www.banggood.com/ATmega328P-...Improved-Version-With-USB-Cable-p-933647.html
http://www.banggood.com/Wholesale-D...al-Temperature-Temp-Sensor-Probe-p-53674.html

Zusammen ~ 6€
Wenn du willst noch 2€ für priority direct mail Versand dann isses auch in 10 Tagen da.

und als Software:
https://www.arduino.cc/en/reference/servo
http://www.milesburton.com/?title=Dallas_Temperature_Control_Library

Mit Deinen Kentnissen sollte das kein Problem sein. Genau die Pointer und Speicher Geschichten kapselt Arduino großenteils für dich.

if (temp > x) servo.write(y);
Jop, danke. Klar, der Uno ist ein bisschen overkill, aber irgendwann muss ich ja damit anfangen. Wusste schon, warum ich hier nachfrage. Ihr seid halt schon die coolsten Säcke. Hätte ich im Forum bei microcontroller.net nachgefragt, gibt erstmal zehn Seiten bashing, warum man so einen Quatsch überhaupt macht.

Ich habe mir jetzt mal die Arduino SW 1.6.5 installiert. Das Board das man auswählt ist ja klar, Uno in meinem Fall. Nur welchen Programmer muss ich dann auswählen? AVRISP mkII ist default angewählt, passt das?

Gruss, Philipp
 

DudeX

Neuer Benutzer
#7
Hi Philipp,

jap das passt. Wenn du weiter spielen/lernen möchtest, kannst du das Ganze dann bei Gelegenheit auch auf einen ATtiny basteln. So mache ich das meistens, um meinen Arduino weiter nutzen zu können. Oder du kaufst dir einfach mehr davon, sind ja auch nicht mehr so wahnsinnig viel teurer.

LG Christoph

P.S.: Auf mikrocontroller.net nach arduino zu fragen ist selten eine gute Idee :D Die Jungs dort übertreiben es einfach ein bisschen mMn...
 
#8
Bei unter $3 für nen pro mini und unter $4 for nen nano portiere ich nix mehr und es werden meist auch keine Platinen mehr gemacht. Da kostet der prozessor und das Vogelfutter ja mehr als der fertige Arduino - zudem man die eben auf Lager hat ;_)

Uno und Nano können genau das selbe, nur ist der Nano besser zu verbauen und kann zum ausprobieren aufs Steckbrett gesteckt werden.
 

Kholdstare

Erfahrener Benutzer
#9
Noch eine Frage jungs.

Kann ich mit Arduino Uno und der Servo Lib sowas wie eine Strombegrenzung bauen? -> Wenn das Servo mechanisch anschlägt oder die Mechanik schwergängig ist geht der Stromverbrauch nach oben, kann ich das mit der Software realisieren oder bräuchte ich einen 'stromsensor (stromsensor mal fpv mässig formuliert').

Ich möchte dem Servo sagen, du darfst maximal 2A ziehen und wenn es mehr ist dann geh in Funktion 'error_handler'. Dort könnte ich dann immer noch eine LED rot blinken lassen.

Gruss, Philipp
 

lazyzero

... zu viel geflashdingst
#14
Wenn der Bootloader nicht drauf ist brauchst Du einen ISP-Programmer. Den du bei Tools-->Programmer wählen kannst. Hast Du evtl von nem KK board oder so sowieso schon.

Und dann "Burn Bootloader" aus dem selben Menü wählen.

GRuß
 

Kholdstare

Erfahrener Benutzer
#16
So jetzt habe ich mit Arduino Sim eine ganze Weile gecodet. Die Ansteuerung ist ja wirlich easy, die Sprache habe ich mir schlimmer vorgestellt. Ein paar Dinger vermisse ich aber, resp. würde ich in 'meiner Welt' anders lösen.

Muss ich den ALLES im main loop machen? Kann ich kein child processing machen, oder einen zweiten Process laufen lassen? Gibt es Timer funktionen, die ich nebenher laufen lassen kann? Cool wäre auch, wenn es einen event loop gebe, z.B

On_Eingang_A0_high()
mach was sobald A0 auf high liegt
end

Aber so wie es aussieht muss man halt alles im main loop bauen.
 

Rangarid

Erfahrener Benutzer
#17
So jetzt habe ich mit Arduino Sim eine ganze Weile gecodet. Die Ansteuerung ist ja wirlich easy, die Sprache habe ich mir schlimmer vorgestellt. Ein paar Dinger vermisse ich aber, resp. würde ich in 'meiner Welt' anders lösen.

Muss ich den ALLES im main loop machen?
Nein musst du nicht.

Kann ich kein child processing machen, oder einen zweiten Process laufen lassen?
Die kleinen Atmegas haben nur 1 Prozess. Du kannst aber Interrupts nutzen, um den Hauptfluss des Programmes zu unterbrechen und was anderes machen wenn bestimmte Bedingungen auftreten.

Gibt es Timer funktionen, die ich nebenher laufen lassen kann?
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Timer

Cool wäre auch, wenn es einen event loop gebe, z.B

On_Eingang_A0_high()
mach was sobald A0 auf high liegt
end
google mal nach Pin Change Interrupt


Aber so wie es aussieht muss man halt alles im main loop bauen.
Es gibt bei AVR einige Möglichkeiten, aber wenn du keine Lust hast, mti Registern usw. anzufangen nutze das was Arduino anbietet. AVR ist ziehmlich komplex, da sehr Hardwarenah. Arduino abstrahiert das halt ein wenig, dadurch bist du eben eingeschränkter.

Du kannst in Arduino selbst alle Register usw. der Microcontroller ansprechen.
 
#18
Genau, wie Sam schon sagt.

Bei den Klassischen Microcontrollern gibts keine wirklichen Nebenläufigkeiten, sprich alles in der Main.

Was eben geht sind Interrupt Routinen die durch Ereignisse getriggert werden und dann eben kurz die Main Loop unterbrechen bis sie fertig sind.

Arduino selbst kann hier nur 2 an bestimmten Pins:
https://www.arduino.cc/en/Reference/AttachInterrupt
Mit externer Lib geht das an fast jedem Pin:
https://github.com/GreyGnome/PinChangeInt

Triggern über Timer geht auch mit externer Lib:
http://playground.arduino.cc/Code/Timer
 

MarenB

Runter kommen sie immer!
#20
Genau, wie Sam schon sagt.

Bei den Klassischen Microcontrollern gibts keine wirklichen Nebenläufigkeiten, sprich alles in der Main.

Was eben geht sind Interrupt Routinen die durch Ereignisse getriggert werden und dann eben kurz die Main Loop unterbrechen bis sie fertig sind.

Arduino selbst kann hier nur 2 an bestimmten Pins:
https://www.arduino.cc/en/Reference/AttachInterrupt
Mit externer Lib geht das an fast jedem Pin:
https://github.com/GreyGnome/PinChangeInt

Triggern über Timer geht auch mit externer Lib:
http://playground.arduino.cc/Code/Timer
Man braucht eine LIB für einen Timer-Interrupt?!

Ich weiß schon, warum mir Bascom als Programmiersprache für die AVRs besser gefällt :D
Ist nur leider nicht so weit verbreitet, so dass man vielfach das Rad neu erfinden muss... :(
 
FPV1

Banggood

Oben Unten