Joystick + Arduino = Steuerung?

franko_

Erfahrener Benutzer
#23
Interessant, habe noch ein 9X Board über (Winter hat ja erst angefangen) ...aber ich würde gerne die Simu TX bauen.

D.h. der Arduino generiert ein PPM Signal, Gimbals dran und Sender?
Habe noch ein Flysky Sender und Empfänger, ideal für einen Nano Quad.

Welche Lib hast Du genommen für mehr als 4 Kanäle?
 
Zuletzt bearbeitet:
#24
Ich hab bei der SimuTX die arduinoRC lib genommen, mit nem kleinen Patch im PPm-Out für fixe Frame-Länge damit es auch mit dem Frsky geht.

Ich hab 2 Gimbals dran und 3 Schalter. eineni für Throttle-cut und 2 3-stufige für ch5 und ch6.
der an ch5 setzt gleichzeitig noch Dualrate und Expo für die 3 Stufen.

Werde am WE mal testen wie gut es sich damit fliegt...es ist aber noch nicht der finale Schritt zu kleinen Funke....da kommt noch mehr aber erst im nächsten Jahr.
 
Zuletzt bearbeitet:

Butcher

Bill the Butcher
#25
Franko dann magst du mir bestimmt dein 9xr board verkaufen?:) ich fahr jetz los uns hols mir den joystick:)
 

franko_

Erfahrener Benutzer
#26
@Butcher:Ist ein 9X Board, das wollte ich behalten da ich mir eine zweite 9X from scratch bauen wollte....

@Frickler: Hört sich gut an .. kann man eigentlich die Trimpots weglassen und das ganze per SW einstellen?
Also Taster drücken, die jeweilige Flugachse Kalibrieren .. loslassen und ab in den EEprom.. fertsch
 
Zuletzt bearbeitet:
#27
@Frickler: Hört sich gut an .. kann man eigentlich die Trimpots weglassen und das ganze per SW einstellen?
Also Taster drücken, die jeweilige Flugachse Kalibrieren .. loslassen und ab in den EEprom.. fertsch
Trimmung kann man weglassen wenn man sie im Flug nicht braucht - wie es eigentlich bei allen Koptern und Flugzeugen mit Flugsteuerung sein sollte.

Die Kalibrierung auf die jeweiligen Potis geschieht bei mir im Arduino Code. Sprich ich lasse mir mit einem kleinen Test-Sketch die A/D Werte auf der Konsole ausgeben und notiere sie für jeden Kanal bei Min/Mitte/Max und trage sie dann in den Funkensketch ein. Etwas aufwendiger als EEprom aber weniger Programieraufwand - man braucht es ja nur 1x pro Funke.
 
#28
Coole Idee - Abo - und wieder was zum basteln. ;)
 

franko_

Erfahrener Benutzer
#29
I.d.R. braucht man das nicht, aber habe ab und zu andere Schwerpunkte.. Da wäre es ganz wünschenswert mal schnell den Poti zu verschieben, oder halt das ganze über die SW zu machen.
 
#30
Sendertrimmung beim Kopter is immer Bäh!

Du gibts der Flight-Control damit ja immer eine Schräglage (ATTI) oder eine Kippgeschwindigkeit (RATE) vor.
Damit den Schwerpunkt auszugleichen ist MIST da sich das je nach Gasstellung anders auswirkt.

Entweder sauber bauen, ACC Trimmen oder ausknüppeln beim fliegen ;-)
 

Butcher

Bill the Butcher
#31
sooo freunde der bastellei, heute war ich beim örtlichen elektronik-dealer und siehe da, sie hatten den Black widdow nicht mehr :( nach ner halben stunde überlegen hab ich mir gedacht "scheiß egal zerlegste eh" und das ausstellungsstück für ein paar cent weniger mitgenommen :)

nun steht es hier auf der arbeitsplatte und wartet darauf, nach allen regeln der kunst zerlegt zu werden, dann kommt ein arduino mit ppm out rein, um als schülerfunke zu agieren, und wenn irgendwann das 9x board einflattert, dann ja dann kommt eben dieses mit nem graupner sendemodul in den joystick, bvis dahin wird geübt damit :)
trimmung kann man fürs erste denke ich auch über die lehrerfunke einstellen :)

gleich kommen bilder vom zerlegen :)

edit ich sehe grade das der black widdow auch so nen kleinen minijoystik oben drauf hat, der bietet sich doch quasi gerade zu perfekt an für die trimmung genutzt zu werden :)

edit2:

Oh gott, das mich unter der haube kein "HAITECH" erwartet war mir klar, aber das,.... unglaublich ^^

Also hoffendlich kann ich das überhaupt verwenden, in dem ding steckt ein einziges "drehpoti" wie ich es kenne, soweit so gut, die bewegungen des eigendlichen joysticks werden jedoch mit solchen seltsamen "schiebePotis" abgenommen(siehe bilder) hoffendlich funktioniert das,... :( ist auf jeden fall genug platz drinnen für arduino und oder 9x board :)
 

Anhänge

Zuletzt bearbeitet:
#32
Ui, Linearpotis...na ob du damit saubere Mitten hinbekommst.....lass uns teilhaben. ;)
 

Butcher

Bill the Butcher
#34
jo soweit bin ich schon :) gucken wir mal was er mir an werten erzählt :)

n Bec hab ich schon rausgesucht und zurecht gefrickelt, n kleiner an aus schlater liegt auch schon parat, n kleiner 2s akku kommt rein, und dann ist das schonmal was
Frage zur umrechnung von Analog auf PPM gibts da was schickes fertiges? kanäle die ich brauche sind ja gott sei dank genau 1, 2, 3 das reicht zum steuern, mal sehn ob man die buttons noch für was nettes verwenden kann, er hat ja immerhin 7 extra knöpfe + 1 minijoystick + seitenruder-wippe, da ich aber immer ohne seitenruder fliege kann man die evtl gut fürs Pan/tilt verwenden :)
 
#35
Jetzt fehlen ja nurnoch 2 Pedale für das Seitenruder. ;)
 
#39
naja trotzdem brauch ich ein BEC, von irgendwas muss ja der arduino auch versorgt werden ^^
da das ding standAlone als funke irgendwann mal arbeiten soll :)

ps danke Frickler :)
werd mich mal einlesen, so tricky wird schon nicht sein, notfalls tuts evtl auch das hier:

http://code.google.com/p/generate-p...il?name=Generate_PPM_signal_V0.2.zip&can=2&q=
Arduino und auch Modul können 2-3S ab.

Tricky nicht, aber wenns evtl noch Expo und Mischer sein sollen is die Arduinorc lib schon nett.

hier mal ne minimale PPM Erzeugung ohne lib:

Code:
//////////////////////CONFIGURATION///////////////////////////////
#define chanel_number 8  //set the number of chanels
#define PPM_FrLen 20000  //set the PPM frame length in microseconds (1ms = 1000µs)
#define PPM_PulseLen 400  //set the pulse length
#define onState 0  //set polarity of the pulses: 1 is positive, 0 is negative
#define sigPin 9  //set PPM signal output pin on the arduino
//////////////////////////////////////////////////////////////////


#define CENTER_1 1480
#define CENTER_2 1500
#define CENTER_3 1500
#define CENTER_4 1500
#define CENTER_5 1000
#define CENTER_6 1000
#define CENTER_7 1000
#define CENTER_8 1000

int ppm[chanel_number];


void setup()
{
  ppm[0] = CENTER_1;
  ppm[1] = CENTER_2;
  ppm[2] = CENTER_3;
  ppm[3] = CENTER_4;
  ppm[4] = CENTER_5;
  ppm[5] = CENTER_6;
  ppm[6] = CENTER_7;
  ppm[7] = CENTER_8;

  pinMode(sigPin, OUTPUT);
  digitalWrite(sigPin, !onState);  //set the PPM signal pin to the default state (off)
  
  cli();
  TCCR1A = 0; // set entire TCCR1 register to 0
  TCCR1B = 0;
  
  OCR1A = 100;  // compare match register, change this
  TCCR1B |= (1 << WGM12);  // turn on CTC mode
  TCCR1B |= (1 << CS11);  // 8 prescaler: 0,5 microseconds at 16mhz
  TIMSK1 |= (1 << OCIE1A); // enable timer compare interrupt
  sei();

}

void loop()
{
  ppm[0] = map(analogRead(A0), 0, 1024, 1000, 2000);
}


ISR(TIMER1_COMPA_vect){  //leave this alone
  static boolean state = true;
  
  TCNT1 = 0;
  
  if(state) {  //start pulse
    digitalWrite(sigPin, onState);
    OCR1A = PPM_PulseLen * 2;
    state = false;
  }
  else{  //end pulse and calculate when to start the next pulse
    static byte cur_chan_numb;
    static unsigned int calc_rest;
  
    digitalWrite(sigPin, !onState);
    state = true;

    if(cur_chan_numb >= chanel_number){
      cur_chan_numb = 0;
      calc_rest = calc_rest + PPM_PulseLen;// 
      OCR1A = (PPM_FrLen - calc_rest) * 2;
      calc_rest = 0;
    }
    else{
      OCR1A = (ppm[cur_chan_numb] - PPM_PulseLen) * 2;
      calc_rest = calc_rest + ppm[cur_chan_numb];
      cur_chan_numb++;
    }     
  }
}
 
Zuletzt bearbeitet:

Butcher

Bill the Butcher
#40
sooo weiter gings, eigendliche platine ist raus, kabel alle sortiert und markiert, arduino bestückt, kabel für anschluss nach aussen fertig gemacht :)
 

Anhänge

FPV1

Banggood

Oben Unten