Jump to content

Codeaustausch und "herzeig" Thread - Projekte mit TinkerForge Bricks


tf_archiv

Recommended Posts

zu deiner ersten Frage: ja...

 

Meine Enumerationen sollen in die Datenbank gespeichert werden. Ebenso sollen alle Einstellungen wie "welche UID der DCBricks ist welche Kette" auch in der DB Landen -> wenn keine DB vorhanden ist soll eine Eingabeform erscheinen in welcher man die Bricks den Motoren zu ordnen kann. Damit kann man den Code verwenden egal welchen Brick man gerade verwendet.

 

 

Link to comment
Share on other sites

  • Replies 80
  • Created
  • Last Reply

Top Posters In This Topic

http://www.therealblack.net/TFUploads/TRB_Bot.7z

 

http://www.therealblack.net/TFUploads/Optionen.png

Optionen.png

 

Update Time! Heute Icon Pack: Die 100x100, 200x200 und 500x500 Icons dürfen auch gerne als Avatare verwendet werden ;-P

 

Pfad: TRB_TF_RoboterProjekt\Utils\Dokumente\Icons_100

 

Die Liste im Bild erstellt sich über meine Enumerations Utils bereits. ansonsten haben die Dinger noch keine Funktion... Ich werde die Brickverwaltung etwas nach hinten schieben und am Bot weiter Coden.  Zwar wäre es schöner die Optionen sehr Variabel zu halten, aber es braucht doch etwas Zeit alles implementiert zu bekommen.

 

Auf Option soll sich eine Eingabe maske für jeden Typ einzeln öffnen.

Speichern und Laden soll die Einstellungen in die DB schreiben.

Die Punkte zeigen in verschiedenen Farben an ob die daten bereits in der DB waren oder ob ein benötiger Brick(Typ) nicht gefunden wurde.

 

Die DB wird nun auch mit Initial Daten geschrieben: Anwendungsstellen Antieb links\rechts, Sensor vorne usw und auch die Bricktypen Master, DC usw werden aus meinen Enum in die DB geschrieben.

 

@TF: könnte man die Brick\Bricklets und Extention Typen im Generator in ein Enum generieren? So würde jeder die gleichen IDs verwenden können wenn ein Bricktyp abgefragt wird... nur so eine Idee.

 

@all: bei den Verwendungen (Antrieb links\rechts, Sensor vorne usw) kann man noch einiges erweitern wenn es noch wünsche dort gibt.

Link to comment
Share on other sites

Icons dürfen auch gerne als Avatare verwendet werden ;-P

Glaube ich nehm mir einfach mal nen Servo ^^ Is ja quasi mein aktuelles Hauptbrick :D

 

@TF: könnte man die Brick\Bricklets und Extention Typen im Generator in ein Enum generieren? So würde jeder die gleichen IDs verwenden können wenn ein Bricktyp abgefragt wird... nur so eine Idee.

Ich bin zwar nicht TF, aber ich versuche mich trotzdem mal:

Dein Wunsch wäre ja quasi etwas wie

enum Brick {Master, Servo, DC, ...}

 

Das lässt sich denke ich mit den vorhandenen Generator-Daten nicht umsetzen. Bisher hat man eine Liste von Python-Dateien (pro Brick/Bricklet eine) aus denen die Bindings generiert werden. Damit ließe sich zwar ein enum generieren, aber das wäre nicht kompatibel erweiterbar. Das heißt sobald ein neues Brick dazukommt rutscht es alphabetisch (auch das ist genaugenommen nur zufall ^^) dazwischen und würde damit andere IDs generieren.

 

Lange Erklärung kurz zusammengefasst: Man müsste die IDs explizit festlegen, weil es ansonsten bei der Einführung neuer Bricks durcheinander wuselt.

 

@all: bei den Verwendungen (Antrieb links\rechts, Sensor vorne usw) kann man noch einiges erweitern wenn es noch wünsche dort gibt.

 

Habe noch nicht reingeschaut, aber woran ich schonmal ein oder zwei halbe Gedanken verschwendet habe: Es gibt z.B. mindestens drei Bricks die die Aufgabe "Antrieb links" übernehmen können. DC, Servo, Stepper. Der Servo kann sogar Antrieb links, Antrieb rechts, "Kameraneigung" und "Toaster-Auswurf" gleichzeitig wahrnehmen. Das sollte irgendwie modellierbar sein ^^

Link to comment
Share on other sites

UPDATE!

 

http://www.therealblack.net/TFUploads/TRB_Bot.7z

 

http://www.therealblack.net/TFUploads/Bot1_20120624.png

Bot1_20120624.png

Changelog:

...

- Test Projekt mit manueller Steuerung hinzugefügt.

 

- Projekt Bot 1 begonnen:

-- Flow Layout Buttons anstelle der fixen Buttons verwendet

-- Code Optimeirungen.

-- Bot Klasse -> Fasst alle Bricks zusammen.

-- Distanz halten Modus hinzugefügt.

--- Bot speichert die Entfernung

--- und hält diese Entfernung auf +-5 cm 

-- IO16 Eingang 1 und 7 sind Kollisionsmelder

--- Bot fährt zurück und bleibt stehen.

-- neue Flow Layout Elemente (Led und Text)

--- Verallgemernerung der Elemente von der Brickübersicht.

 

 

Dieser Stand kann nun einen "Bot" auf einer definierten Distanz halten (+-5cm).

Es werden verschiedene Bricks benötigt sonst führt es zu einer Exception! 2 x DC ist im Hauptprojekt fest hinterlegt welche UID welche Kette steuert. Leider hängt eine Kette immer wieder beim drehen... entweder es blockt irgendwas die Mittelung oder die Spannung ist zu gering! Am IO16 ist Port B Pin 0 und 7 für die Kollisionserkennung gedacht. Beim Beenden der Hauptform wird dank der Utils (FormClosed Utils) ein angeschlossener LCD ausgeschaltet und die Leds des IMU wird deaktiviert.

 

Link to comment
Share on other sites

http://www.tinkerunity.org/wiki/index.php/The_Real_Blacks_Wetterstation

 

Es ist kein Mond, es ist eine Wetterstation!

*uh?* Wie auch immer...

 

Es gibt eine neue Klasse welche ich hier einzeln veröfentliche:

Wetterstation für die Bricklets

- Umgebungstemperatur

- Lichtstärke

- Luftfeuchte

 

alle Bricklets sind Optional und können im Konstruktor als null übergeben werden.

Das erzeugte HTML\XML ist als HTML5 aufgebaut und kann mit einen in der Klasse hinterlegten und änderbaren CSS formatiert werden.

 

Spalten der Tabelle haben identische IDs

Zeilen der Tabelle haben abwechselnd lineA und lineB als Klasse.

So sollten alle Formatierungswünsche erfüllt sein ^^

 

Es kann ein Speicher-Pfad angegeben werden damit sollte es auch möglich sein, dass ihr das XML in einen Webroot legt und dann aus dem Netz darauf zugreift (lokal klappt es gut).

Link to comment
Share on other sites

  • 3 months later...

http://www.therealblack.net/TFUploads/TRB_Bot.7z

 

Update Time: neues Projekt eine Fernbedienung für meinen Bot.

- neue Klassen zur Verwaltung der Fernbedienung

- neue Anzeigecontrols für die Fernbedienung

- und ein Test Projekt dafür

 

Außen:

http://www.therealblack.net/TFUploads/FB_Box_A.jpg

Innen:

FB_Box_B.jpg

 

Programm:

FBTestProgramm.png

Link to comment
Share on other sites

Leider steht mein Source vor einen Problem... die Connections und alle anderen Utils sind auf Singeltons ausgelegt, da muss ich die nächste Zeit alles auf "Doubletons" umstellen oder was besseres überlegen...

 

-> Next Target: Neufassung der Utils Klassen!

-> Ziel: Dynamische Anzahl von Verbindungen zulassen!

 

-> Connections zum Bot, zur Fernbedienung und zu einer Wetterstation sollte möglich sein...

 

 

Link to comment
Share on other sites

  • 2 weeks later...

Hallo!

Ich habe soeben euren Thread gelesen und bin von Blacks bisheriger Arbeit sehr begeistert!

Ich darf mich mal kurz vorstellen: Ich bin Domme, 20, Informatikstudent und möchte meinen softwarebeschränkten Horizont auch in Richtung Hardware erweitern :)

Habe dazu ein wenig investiert und mir einen Raspberry Pi zugelegt (Versandzeit wahrscheinlich noch 6-8 Wochen -.-) plus Master-, Servobrick und 4 IRs von hier.

Ich hab mir schon einige Gedanken zum Thema Robotik gemacht und bin zu dem Schluss gekommen, dass ein laufender, sprechender und vor allem *zuhörender* Roboter im Pandakostüm nicht gerade etwas ist, was ich als *Neuling* erreichen kann. Nach diesem Rückschlag hat mich der Thread richtig aufgebaut ;D

Nun gut ich werde mich, sobald meine Teile ankommen, daran versuchen die sehr gute Idee des Radars nachzubauen, wobei ich leider nur die IRs bis 30cm bestellt habe. Sollte für eine Navigation durch ebenes Gelände aber ausreichen :)

So ich will ja nicht nur labern, ich habe auch eine Frage bezüglich der Servos.

Ich habe noch keine bestellt, weil ich mir sicher sein will welche ich hole. Beim durchstöbern diverser Shops zu Modellbau, etc. ist mir vor allem der hohe Preis der Servos aufgefallen und ich brauche zunächst drei: zwei für den Antrieb der Räder (Ketten von LEGO :D) und einen für das Radar, an dem zwei entgegengesetzte IRs angebracht werden, um beide Richtungen gleichzeitig zu mappen.

Über Vorschläge freue ich mich :D

Ich würde mich auch gerne im Forum beteiligen, um meine Erfahrungen und Fortschritte zu dokumentieren :)

LG, Domme

Link to comment
Share on other sites

Hallo erst mal und noch viel Spaß und Erfolg mit Tinkerforge. Schön, dass dich mein Thread wieder aufgabaut hat. In welcher Sprache wirst du entwickeln?

 

Ich habe mir 3 Servos bei Conrad gekauft die beiden RS-2 von Modelcraft sind jetzt nicht zu teuer, dafür aber etwas groß auf meinen kleinen Roboter. Einen kleineren Servo habe ich mir auch gekauft, aber die Flügel dafür sind zu klein, dass ich den IR Sensor daran anschrauben konnte.

Link to comment
Share on other sites

:) Meine Bricks sind vorgestern angekommen, habe dann gleich noch ein paar IRs zum austauschen mit höherer Reichweite nachbestellt, müsste auch bald kommen (Irgendwie war mir 4-30 cm doch zu wenig).

Hab mir überlegt das Gerüst mit Lego aufzubauen, hab ich noch Kistenweise im Keller ;) Ist irgendwie optimal, besonders weil ich noch einige 9V Motoren habe, die krame ich grade raus.

Als Stromversorgung hab ich mir noch einen 10000mAh Akku geleistet, läuft auf 9/12V, hat 2 USB-Anschlüsse und sollte für die Bricks und den PI reichen. Ansonsten kommen noch ein paar 9V Blöcke dran, Hauptsache das Ding ist mobil.

(Hier: http://www.amazon.de/gp/product/B0067XRL56 )

Einen Servo habe ich bestellt, Robotbase RB-65PG Servo Motor, bei EXP-Tech für 10,50€. Sollte der nichts taugen egal, war ja nicht allzu teuer ;)

Solange das mit dem PI noch dauert, starte ich einfach mal die Programmierung per Laptop, würde mich zu Java hingezogen fühlen, die API ist umgänglich und ich hab Erfahrung damit.

Link to comment
Share on other sites

Mein Servo ist angekommen :)

Doof bin ich, dass ich nicht schaue, welchen maximalen Rotationswinkel das Ding hat -.- nämlich nur in Summe 45°.

Also hab ichs versucht zu modden, hab de Stopper entfernt, aber den Poti drin gelassen, da ich keine Wiederstände im Haus habe... Wäre auche igentlich schön die 90° einfach auf 180 zu stretchen, aber dazu bräucht ich dann wieder ein extra Gerät für schlappe 20€... ne danke :/

Der läuft jetzt erstmal noch so wie vorher, allerdings dreht der etwas höher wenn ich die Periodität etwas erhöhe... dann scheint das aber unkontrollierbar zu sein und der Motor stottert wie sonst was :/

Habe mal zwei nachbestellt, die angeblich bis 180° drehen, ist aber aus den USA, dementsprechend dauerts dann mit der Lieferung.

 

Aber was erfreuliches: Habe erfahren, dass der Pi jetzt mit 512mb RAM ausgeliefert wird, und das in drei Wochen :)

 

Wäre cool auch mal von euren Projekten wieder was zu hören! Wie läufts?

Link to comment
Share on other sites

  • 3 months later...

        private void butDebug_Click(object sender, EventArgs e)
        {
            LogClear();

            Type[] typelist = Assembly.GetAssembly((new IPConnection()).GetType())
                .GetTypes().Where(t => String.Equals(t.Namespace,
                "Tinkerforge", StringComparison.Ordinal)).ToArray();

            SortedList<int, String> list = new SortedList<int, string>();
            for(int i = 0; i < typelist.Length; i++)
            {
                //Log(typelist[i].Name);
                FieldInfo info = typelist[i].GetField("DEVICE_IDENTIFIER", 
                    BindingFlags.Public | BindingFlags.Static);
                if(info != null)
                {
                    object value = info.GetValue(null);
                    //Log(typelist[i].Name + "\t" + value.ToString());
                    list.Add((int)value, typelist[i].Name);
                }
            }

            foreach(KeyValuePair<int, string> kvp in list)
            {
                Log(kvp.Key + "\t" + kvp.Value);
            }
        }

Was macht es:

11    BrickDC
13    BrickMaster
14    BrickServo
15    BrickStepper
16    BrickIMU
21    BrickletAmbientLight
23    BrickletCurrent12
24    BrickletCurrent25
25    BrickletDistanceIR
26    BrickletDualRelay
27    BrickletHumidity
28    BrickletIO16
29    BrickletIO4
210    BrickletJoystick
211    BrickletLCD16x2
212    BrickletLCD20x4
213    BrickletLinearPoti
214    BrickletPiezoBuzzer
215    BrickletRotaryPoti
216    BrickletTemperature
217    BrickletTemperatureIR
218    BrickletVoltage
219    BrickletAnalogIn
220    BrickletAnalogOut
221    BrickletBarometer
222    BrickletGPS
223    BrickletIndustrialDigitalIn4
224    BrickletIndustrialDigitalOut4
225    BrickletIndustrialQuadRelay
227    BrickletVoltageCurrent

 

Hier bekommt man einfach und sauber alle Namen und IDs der Bricks bzw. Bricklets raus.

 

Dann verfeinern wir noch die Ausgabe:

                string tmp = kvp.Value;

 

                if(tmp.StartsWith("Bricklet"))

                {

                    tmp = tmp.Replace("Bricklet", "Bricklet ");

                }else

                {

                    tmp = tmp.Replace("Brick", "Brick ");

                }

 

                Log(kvp.Key + "\t" + tmp);

 

Dann sieht die Ausgabe noch besser aus:

 

16    Brick IMU

21    Bricklet AmbientLight

 

Dass ganze packt man dann in eine Utilsklasse als Dictonary<int, String> oder als Infoklasse welche angibt ob es Brick oder Bricklet ist und kann sich so die Namen der angeschlossenen Bricks ausgeben lassen.

Vorteil ist, dass egal was TF nun an neuen Bricks liefert man immer alle Bricknamen geliefert bekommt.

Link to comment
Share on other sites

:) Danke

 

Ja es wäre schon nützlich, aber man kann, wenn man es selbst macht, auch hier eine Übersetzung einbauen.

 

 

@Topic: Ich werde die nächste Zeit noch etwas weniger hier schreiben, da ich meine Implementierungen überarbeiten werde mit dem 2.0 Bindings.

 

Im Moment überlege ich wie ich mir die Bricks Speichere:

 

- Liste mit allen Bricks und Bricklets

- Liste mit Bricks \ je Stack

* Liste ist hier ein Dic<String(UID), Brick>

 

Dann werden die Bricks und Bricklets Objekte miteinander verknüpft.

 

Brick_Info{

Dic<String, Brick> Stack;

Dic<String(Port), Bricklet> Angeschlossen;

 

Brick brick; // Dieser Brick

// + Infos

}

 

 

Link to comment
Share on other sites

  • 2 weeks later...

Ich habe mir in C# gerade ein Tool geschrieben (dass oben gezeigte angepasst) welches mir für jeden Brick(let) Typ die Folgende Zeile ausgegeben hat:

case BrickDC.DEVICE_IDENTIFIER:
   inf.dev = new BrickDC(uid,conn);
break;

dieses dabe ich dann in ein switch in meinen Java Source gepackt...

 

:-\

 

Sinn dieser Zeilen ist es auf Unterscheidung des DEVICE_IDENTIFIER sofort die korrekten Konstruktor zu erhalten. Und später alle Bricks einzeln abzufragen und auf meine JSP Seite zu packen.

Link to comment
Share on other sites

Updates:

- Source Files (JSP und Java) -

 

Jetzt noch ein Bild:

 

TestSeiteBrickJsp.png

Diese Seite läuft "gerade" auf meinen RaspPi\Tomcat7\Webserver. Zwar muss die Seite 2 mal aufgerufen werden, da die Enumeration ein paar Sekunden benötigt um die Bricks zu erfassen und ich keine Wartezeitem beim ersten Laden eingebaut habe ^^

 

Die Anzeige erfolgt nach bekannten Prinzip wie bei meinen C# Projekten bei jeden Enumerations-Callback wird ein Objekt der BrickInfo Klasse angelegt und in einer Liste verwaltet. Zusätzlich wird sofort das passende Objekt erzeugt. Eine Methode in der BrickInfo Klasse beinhaltet die Liste der Bricknamen (erzeugt per C# Tool von oben) und eine Methode welche mit einen kurzen Text je Brick Typ ausgibt (siehe Wert Spalte in der Tabelle).

 

Info: In der heutigen Version sind nur wenige der Bricks implementiert. Auch lässt sich über die Infos beim LCD streiten ^^

 

Hinweise:

In der de.TheRealBlack.Utils Klasse gibt es eine Methode welche Entwicklungssystem vom PI unterscheidet. Dies geschieht anhand des Hostnamens hier müsst ihr bei identischen Aufbau euren Hostnamen eintragen.

 

BrickWrapper ist ein Singelton welches die Connection von TF zwischenspeichert, dass nicht mehrere Connections angelegt werden. Hier wird hier Port und Host IP angegeben und die gefundenen Bricks verwaltet.

 

Roadmap:

Java Skripte erstellen damit man die Bricks Steuern kann.

 

 

Edit:

 

onclick="SendReq('/AJAX/BrickletLCD20x4.jsp', '7ZG', 'SwitchLight', caller)"

 

Ich kann nun über meine Seite das Licht des BrickletLCD20x4 an und ausschalten *hip hip!*

 

Link to comment
Share on other sites

TestAjax.png

 

Download

 

;D Jeder Brick und Bicklet benötigt im Moment eine eigene JSP Seite um die AJAX Requests zu verarbeiten. Einige sind bereits Implementiert (siehe Bild) andere Benötigen etwas mehr Zeit. ^^ Im Moment gibt es 2 Handler der eine gibt Statusinformationen zurück ob Aktion erfolgreich war oder nicht die andere schreibt wie im Bild gezeigt die Werte hinaus.

 

Was im Bild nicht gezeigt ist ist eine Eingabemaske für LCD Bicklets hier können Texte frei plaziert werden, das Licht geschalten oder das Display gelöscht werden. So könnte man auch kleine Nachrichten übermitteln.

 

 

Ich denke darüber nach, dass ich auch Lichtstärke als Bild ausgeben könnte...

oder die IO Bricklets per kleine Symbole...

bei Temperatur oder Poti könnte man auch Balken oä ausgeben...

viel viel ist noch zu tun..

 

 

Link to comment
Share on other sites

  • 3 months later...

@AuronX: Diese Frage muss ich leider an das TF Team weiter geben, da ich nur am Anfang einmal -90 , -45 , 0 , 45 , 90 angesteuert habe und dann der Servo Test vom BrickV gelaufen ist. ^^

 

Dies habe ich im eigenen Drucker gemacht hat ein paar Anläufe gedauert bis alles sauber gedruckt wurde und die Servo-Arme stabil waren. Ein paar Versuche brachen bei der ersten Drehung ab.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...