barney Posted August 14, 2013 Share Posted August 14, 2013 Erste Gedanken: Ich habe gestern einen Nunchuk Controller zerlegt. Der Arduino Mini und ein BT-Modul passen hinein. Folgende Funktionen stelle ich mir vor: Von den 12 digitalen I/O: 1. zwei Taster -2 2. eine Zweifarben LED für den Status -2 3. Piezo Summer -1 Rest 7 vier analoge I/O: 1. Joystick -2 2. Spannung des Akkus -1 Rest 1 Datenausgabe: Es sollen mindestens 10 Abtastungen die Sekunde übertragen werden. Um die Entwicklung zu vereinfachen, wird eine schlichte Textausgabe durchgeführt. Dann kann wie bei der Telemetrie mit den Handy die Verbindung überprüft werden. Ausgabe: #Index (16Bit);Bit digital I/O 1;Bit digital I/O 2;Bit digital I/O n....;Wert analog 1(10Bit);Wert analog 2;Wert analog 3;Wert analog 4;<CR> 2010;1;0;0;0;0;0;0;0;0;0;0;0;512;512;850;0;<CR> -> Heißt Taste 1 gedrückt, Joystick X/Y Mittelstellung (512), Akku fast voll (850) Der fortlaufende Index soll einen Funkabriss aufzeigen. Rücksendekanal: Die Zweifarben LED und der Piezo 1;1;0 -> In der LED beide Chips an (1;1), Piezo aus (0) Software: Init Routine für BT-Modul: 1. Namensvergabe: Nunchuck 2. Baud Rate festlegen 3. Pairing mit Arduino Controller BT-Modul durchführen. Rest folgt Bevor ich loslege, hat jemand noch eine Idee, die ich mit einbauen sollte? Vibrationsmotor? VG Barney Hallo das o.g. hatte ich ja schon mal geschrieben. Ich möchte ein neues Projekt eröffnen, mit einen völlig eigen designten "Controller". Wer hat Lust einen Controller-Gehäuse zu entwerfen, welches per 3D-Druck hergestellt wird? Es sollte an Nunchuk angelehnt sein und mit Sicherheitsausrüstung zu nutzen sein! Bauteile sind: 1. Externe Links nur für Mitglieder sichtbar 2. Joystick Soft-Touch-Knopf Schwarz 3. Arduino mini, 3.3V 8MHz 4. BT-Modul HC-05 5. Lithium Akku: Renata Lithium-Polymer Akku ICP402050PR 3.7 V 420 mAh ICP052153 (L x B x H) 52,5 x 20,7 x 4,5 mm, oder kleiner 6. zwei Taster: 7. Due/Triple-Color LED 8. Schalter On/Off 9. Buzzer (optional) 10. Vibrations-Motor (optional) 11. USB-Ladebuchse 12. 3D Print Gehäuse VG Barney Quote Link to comment Share on other sites More sharing options...
barney Posted December 26, 2013 Author Share Posted December 26, 2013 neue Gedanken beim Löten: Ausgabe: #ID; Index (32Bit);1 Bit digital I/O; 2 Bit digital I/O; 3 Bit digital I/O n...7;1 Wert analog (10Bit); 2 Wert analog; 3 Wert analog; 4 Wert analog;<CR> #ID;23948;1;0;0;0;0;0;0;512;512;850;0;<CR> -> Heißt Taste 1 gedrückt, Joystick X/Y Mittelstellung (512), Akku fast voll (850), Analog 4 nicht angeschlossen Der fortlaufende Index soll einen Funkabriss aufzeigen. Rücksendekanal: Die Zweifarben LED und der Piezo Index;1 Wert (Byte);2 Wert (Byte) 23948;0;0;0;0;0;0;0;1;5;0;0;4;<CR> -> In der Duo-LED LED1 an und LED2 blinken 500ms (1;5), Piezo an (4) für 2000ms Zustände für die Ausgangspins: 0 -> Aus 1 -> An 2 -> 500ms An 3 -> 1000ms An 4 -> 2000ms An 5 -> 500ms An/Aus wiederholend (z.B. blinken, Piezo piepst schnell) 6 -> 1000ms An/Aus wiederholend (z.B. blinken, Piezo piepst normal) 7 -> 2000ms An/Aus wiederholend (z.B. blinken, Piezo piepst langsam) Das Display ist definitiv raus, da die Ausgänge für ein Display leider auf den ADC-Anschlüssen liegen. LEDs und Vibrationsmotor sollten für ein Feedback ausreichen. Telemetrie Daten werden an das Handy wie gehabt gesendet. Momentan löte ich an einem Prototyp mit: 2 analog Achsen (Joystick) 1 Taster im Joystick 2 Taster 2 Duo-LED, davon eine für das BT-Modul 1 BT-Modul HC-05 1 Piezo Buzzer 1 Arduino Uno 5V 16 MHz -> später 3.3V 8 Mhz Arduino mini ver. 5 Quote Link to comment Share on other sites More sharing options...
barney Posted December 27, 2013 Author Share Posted December 27, 2013 Die Programmierung kann beginnen! Quote Link to comment Share on other sites More sharing options...
barney Posted December 29, 2013 Author Share Posted December 29, 2013 Beim Programmieren kommen weitere Ideen auf: Es wird der derzeitige Status des Ausgangs zurückgesendet. Jeder Ausgang kann alleine Parametriert werden, damit muss keine Wissen über die anderen Ausgänge vorhanden sein. ----------------------------------------------------------------------------- Ausgabe: Index (32Bit);1 Wert analog X-Achse (10Bit); 2 Wert analog Y-Achse; 3 Wert analog Z-Achse; 4 Wert analog UBatterie; 1 Bit digital I/O; 2 Bit digital I/O; 3 Bit digital I/O; Kommando Status Output01; Kommando Status Output02; Kommando Status Output03;<CR> 23948;521;521;512;850;0;1;0;1;3;2;<CR> -> Heißt Taste 1 gedrückt, Joystick X/Y/Z Mittelstellung (512), Akku fast voll (850); Der fortlaufende Index soll einen Funkabriss aufzeigen. Rücksendekanal: Output01 bis Output03 1 Output Channel(Byte) Command(Byte) Value(Byte) 1 3 10<CR> -> Ausgang 1, blinken, Intervall 1000ms auf Wunsch auch in Komma Trennung Command fuer die Ausgangspins: 0 -> Aus 1 -> An 2 -> Flash (fuer die Zeitdauer Value) 3 -> Blink (fuer das Interval Value) (z.B. blinken, Piezo piepst langsam) 4-255 -> aus Value (Byte) 10ms Wertigkeit ----------------------------------------------------------------------------- D.h. die Ausgänge sind jetzt universeller. Es geht nicht nur an und aus, sondern auch Impuls und Intervall. Die Zeiten für den Impuls können von 10ms bis ca 2,56 Sekunden im 10ms Raster eingestellt werden. Besonders mit dem Buzzer kann man Effekte wie bei einer Einparkhilfe erreichen. * Es wurden drei analoge Achsen X/Y/Z und Ubatt umgesetzt * Drei Taster, davon ein Taster im Joystick * Drei Ausgänge, zwei für LEDs und einen Piezo Buzzer Jetzt fehlt nur noch die Implementierung im Long-Board Dazu muss das Empfänger HC-05 BT-Modul auf Master umgestellt werden. Mal sehen, wie das Ganze klappt und ob der Funkabriss (Fehlender fortlaufender Index) ein ausreichender Indikator ist. Jetzt nur noch ein eigenes Controller Gehäuse...... Reichweite ca. 5 Meter bis zum Handy als derzeitigen Empfänger! Barney Quote Link to comment Share on other sites More sharing options...
barney Posted December 31, 2013 Author Share Posted December 31, 2013 BTM-112 vs HC-05 Bis jetzt hat HC-05 gewonnen. Der Preis stimmt mit ca. 6 € auch. Jetzt nur noch den Parser schreiben... Quote Link to comment Share on other sites More sharing options...
sonni Posted January 1, 2014 Share Posted January 1, 2014 Moin, Mit dem •••• BT-Modul habe ich ca 20 Meter Reichweite.? Was denkst du was der Controller am Ende kosten wird? Mal ganz abgesehen von dem unermesslichen Entwicklungsaufwand . Quote Link to comment Share on other sites More sharing options...
sonni Posted January 1, 2014 Share Posted January 1, 2014 Was hälst du von einem unkonventionellen Controllerdesign, wie z.B ein Handschutz (Druckbar)mit integriertem Controller o.Ä. Eine kleine 1W Led wäre für Nächtliche ausfahrten auch ganz praktisch wenn man den Sonnenuntergang und die Ankunftszeit mal wieder unterschätz und einem dann noch ein gemeiner unsichtbarer Kabelbruch zwischen Arduino und Nunchuck quält . gruß sonni Quote Link to comment Share on other sites More sharing options...
barney Posted January 1, 2014 Author Share Posted January 1, 2014 Moin,Mit dem •••• BT-Modul habe ich ca 20 Meter Reichweite.? Was denkst du was der Controller am Ende kosten wird? Mal ganz abgesehen von dem unermesslichen Entwicklungsaufwand . Hi Sonni, die Reichweite habe ich in der Wohnung erreicht. Da bin ich mittlerweile auf ca. 8 Meter gekommen. Ich will das Board steuern, wenn ich drauf stehe Kosten: *Sender: - BT-Modul HC-05 5-10 € - Arduino Mini 10-15 € - Taster 2x 4 € - LEDs 1 € - Piezo 2 € - Joystick 2 € - Kappe für Joystick 1 € - Akku LiIon 10-20 € Gehäuse ? Also zwischen 40-50 € für den Sender Für den Empfänger ein weiteres BT-Modul HC-05 VG Barney Quote Link to comment Share on other sites More sharing options...
barney Posted January 1, 2014 Author Share Posted January 1, 2014 Was hälst du von einem unkonventionellen Controllerdesign, wie z.B ein Handschutz (Druckbar)mit integriertem Controller o.Ä. Eine kleine 1W Led wäre für Nächtliche ausfahrten auch ganz praktisch wenn man den Sonnenuntergang und die Ankunftszeit mal wieder unterschätz und einem dann noch ein gemeiner unsichtbarer Kabelbruch zwischen Arduino und Nunchuck quält . gruß sonni Unkonventionell finde ich gut. Da lasse ich dir volle Kreativität. Ich hätte ein schlichtes Rohr verwendet. Ich lass mich überraschen.... Quote Link to comment Share on other sites More sharing options...
barney Posted January 1, 2014 Author Share Posted January 1, 2014 Parser ist jetzt auch Fertig zum Testen. Jetzt noch die Routine schreiben, die den Funkabriss erkennt.... Serial2.find("/n"); Dass war die schlimmste Stelle im Parser... Hat Stunden gedauert bis ich dahinter kam. while (Serial2.available() > 0) { // Ist was im Empfangsbuffer? Serial2.find("<FB>;"); // Ist es denn die Ferbedienung? Index = Serial2.parseInt(); // Index finden X_Achse = Serial2.parseInt(); Y_Achse = Serial2.parseInt(); Z_Achse = Serial2.parseInt(); Ubatt = Serial2.parseInt(); Taster01 = Serial2.parseInt(); Taster02 = Serial2.parseInt(); Taster03 = Serial2.parseInt(); Output01 = Serial2.parseInt(); Output02 = Serial2.parseInt(); Output03 = Serial2.parseInt(); Serial2.find("/n"); // Ende der Uebertragung finden Dann den Kram ins Board basteln und in die Sonne fahren und freuen... Quote Link to comment Share on other sites More sharing options...
barney Posted January 1, 2014 Author Share Posted January 1, 2014 Ich habe den Vibrationsmotor vergessen Dann noch ein Output(04) mehr! Quote Link to comment Share on other sites More sharing options...
barney Posted January 2, 2014 Author Share Posted January 2, 2014 Externe Links nur für Mitglieder sichtbar ca. 3 € mit MOSFET. Dann bin ich preislich komplett. Bis auf.... Ich kann nicht anders. Mich drängt es danach..... SainSmart 1.8" Serial 128X160 SPI TFT LCD Modul Display + SD Socket For Arduino ca. 13 €. Und die Pins hätte ich auch noch frei! VG Barney Quote Link to comment Share on other sites More sharing options...
sonni Posted January 2, 2014 Share Posted January 2, 2014 Über den TFT kann ja dann auch die Telemetrie ausgegeben werden... pw- geschützter Startcode....... snake game falls der eboardakku alle ist.... Möglichkeiten über Möglichkeiten .... Gruß sonni Quote Link to comment Share on other sites More sharing options...
Christian83 Posted January 2, 2014 Share Posted January 2, 2014 Super Projekt !:thumbsup: Quote Link to comment Share on other sites More sharing options...
barney Posted January 2, 2014 Author Share Posted January 2, 2014 Über den TFT kann ja dann auch die Telemetrie ausgegeben werden... pw- geschützter Startcode....... snake game falls der eboardakku alle ist.... Möglichkeiten über Möglichkeiten ....Gruß sonni Wie wäre es mit einem leistungsstarken Elektronen Rekombinations Quanten Emitter? Du machst mir Angst. VG Barney Quote Link to comment Share on other sites More sharing options...
barney Posted January 11, 2014 Author Share Posted January 11, 2014 Display ist da .... Die Spannung steigt :-) Quote Link to comment Share on other sites More sharing options...
barney Posted January 13, 2014 Author Share Posted January 13, 2014 Erste Versuche. Unten ist leider der % Balken und Text von Ubatt nicht gut zu erkennen. 1 Quote Link to comment Share on other sites More sharing options...
Beatbuzzer Posted January 13, 2014 Share Posted January 13, 2014 Schönes Ding! Hast Du über Hardware SPI oder in Software (bit-banging^^) angesteuert? Ich hatte mal ein Siemens S65 Handydisplay per Software SPI an nem Atmega32 mit 16 MHz. Das taugte nur zum Schreiben von kleinen Bereichen, sonst gab es sichtbaren Bildaufbau. War eher nichts für Echtzeit-Messwerte Aber mit Hardware SPI und den recht kurzen Textzeilen sollte da schon was gehen. PS: Snake-Code hab ich hier für VB-net, stammt von nem verregneten Wochenende. Das könnten wir portieren Quote Link to comment Share on other sites More sharing options...
barney Posted January 13, 2014 Author Share Posted January 13, 2014 Hi Beatbuzzer, Hardware SPI! Ich überlege noch, ob ich die SD-Karte auch anschließe. Für ein Log der Daten auch nicht schlecht und es würde die Verbindung zum Handy entfallen. Leider fehlt eine zuverlässige Echtzeituhr, wie ich sie im Handy hätte! Ich habe mich in die Library für das Display eingelesen. Im Endeffekt sind alle Funktionen, Kreis-, Box, Text-zeichnen nur eine "einer" Pixel Operation. Die Geschwindigkeit ist aber ordentlich, so dass ich hoffen kann, alles in Echtzeit hin zubekommen. Da müssen noch einige Tests gemacht werden. "Snake-Code hab ich hier für VB-net" Sagt mir erst mal nichts, kannst Du mir das näher erklären? Layout -> Bis zum WE schaffe ich ein Demo-Layout zu erstellen, damit man einen Überblick bekommen kann, was alles angezeigt wird und wie. VG Barney Quote Link to comment Share on other sites More sharing options...
barney Posted January 13, 2014 Author Share Posted January 13, 2014 Interessant: Der Displaycontroller ist doof wie Stroh. Keine primitiven Funktionen ersichtlich, so das die Libs, die ich gefunden habe alle auf Pixel-Operationen basieren. Hatte ich anders erwartet. Dies gibt aber auch ein die Möglichkeit sich frei auf dem Display zu bewegen. Der Text kann z.B. Pixelgenau verschoben werden. Batterien anzeigen können frei platziert werden. Um nicht über das Ziel hinaus zu schießen, werde ich den Text wie schon zu sehen war einbringen und ggf. eine Grafik mit den Strom und Spannungsverlauf, sowie eine Batterienanzeige für die Fernbedienung. Wenn kritische Werte erreicht werden, sollen sich die Zahlen von grün nach gelb nach rot einfärben. Der Piezobuzzer soll ja auch eine Aufgabe haben Barney Quote Link to comment Share on other sites More sharing options...
Beatbuzzer Posted January 13, 2014 Share Posted January 13, 2014 "Snake-Code hab ich hier für VB-net" Sagt mir erst mal nichts, kannst Du mir das näher erklären? Das war eher als Spass auf die Ideen von Sonni gemeint Fiel mir da grad wieder ein, dass ich mal in Visual basic für PC nen Snake programmiert hatte. Im Endeffekt sind alle Funktionen, Kreis-, Box, Text-zeichnen nur eine "einer" Pixel Operation. Meist gibts aber auch noch so ein "box-fill" Command. Wo man vorher mit zwei Koordinaten ein Rechteck angibt, welches dann einfach der Reihe nach mit Pixeln vollgeschoben wird. Macht aber bei Kreis und Linie nicht soviel Sinn. Bei Text evtl. schon eher, wenn man die Buchstaben immer als 5x7 Block hinterlegt. Dann könnte man eine Subroutine bauen, wo man nur noch ne Startkoordinate und zwei Farben (Font- und Back-Color) übergibt. Quote Link to comment Share on other sites More sharing options...
barney Posted January 13, 2014 Author Share Posted January 13, 2014 Das war eher als Spass auf die Ideen von Sonni gemeint Fiel mir da grad wieder ein, dass ich mal in Visual basic für PC nen Snake programmiert hatte. Meist gibts aber auch noch so ein "box-fill" Command. Wo man vorher mit zwei Koordinaten ein Rechteck angibt, welches dann einfach der Reihe nach mit Pixeln vollgeschoben wird. Macht aber bei Kreis und Linie nicht soviel Sinn. Bei Text evtl. schon eher, wenn man die Buchstaben immer als 5x7 Block hinterlegt. Dann könnte man eine Subroutine bauen, wo man nur noch ne Startkoordinate und zwei Farben (Font- und Back-Color) übergibt. Snake -> ahhrg, man stand ich auf dem Schlauch Primitives -> jup alles vorhanden, aber über den Microcontroller! Alles Pixel für Pixel vom Arduino aus. Ich will ja auch nicht Windows 8.1 emulieren. Quote Link to comment Share on other sites More sharing options...
barney Posted January 14, 2014 Author Share Posted January 14, 2014 (edited) Layout steht. Alle Daten sind Fake. Die Werteanzeigen müssen auf Parameter Übergabe umgestellt werden. Die Graphen werden auf Ganzzahl und Wertebereich 0 bis 10000 nomiert. Dann noch das hier in die FB Routine einbauen. Edit: Ub -> Akkuspannung Board I -> Strom am Akku Board Pm -> Leistung am Motor (Akku) Pa -> Akkurestleistung Ta -> Temperatur Akku Tm -> Temperatur Antrieb (Motor) Ufb -> Spannung Fernbedienung Die Balken am Text verändern die Farbe in Abhängigkeit der Alarmgrenzen. D.h. Grün -> O.K. Geld -> geht noch Rot -> schlecht Blau -> keine Einteilung Graph: Rot -> Strom am Akku Board Blau -> Spannung am Akku Board Alle Werte werden im Sekundentakt erneuert. Edited January 14, 2014 by barney Quote Link to comment Share on other sites More sharing options...
barney Posted January 16, 2014 Author Share Posted January 16, 2014 Codeoptimierung: Dieses schlecht lesbare Konstrukt // Ausgabe von Ub itoa (ValueArray[0][0], Ub, 10); // Messwert von Integer nach Char, geht auch für negative Int sprintf(Ubalign, "%5s", Ub); // Den Char Wert nach Rechts ausrichten // Da die Ausgaberoutine nicht die Funktionen von Print beherrscht, hier der schreckliche Umweg sprintf(Ubausgabe, "Ub %c%c%c%c,%c", Ubalign[0], Ubalign[1], Ubalign[2], Ubalign[3], Ubalign[4]); // Ein Komma einfügen testdrawtext(Ubausgabe, Colors[(ValueArray[0][3])][0], 0, 16, 1); nach drei Stunden durch dtostrf(ValueArray[0][0]/(float)10, 7, 1, Ubausgabe); // Wert/10, Rechts ausrichten, 1 Nachkommastelle testdrawtext("Ub" , Colors[(ValueArray[0][3])][0], 0, 16, 1); // Text ausgeben testdrawtext(Ubausgabe, Colors[(ValueArray[0][3])][0], 12, 16, 1); // Wert ausgeben ersetzt und schon 3 KByte Programmspeicher eingespart und die Abarbeitung dramatisch beschleunigt. Und der Code sieht schon viel lesbarer aus.... Display ist fertig und wird demnächst mit den Fernbedienungscode zusammengeworfen. Dann noch den Parser erweitern, dann können die Messwerte an die Fernbedienung gesendet werden. Mal sehen, ob der Mikrocontroller dafür schnell genug ist. Quote Link to comment Share on other sites More sharing options...
barney Posted January 16, 2014 Author Share Posted January 16, 2014 So kann das ganze nachher aussehen. Die Werte werden durch Random Generator erstellt. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.