danke für die antworten
ich habe da noch ne idee den adruino als ne art weiche zu benutzen kanal x sagt den den pin sprich zu welchen server oder was auch immer das signal von kanal y weitergeleitet werden soll... is das überhaupt mit den adruino möglich oder kann ich mir das gleich aus den kopf schlagen ?
Satzzeichen sind wirklich hilfreich.
Nachzudenken bevor man versucht sich auszudrücken genauso.
Ich habe zwar verstanden was du willst, aber wozu willst du Kanäle umleiten?
ja sollte eigendlich auch nen servo werden und kein server
den kanal will ich umleiten um zb auf einen kanal nen bugstrahlruder und ein schlepphacken und und und zu steuern
wenn das so geht wie ich mir das vorstelle kann man ja aus einen kanal 7 kanäle machen es gibt sowas zwar auch von robbe wenn mich nicht alles täuscht aber ich würde das gerne erstmal so versuchen wenn es möglich ist
es handelt sich zwar um nen boot aber das is ja egal
ich habe leider recht wenig zu den adruino im modellbau gefunden bzw nich so ganz das was ich machen möchte
Jetzt verstehe ich, was du vorhast. Benedini hat da ein schönes Einbaumodul für Fernsteuerungen zum steuern seiner Sound-/Mutiswitchmodule. Das wäre genau das, was Du senderseitig benötigst. Hab zufälligerweise sogar noch einen in der Restekiste rumliegen, den ich nicht mehr brauche.
Im Grunde ist der Kodierer nicht viel mehr als ein Rastpoti mit 12 festeingestellten Werten. Wenn man an den entsprechenden Kanal im Modell ein servo anschließen, würde das je nach Raststellung in eine von 12 Positionen anfahren.
Diese kann man natürlich über eine entsprechende Setup-Routine, die die Laufzeiten für jede Raststellung registriert und im EEPROM ablegt auch einem Arduino beibringen. Anschließend kann jeder Position eine bestimmte Aktion zugewiesen werden (Pin An/Aus, PWM-Funktion, etc.). Solange Du nur jeweils eine einzelne LED schalten willst, kannst du das direkt mit der Platine machen. Bei größeren Lasten würdest Du noch einen zusätzlichen Treiberbaustein (ULN2803A ist da ein ganz heißer Kandidat) benötigen.
Als Testboard würde ich dann eine 3,3V-Version nehmen, persönlich bin ich ja total vom Wattuino überzeugt. Grund ist folgender:
2,4GHz-Empfänger laufen i.d.R. auf 3,3V (ist der zugrundeliegenden WLAN-Technik geschuldet). So hoch ist dann auch der Ausgangspegel an den Empfängerkanälen.
Die Atmels, die auf den Arduinos arbeiten, brauchen in der 5V-Version laut Datenblatt mindestens einen Signalpegel von 3,0V (0,6 x Vcc). In der Praxis sprachen sämtliche Boards bei mir zwar bereits bei ca. 2,5V an. Aber verlassen würde ich mich nicht darauf.
Ich selbst bin ganz vernarrt in die Dinger. In zwei von meinen Sci-Fi-Raumschiffen haben sie die Lichtsteuerung übernommen (streckenweise schlimmer als ein Weihnachtsbaum ), in meinem Bergepanzer 3A1 ebenfalls die Lichtanlage und mein FlakPz Gepard wird im Sommer eine neue Turmsteuerung damit bekommen.
moin
scheint ne gute alternative zu sein das wattuino
kann man das teil genauso programiren wie den adruiono oder braucht man dafür ne andere software ? das man da nen anderen anderes kabel braucht habe ich schon gelesen
hast du da videos von deinen modellen würde mich mal interesiren
Das Wattuino-Board ist 100% mit dem Ardiuno Pro Mini kompatibel.
1. Gleiche Größe, gleicher Prozessor
2. Zwei zus. Pins herausgeführt
3. Mit 10€/Stk. lachhaft günstig
4. Verfügbarkeit ist sehr gut
Den kleinen Abmessungen geschuldet ist, dass kein USB-Stecker direkt angeschlossen werden kann, sondern die Programmierung über ein FTDI Breakout Reloaded V1.1 - Watterott electronic erfolgt.
Einfach via Mini-USB-Kabel an den PC anschließen, korrekte Board-Spannung am FTDI einstellen (Mini-Schalter) und in der Arduino-IDE in der Board-Auswahl das 'Arduino Pro Mini 3,3V/8Mhz' auswählen. Fertig.
was mir an den angesprochenen PWM-Sachen nicht schmeckt: Da wird immer nur der PulsIn-Befehl verwendet, ohne weitere Aktion. Der Befehl wartet aber immer solange, bis der Pin aktiv wird, sprich bis ein Signal vom Empfänger kommt. Das wertet er dann aus und erst dann geht es im Programm weiter. Somit wird der normale Programmcode maximal 50x pro Sekunde abgearbeitet (bei Standard-Servosignal mit 20ms). Und auch das nur, wenn ein einziger Empfängerkanal überwacht wird. Etwas eleganter ist das hier:
Hier wird die Zeitmessung erst aktiv, wenn wirklich ein Signal anliegt. In der Zwischenzeit kann sich der Atmel um andere Dinge kümmern. Das ist eben die Krücke, da man im Code keinen separaten Timer ansprechen bzw. softwareseitig reseten kann.
Im Heli wäre sonst noch die Arduino - Micros Zeitfunktion ganz interessant. Normalerweise vermeide ich sie, da sie nach ca. 70min einen ßberlauf erzeugt (dann passieren kurzzeitig "seltsame Dinge"). Aber welcher Hei ist schon über eine Stunde mit einem Akku in Betrieb?
Ach ja: Der Panzer schafft ca. 0,5kg bei voll ausgestrecktem Ausleger und etwa 1kg bei sehr steiler Auslenkung. Die Kranwinde schaft auch mehr. Nur der Ausleger fängt dann an, bedenklich im Lager zu knirschen.
Du musst einen Propeller-Chip verwenden
Der hat 8 Cores die über einen Ringpuffer Daten austauschen können.
1 Core zum Servokanal messen, die anderen sind für sonstiges zur Verfügung.
Viel schwerer als ein Arduino ist er nicht zu programmieren, eben nur "anders".
Aber ich glaub so Breakoutboards gibt es da in ganz klein nicht...
hm verstehe ich das richtig das ich nicht mehrere känale überwachen kann ?
gibt es bei diesen Propeller-Chips auch fertige platinen wie bei adruino und co ?
so sieht mein cleiner code aus funktioniert sogar
is nen bischen abgändert zu den in dem adruino forum
Code:
int a;
void setup ()
{
pinMode (5, OUTPUT);
pinMode (6, OUTPUT);
pinMode (3, INPUT);
}
void loop (){
a = pulseIn(3,HIGH,24000);//Ließt Eingangssignal
//if-Bedinung für LED1
if (a>1450 && a<1475)
{//Wenn Eingangssignal zwischen 1228 und 1242, Ausgang an LED1 aus und der Status des Ausgangs in diesem loop-durchgang noch nicht verändert wurde, dann
digitalWrite (6,HIGH);//schalte Ausgang an
}
if (a>1960 && a<1975){//Gleich wie oben, bloß umgekehrt zum ausschalten der LED
digitalWrite (5,HIGH);
}
//if-Bedinung für LED2
if (a>960 && a<975){
digitalWrite (6,LOW);
digitalWrite ( 5,LOW);
}
}
Sowas in der Art könntest du verwenden.
Die Programmierung wird in einer eigenen Programmiersprache gemacht, sie ist objektorientiert und nicht sehr luxeriös. Mit ein wenig Arbeit geht aber auch da einiges.
Ich habe mir mal ein Dev.Board schenken lassen und damit USB/Seriell/TV gesteuert.
Zu mehr bin ich noch nicht gekommen.
Das Teil ist völlig übertrieben für das, was Du vorhast. So, als ob man in einem 'Porsche Cayenne Turbo' morgens die 250m zum Bäcker für ein paar Brötchen fährt.
Hab da mal rasch was zusammengeschrieben, womit 3 Empfängerkanäle überwacht werden. Damit können 6 weitere Kanäle geschaltet werden, kann noch beliebig weiter aufgebohrt werden. Noch ungetestet, Freiwillige also vor!
Code:
/*
Dieser Sketch wertet die Pins 0, 1 und 2 aus, die an einem RC-Empfänger angeschlossen sind.
Jeder Empfängerkanal kann dabei zwei weitere Kanäle schalten.
WICHTIG: Nach ca. 70min ununterbrochenen Betriebs erfolgt ein Speicherüberlauf, die den internen Timer auf 0 zurücksetzt.
2013, Heiko Petersen
*/
byte pin_empfaenger[3] = {0, 1, 2}; // Empfängerkanaele, die überwacht werden sollen
byte pin_ausgang [6] = {3, 4, 5, 6, 7, 8}; // zu schaltende Kanäle. Jeweils zwei Kanäle werden durch einen Empfängerpin geschaltet
boolean aktiv_zeitmessung[3] = {false, false, false}; // Zeitmessung aktiv?
unsigned long zeit_mess_start[3] = {0, 0, 0}; // Beginn der Zeitmessung
unsigned int zeit_delta[3] = {0, 0, 0}; // Ergebnis der Zeitmessung
unsigned long zeit_pause[6] = {0, 0, 0, 0, 0, 0}; // Zeitstempe, wann der Kanal das letzte Mal geschaltet wurde
unsigned int zeit_pause_vorgabe = 1000; // Minimalpause, nachder ein Kanal wieder geschaltet werden kann. Wert in Millisekunden
void setup(){
for(unsigned int i = 0; i < 3; i++){
pinMode(pin_empfaenger[i], INPUT); // Empfängerpin als Eingang konfiguriert
}
for(unsigned int i = 0; i < 6; i++){
pinMode(pin_ausgang[i], OUTPUT); // Schaltpins als Ausgang konfigurieren
digitalWrite(pin_ausgang[i], LOW); // Schaltpins auf LOW stellen
}
}
void loop(){
for (byte i = 0; i < 3; i++){
if(digitalRead(pin_empfaenger[i]) == HIGH && aktiv_zeitmessung == false){ // Wenn das Empfängersignal auf HIGH geht beginnt der Zeitmessung
zeit_mess_start[i] = micros();
aktiv_zeitmessung[i] = true;
}
if(digitalRead(pin_empfaenger[i]) == LOW && aktiv_zeitmessung[i] == true){ // Wenn das Empfängersignal nach HIGH wieder auf LOW fällt, endet die Zeitmessung und der Ergebnis wird berechnet
zeit_delta[i] = micros() - zeit_mess_start[i];
aktiv_zeitmessung[i] = false;
}
if(zeit_delta[i] > 500 && zeit_delta[i] < 1250 && millis() >= zeit_pause[i] + zeit_pause_vorgabe){ // Wenn das Signal unter dem Mittenwert von 1500µs liegt, wird der erste Kanal ausgeschaltet
digitalWrite(pin_ausgang[i], (digitalRead(pin_ausgang[i]) == HIGH?LOW:HIGH));
zeit_pause[i] = millis();
}
if(zeit_delta[i] > 1650 && zeit_delta[i] < 2500 && millis() >= zeit_pause[i * 2 + 1] + zeit_pause_vorgabe){ // Wenn das Signal über dem Mittenwert von 1500µs liegt, wird der zeite Kanal geschaltet
digitalWrite(pin_ausgang[i * 2 + 1], (digitalRead(pin_ausgang[i * 2 + 1]) == HIGH?LOW:HIGH));
zeit_pause[i * 2 + 1] = millis();
}
}
}
Hab noch einen möglichen Fehler gefunden, teste lieber den Sketch hier:
Code:
/*
Dieser Sketch wertet die Pins 0, 1 und 2 aus, die an einem RC-Empfänger angeschlossen sind.
Jeder Empfängerkanal kann dabei zwei weitere Kanäle schalten.
WICHTIG: Nach ca. 70min ununterbrochenen Betriebs erfolgt ein Speicherüberlauf, die den internen Timer auf 0 zurücksetzt.
V0.2
2013, Heiko Petersen
*/
byte pin_empfaenger[3] = {0, 1, 2}; // Empfängerkanaele, die überwacht werden sollen
byte pin_ausgang [6] = {3, 4, 5, 6, 7, 8}; // zu schaltende Kanäle. Jeweils zwei Kanäle werden durch einen Empfängerpin geschaltet
boolean aktiv_zeitmessung[3] = {false, false, false}; // Zeitmessung aktiv?
unsigned long zeit_mess_start[3] = {0, 0, 0}; // Beginn der Zeitmessung
unsigned int zeit_delta[3] = {0, 0, 0}; // Ergebnis der Zeitmessung
unsigned long zeit_pause[6] = {0, 0, 0, 0, 0, 0}; // Zeitstempe, wann der Kanal das letzte Mal geschaltet wurde
unsigned int zeit_pause_vorgabe = 1000; // Minimalpause, nachder ein Kanal wieder geschaltet werden kann. Wert in Millisekunden
void setup(){
for(unsigned int i = 0; i < 3; i++){
pinMode(pin_empfaenger[i], INPUT); // Empfängerpin als Eingang konfiguriert
}
for(unsigned int i = 0; i < 6; i++){
pinMode(pin_ausgang[i], OUTPUT); // Schaltpins als Ausgang konfigurieren
digitalWrite(pin_ausgang[i], LOW); // Schaltpins auf LOW stellen
}
}
void loop(){
for (byte i = 0; i < 3; i++){
if(digitalRead(pin_empfaenger[i]) == HIGH && aktiv_zeitmessung == false){ // Wenn das Empfängersignal auf HIGH geht beginnt der Zeitmessung
zeit_mess_start[i] = micros();
aktiv_zeitmessung[i] = true;
}
if(digitalRead(pin_empfaenger[i]) == LOW && aktiv_zeitmessung[i] == true){ // Wenn das Empfängersignal nach HIGH wieder auf LOW fällt, endet die Zeitmessung und der Ergebnis wird berechnet
zeit_delta[i] = micros() - zeit_mess_start[i];
aktiv_zeitmessung[i] = false;
}
if(zeit_delta[i] > 500 && zeit_delta[i] < 1250 && millis() >= (zeit_pause[i] + zeit_pause_vorgabe)){ // Wenn das Signal unter dem Mittenwert von 1500µs liegt, wird der erste Kanal ausgeschaltet
digitalWrite(pin_ausgang[i], (digitalRead(pin_ausgang[i]) == HIGH?LOW:HIGH));
zeit_pause[i] = millis();
}
if(zeit_delta[i] > 1650 && zeit_delta[i] < 2500 && millis() >= (zeit_pause[i * 2 + 1] + zeit_pause_vorgabe)){ // Wenn das Signal über dem Mittenwert von 1500µs liegt, wird der zeite Kanal geschaltet
digitalWrite(pin_ausgang[i * 2 + 1], (digitalRead(pin_ausgang[i * 2 + 1]) == HIGH?LOW:HIGH));
zeit_pause[i * 2 + 1] = millis();
}
}
}
Wir verarbeiten personenbezogene Daten über Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen, Werbung zu personalisieren und Websiteaktivitäten zu analysieren. Wir können bestimmte Informationen über unsere Nutzer mit unseren Werbe- und Analysepartnern teilen. Weitere Einzelheiten finden Sie in unserer Datenschutzrichtlinie.
Wenn Sie unten auf "Einverstanden" klicken, stimmen Sie unserer Datenschutzrichtlinie und unseren Datenverarbeitungs- und Cookie-Praktiken wie dort beschrieben zu. Sie erkennen außerdem an, dass dieses Forum möglicherweise außerhalb Ihres Landes gehostet wird und Sie der Erhebung, Speicherung und Verarbeitung Ihrer Daten in dem Land, in dem dieses Forum gehostet wird, zustimmen.
Kommentar