Inhaltsverzeichnis

Modellbau Snippets

Modellbau Snippets sind Mini Projekte rund um den Modellbau. Das können Sachen sein, die in anderen Projekten gebraucht wurden, und als Snippet dokumentiert werden, damit sie nicht im eigentlichen Projekt untergehen. Oder aber auch Kleinigkeiten die für eine eigene Seite zu gering sind.
zu den Snippets

Taranis 4-in-1 Module für seriellen Betrieb vorbereiten

Das 4 in1 Multiprotokol Modul ist eine feine Sache wenn es darum geht die kleinen Spielzeugkopter oder einen DSM Empfänger mit der Taranis zu betreiben. Zu Anfang musste man sich eine Tabelle mit bis zu 15 Protokollen im Quellcode des Modules machen. Dann konnte man die Protokolle per Drehschalter auswählen. Seit einiger Zeit gibt es eine inoffizielle OpenTX Variante die das Modul per serieller Schnittstelle konfigurieren kann. Jetzt kann man ganz normal bei den Einstellungen des externen Moduls das zu verwendende Protokoll per Modell einstellen. Ab Version 2.2 von OpenTX soll das fester Bestandteil der Firmware werden.

Um das Modul auf den seriellen Betrieb vorzubereiten muss man nur zwei Lötbrücken auf der Vorderseite schließen. Und es empfiehlt sich auch ein Update der Firmware des Modul zu machen.

Taranis plus update von OpenTX 2.0 nach 2.1

Da ich in den Telemetrie Screens und im Lua auf die einzellen Zellen meines OpenXsensors und der Smart Port Lipo Sensoren FLVSS zugreiffen möchte habe ich mich mal daran gemacht meine Taranis Plus auf OpenTX 2.1.8 upzudaten. Vor dem Update stand ich vor dem Problem, dass ich zwar wusste das sich ein paar Sachen geändert haben, aber ich es nicht eindeutig an einer Stelle gefunden habe.

Was ich vor dem Update gefunden habe:

Wie bin ich also vorgeganen?

(Taranis mit nach innen gedrückten Trimmern einschalten - bei Mode2 ist das Seitenruder und Querruder-Trimmung)

… ich glaube das wars. Fertig. Mal sehen wie ich die Lua Scripte umbauen muss damit sie wieder gehen.

L298N Brushed RC Doppelregler

Für mein 4WD Rover-Projekt brauchte ich noch einen Brushed Regler die ohne Bremse in den Rückwärtsgang wechseln. Zu erst habe ich Brushlessregler dazu umgeflasht, aber leider waren die nicht sehr haltbar. Dann hab ich mal in der Arduino-Schublade gesucht was ich noch so an Motor-Endstufen da hatte. Und fand eine L298N Platine. Der L298N hat eigentlich mit seinen 2A nicht genug Dampf für die Anwendung, aber ausprobieren geht über studieren. Also schnell einen Pro Mini aus dem Fach daneben geangelt und etwas Code geschrieben.
zum Snippet

L298N_DualBrushedESC.ino
#define DIRECTION_M1_1 5
#define DIRECTION_M1_2 6
#define PWM_M1 3
#define MOTOR_1 PWM_M1
 
#define DIRECTION_M2_1 7
#define DIRECTION_M2_2 8
#define PWM_M2 9
#define MOTOR_2 PWM_M2
 
#define PWM_IN_1 10
#define PWM_IN_2 11
 
#define BACKWARD false
#define FORWARD true
 
boolean dirM1;
boolean dirM2;
 
int pwm_value_1 = 0;
int pwm_value_2 = 0;
 
void setup() {
  pinMode(DIRECTION_M1_1, OUTPUT);
  pinMode(DIRECTION_M1_2, OUTPUT);
  pinMode(PWM_M1, OUTPUT);
 
  pinMode(DIRECTION_M2_1, OUTPUT);
  pinMode(DIRECTION_M2_2, OUTPUT);
  pinMode(PWM_M2, OUTPUT);
 
  stop(MOTOR_1);
  stop(MOTOR_2);
 
  pinMode(PWM_IN_1, INPUT);
  pinMode(PWM_IN_2, INPUT);
}
 
void loop() {
  pwm_value_1 = pulseIn(PWM_IN_1, HIGH);
  pwm_value_2 = pulseIn(PWM_IN_2, HIGH);
 
  pwm_value_1 = map(pwm_value_1, 1000, 2000, -255, 255);
  pwm_value_2 = map(pwm_value_2, 1000, 2000, -255, 255);
 
  if (pwm_value_1 < 10 && pwm_value_1 > -10) {
    stop(MOTOR_1);
  } else {
    setMotor(MOTOR_1, pwm_value_1);
  }
 
  if (pwm_value_2 < 10 && pwm_value_2 > -10) {
    stop(MOTOR_2);
  } else {
    setMotor(MOTOR_2, pwm_value_2);
  }
 
  delay(20);
}
 
void stop(int motor)
{
  analogWrite(motor, 0);
}
 
void setMotor(int motor, int pwm) {
  boolean dir;
 
  if (pwm < 0) {
    dir = BACKWARD;
    pwm *= -1;
  } else {
    dir = FORWARD;
  }
 
  if (motor == MOTOR_1) {
    if (dirM1 != dir) {
      setDirection(MOTOR_1, dir);
    }
    setSpeed(MOTOR_1, pwm);
  } else {
    if (dirM2 != dir) {
      setDirection(MOTOR_2, dir);
    }
    setSpeed(MOTOR_2, pwm);
  }
}
 
void setDirection(int motor, boolean dir) {
  if (motor == MOTOR_1) {
    digitalWrite(DIRECTION_M1_1, dir);
    digitalWrite(DIRECTION_M1_2, !dir);
    dirM1 = dir;
  } else {
    digitalWrite(DIRECTION_M2_1, dir);
    digitalWrite(DIRECTION_M2_2, !dir);
    dirM2 = dir;
  }
}
 
void setSpeed(int motor, int sp) {
  if (motor == MOTOR_1) {
    analogWrite(PWM_M1, sp);
  } else {
    analogWrite(PWM_M2, sp);
  }
}