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
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.
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.
/SCRIPTS/TELEMETRY/
und können beliebig benannt werden so lange der name nicht länger ist als 8 Zeichen ohne Endung. Sie können somit global in allen Modellen genutzt werden. Man kann sie einfach einem Telemetrie-Screen zuweisen. Die Scripte in /SCRIPTS/<Modellname>
werden nicht mehr gebraucht und können gelöscht werden.(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.
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
#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); } }