Miniauto bauen, welches über den COM-Port steuerbar ist



  • Hallo,
    ein Kumpel und ich wollen zusammen ein Miniauto bauen, welches man über den COM-Port und somit über den Rechner zum fahren bringen kann. Ich programmiere schon sehr lange nur ist dieses COM-Gebiet absolutes Neuland...sowie auch die Interaktion mit Computer und fremden Geräten. Da aber Herausforderungen das schönste am Computer sind, möchten wir uns dieser stellen (bitte keine Comments wie "ihr seid doch sowieso zu blöd dafür" etc.). Die Lenkung erfolgt über Elektromotoren. Diese zu bauen ist kein Problem. Strom kriegt das Teil aus einer Batterie. Unser Problem ist nun, wie wir über den Computer dem Auto sagen dass es zB Motor1 starten soll...wie funktioniert das? Schickt man über den COM-Port nur Bytes raus oder kann man auch jeden einzelnen PIN "signalisieren"? Wäre nett wenn mir hier jemand detaillierte Hilfe geben können. Ich weiß, das Forum wird sicherlich falsch gewählt sein, aber ein passendes wie Maschinenbau gibt es ja leider noch nicht. 🙂

    Gruß,
    Kevin



  • hi,

    meint ihr den seriellen port oder den parallelen? ueder den parallelen habt ihr ja 8 datenleitungen und 5 steuerleitungen, also insgesamt 13, macht 8192 moeglichkeiten. was auch noch wichtig waere, per kabel oder per funk die datenuebertragung?

    gruss
    msp



  • wir nehmen den einfacheren....der wäre welcher? 🙂
    Machens per Kabel....das wichtigste was wir nicht wissen ist, wie man am Gerät checkt, dass irgendeine PIN-Kombi aktiviert ist und somit bei einer bestimmten der Motor anspringt....



  • Vielleicht hilft dir das etwas: http://www.c-plusplus.net/forum/viewtopic.php?t=39312

    MfG SideWinder



  • Die Serielle Schnittstelle ist gegen Kurzschlüsse und Überspannungen sehr gut geschützt. Die Parallele nicht. Seriell kann man über ein nur 2adriges Kabel bis zu 130 m bei Datenraten bis 1200 Baud arbeiten. Kürzere Leitungen -> höhere Datenraten. Das setzt aber voraus, dass man nur TxD und GND (vom PC) verwendet. Also auf der Empfängerseite einen seriellen "Dekoder" baut (siehe: HP von B. Kainka und seine Bücher). So ein Minimal-"Dekoder" besteht aus 3 billigen CMOS-Bausteinen und ein paar passiven Bauelementen. Kann man ganz locker auf einem Stück Lochrasterplatine frei verdrahtet aufbauen. So hat man 8 einzeln setz-/rücksetzbare Bits zur Verfügung. Und die Programmierung ist ganz einfach mit CreateFile und WriteFile ohne Threads möglich.
    Etwas umfangreicher (auch die Hardware) wird es, wenn man auch was empfangen will. Aber das war ja nicht das Ziel, wenn ich das richtig verstanden habe.

    Noch'n Tip: Es gibt ganz kleine Sende- und Empfangsmodule (und auch Tranceiver-Module), die serielle Signale ab 1200 Baud in eine (oder eben auch beide) Richtung(en) übertragen können. Damit ist das Miniauto nicht mehr an das Kabel gebunden.

    Auf www.mikrocontroller.net und in diversen Roboter-Foren findest Du umfangreiche Hilfe (und 'ne Menge Ideen).

    Blackbird



  • Hallo,
    Danke erstmal für die Tipps. TxD RxD RTS CTS etc. sind ja die Bezeichnungen für die PINs...ist es egal welche ich da verwende um Daten zu übermitteln? Ich habe gelesen, dass nur TxD Daten übermittelt...aber was ist dann der Unterschied zwischen TxD und RTS? Wie verknüpfe ich diese PINS mit den CMOS Steinen? Was machen diese 3 CMOS Bausteine und wie verwendet man diese und wie interagieren die zusammen mit dem Computer? Und wie schaltet man über die einen Motor an? Fragen über Fragen 🙂 Gibts dazu nicht ein winziges Tutorial oder so? *g*

    Gruß,
    Kevin



  • ... ein winziges Tutorial ?

    Das Internet und die Buchläden sind voll davon. Schließlich existiert die serielle Schnittstelle schon Jahrzehnte.
    Ohne Löten wird es wohl nicht gehen, es sei denn, Du hast genu Geld übrig um Dir alles fertig kaufen zu können. Als Tip: Elektor, Elrad, ELV, Conrad ...
    Selber aufbauen ist aber auch drin. B. Kainka (geh' mal auf seine HP) hat nicht nur Bücher genau passend für Dein Problem geschrieben (O.K., die Bücher sind auch nicht gerade billig 🙄 ), sondern auch Hard- und Software-Baispiele ins Internet gestellt. Suche nach "CompactUniversal" - das ist ein weiteres Modul (mit 5 CMOS-Bausteinen) für Digital In/Out (je 8 bit), Analog-In (8 bit) und Frequenzzähler inclusive Software, DLL, C-Header-Datei und Programmbeispielen für VB, VBA, Delphi und C. Die Leiterplatte gibt es sogar bei Elektor (auch nicht billig, leider).
    Die einfache Schaltung, die ich meinte, ist in seinem ersten Buch "Serielle Schnittstellen" erschienen. Sie wartet auf eine Startbit, gibt einen Baudraten-Taktgenerator (4585 oder 40106) frei, der ein Schieberegister (4094) taktet, welches am Data-Eingang die seriellen Daten von TxD anliegen hat. Gleichzeitig zählt ein Zähler (4017) die 8 bits mit und erzeugt zum Schluß einen Übernahmeimpuls für das Schieberegister. Damit werden die Daten aus dem internen Schieberegister des 4094 in das Ausgangsregister geladen und stehen permanent bis zum nächsten Datenempfang an. Simpel - nicht wahr? 🙂
    Laß Dich nicht verwirren, einfach nachbauen reicht schon.

    Der Pegel der Seriellen Schnittstelle wird via Vorwiderstand und Z-Diode auf TTL-Pegel gebracht. Benutzt werden am PC nur TxD und GND. Motoren ein- und ausschalten kann man über ein Relais oder einen Verstärker (z.B. Darlington-Transistor). Was man verwendet ist aber sehr von den Daten des Motors abhängig.

    Blackbird



  • ahja, jetzt ist mir alles klar 🙂
    Kannst du nicht sagen wie ich aufs Einfachste einen Motor auf Knopfdruck mit externer Batterie zum laufen kriege? 😞

    Gruß,
    Kevin



  • Mit 3 Drähten zwischen Batterie, Motor und Knopf. 😉

    Wenn es komfortabler sein soll, so mit PC und Fernsteuerung und automatisch und so - dann gibt es viele Wege:
    1. alles von irgendjemand machen lassen
    2. selber planen und alles kaufen
    3. selber planen, das Komplizierte kaufen/machen lassen, den Rest selber machen
    ...
    n. alles selber planen/entwickeln und machen

    Was genau willst Du machen? Und wo brauchst Du Hilfe?

    Blackbird



  • Ich will fürs erste:

    PC - Button drücken => Motor geht an, aber über eine externe Batterie und nicht über den Strom aus dem COM-Port!!
    Was ist eignetlich der Unterschied zwischen TxD und RTS zB? Warum kann nur TxD Daten übermitteln? Wo liegen da die Unterschiede?
    Ich möchte so gut wie alles selbst bauen, bis auf das wirklich harte...aber es soll eben möglichst einfach sein!

    Gruß,
    Kevin



  • Weiß das plötzlich niemand mehr? 😞

    Super Seiten sind auch erwünscht!

    Gruß,
    Kevin



  • Hi Kevin,

    war weg übers Wochenende.

    PC - Button drücken => Motor geht an, aber über eine externe Batterie und nicht über den Strom aus dem COM-Port!!

    Hatte ich auch nie geschrieben. Ca. 10 mA reichen nicht mal für ein normales Relais. Und alle "Verstärker" brauchen einen eingene Spannungsversorgung (Akku, Batterie, Netzteil ...).

    Was ist eignetlich der Unterschied zwischen TxD und RTS zB?

    http://www.beyondlogic.org/serial/serial.htm

    Per Frage-Antwort kann Dir niemand hier in einem Crash-Kurs Wissen zur seriellen Kommunikation vermitteln.
    Hast Du denn mal auf die HP von B. Kainka nachgesehen?
    ---> http://www.b-kainka.de/basis.htm
    Da wird so ziemlich genau die Lösung für Dein Problem angegeben.

    Ich möchte so gut wie alles selbst bauen, bis auf das wirklich harte...aber es soll eben möglichst einfach sein!

    Nix dagegen einzuwenden - Anleitungen findest Du bei B. Kainka und im Forum von www.mikrocontroller.net (siehe Antwort vom 09.06.04).

    Blackbird



  • Ich habe vor kurzem für die Schule mal einen Roboter gebaut - für die Ansteuerung der Gleichstrommotoren habe ich da den Brückentreiber L298 verwendet. Du bekommst diesen z.B. bei Reichelt - dort gibts auch das Datenblatt dazu 🙂



  • Bevor Du aufgibst:

    /------*---------o -Batt
                       |      |
                       |    __|__
                       |    | / |  Relais
                       |    -----
                       | A K  |
              1N4002   \-|>|--*
                              | C
              _____       B  /   BC558B
    DTR   o--|_____|--*-----|  pnp-Transistor
    (RTS)    4,7kOhm  |      \  E
              Rv      | A K  |
                      \-|>|--*
                   1N4148    |
    GND   o------------------*----------o +Batt
    
    Rv = 10V / 2mA (gerundet)
    Relais-Strom max. 100 mA
    Relais-Spannung = Batt.-Spannung
    DTR - Pin 4 (9pol. Sub-D)
    RTS - Pin 7 (9pol. Sub-D)
    

    Das Ganze zweimal aufbauen (an DTR und RTS). Die Motoren werden über die Relaiskontakte ebenfalls von der Batt.-Spannung versorgt.

    Programm (fragnment):

    ...
    HANDLE hCom = INVALID_HANDLE_VALUE;
    hCom = CreateFile ("COM1", GENERIC_WRITE,
        0,
        NULL,
        OPEN_EXISTING,
        0,
        NULL);
    ...
    
    EscapeCommFunction (hCom, SETRTS); // RTS setzten
    ...
    EscapeCommFunction (hCom, CLRRTS); // RTS rücksetzten
    ...
    // irgendwas tun ...
    
    CloseHandle (hCom);
    

    Blackbird



  • Oh vielen dank für die Arbeit! Fragen gibts wenn ich deine 2 Seiten konzentriert durchgelesen habe :). DANKE!



  • So, durchgelesen
    Viele Fragen:
    Ich kenne immernoch nicht den Unterschied zwischen RTS und TxD...ich weiß, TxD ist dazu da, um Daten zu übermitteln...ich denke wenn ich mit WriteFile auf den ComPort schreibe, werden die Daten hier übermittelt, oder? Angenommen ich will ein LED zum Leuchten bringen, was hindert mich daran TxD zu setzen und das LED an TxD und GND anzuschließen anstatt RTS und GND? Diesen Unterschied will mir irgendwie niemand erklären 🙂
    Nun zu deiner Zeichnung, erstmal, sehr detailliert mein Empfinden nach dem Anschauen: UFF! 😮

    Jetzt gehts zu den richtig peinlichen Fragen. Erstmal versteh ich deine Schaltskizze so gut wie gar nicht. Wo ist hier irgendein Motor angeschlossen?Ich habe eine Batterie, von der führt ein Draht zu einem Relais, hier ist Frage1:
    Was ist ein Relais und wozu braucht man sie?
    es führt ebenfalls zum A K, :), was ist A K? :). Dann gehts zu einem lustigen Transistor...was ist dieser Transistor und was macht der? Ich kenne nur Transformatoren 🙄 , dann gehts zu einem Widerstand und zum DTR oder RTS PIN, wieso genau die und nicht TxD zum Beispiel? Warum der Widerstand? Ist die Spannung von 5V aus dem RTS zu hoch? *g* Dann wieder zu nem A K und zu GND und noch ner Batterie...was sind diese A Ks denn und was sind die 1N4002, 1N4148 und was bringen die?

    Solange ihr nicht die Geduld verliert gebe ich sicher nicht auf...habe ich noch nie und kann wahrscheinlich gerade deswegen so gut programmieren 🙂

    Vielen Dank für eure schwerbehindertenfreundliche Hilfe *g*

    Gruß,
    Kevin



  • Hi Kevin,

    entschuldige die Verspätung. War einen Tag unterwegs, komme erst jetzt zum Antworten.

    Eine Serielle Schnittstelle hat 3 Ausgänge (TxD - 3, DTR - 4, Rts - 7) und 5 Eingange (RxD - 2, DSR - 6, DCD - 1, RI - 9). Masseleitung für alle ist GND - 5. Gilt für den 9pol. Sub-D-Stecker am PC.
    Wie der Name schon sagt - SERIAL heißt "nacheinander", d.h. es werden (in der Regel) 8 Bits nacheinander über TxD gesendet (inclusive eines Start- und eines Stopbits). RxD macht genau das Gegenteil - es wandelt die 8 zeitlich aufeinanderfolgenen Bits wieder in ein (paralleles) Byte um. Benutzen kann man TxD mit WriteFile und RxD mit ReadFile. Das ist aber eine ziemlich vereinfachte Erklärung, aber sie sollte für die Verwendung der seriellen Schnittstelle genügen. Mehr Details sind in zahlreichen Büchern und im Internet und in der Hilfe Deiner IDE zu finden.

    Die anderen Ein- und Ausgänge dienen der Steuerung der Übertragung von Bytes ("Bist Du fertig mit der Übertragung?" - "Bin nicht bereit, Daten zu empfangen!" - "Daten sind übertragen" - usw. und so fort ...). Diese Pins kann man aber nach eigenem Guste setzen und rücksetzten, also -10V oder +10V schalten. Dafür gibt es die Funktion EscapeCommFunction. "Lesen", welcher Pegel gerade an den Eingängen steht, kann man mit WaitCommEvent. So kann man natürlich auch Bytes übertragen, Bit für Bit. Nur muß man dann die "Serialisierung" selber machen.
    (siehe: http://www.stickybit.de/wissen/computer/grundlagen/schnittstellen/schnittstellen.htm#0001)

    Zu Deinen anderen Fragen zur "Hardware". Da fehlen eingentlich die kompletten Grundlagen der Elektronik. Per Frage-Antwort-"Spiel" ist da nichts zu machen. Schaue Die die Seiten von http://www.elektronik-kompendium.de/sites/slt/0208031.htm an.

    A - Anode der Diode
    K - Kathode der Diode
    E - Emitter des Transistors
    C - Kollektor des Transistors
    B - Basis des Transistors

    Die Motoren werden über die Relaiskontakte ebenfalls von der Batt.-Spannung versorgt.

    Blackbird



  • Wenn ihr nicht auf euer Geld achten wollt, dann schaut euch mal bei Fischertechnik um. Damit lässt sich so eine Motoransteuerung relativ gut realisieren.

    http://www.fischertechnik.de



  • HI!
    Vielen Dank für die großartige Hilfe! Sorry dass ich erst jetzt wieder antworte, aber gestern war das Forum "halbdown" *g*. Hab wieder ein paar Fragen :). Ein Transistor ist ja ein Schalter, der durch Strom geöffnet bzw. geschlossen wird. Wenn an der Basis Strom anliegt fließt Strom von E zu C. Wohin fließt dann der Rest von der Basis? Auch weiter durch E? Was ist der Unterschied zwischen negativer und positiver Spannung? Habe in der Schule bisher nur die positive kennengelernt. Wenn der Schalter geöffnet ist, fließt ja trotzdem Strom auch nach unten weiter zum 1N4148 und dann wieder durch den Transistor, ist hier nicht eine Art endlosschleife? Weil durch den Transistor wieder zur Basis...oder geht das nicht? Desto höher der Basisstrom, desto größer der Strom der durch E zu C fließen kann...aber das ist doch dumm, wieso denn nicht den kompletten Strom, der von E zu C kommen kann? Gibt es so einen Transistor auch? Kannst du mir noch sagen wozu du die Dioden brauchst? Im Internet habe ich nur gelesen, dass es LEDs sind? Stimmt das? Wozu baust du die ein? Um zu sehen wo der Strom gerade durchfließt? Kannst du mir noch den Sinn von einem Relais kurz erklären? Ich bin sehr gut lernfähig *g*.

    DANKE!

    Kevin



  • Surkevin schrieb:

    Wenn an der Basis Strom anliegt fließt Strom von E zu C.

    Eine Spannung liegt an - ein Strom fließt. Ansonsten stimmt's 😉

    Surkevin schrieb:

    Wohin fließt dann der Rest von der Basis? Auch weiter durch E?

    Welcher Rest?

    Surkevin schrieb:

    Was ist der Unterschied zwischen negativer und positiver Spannung? Habe in der Schule bisher nur die positive kennengelernt.

    Spannung ist ja im Grunde genommen nur ein Potentialunterschied - je nach dem, von wo nach wo du misst ist eben die Spannung positiv oder negativ 🙂

    Surkevin schrieb:

    Wenn der Schalter geöffnet ist, fließt ja trotzdem Strom auch nach unten weiter zum 1N4148 und dann wieder durch den Transistor, ist hier nicht eine Art endlosschleife? Weil durch den Transistor wieder zur Basis...oder geht das nicht?

    Afaik geht das nicht - nur den Sinn der Diode zwischen B und C war mir irgendwie nie so ganz klar (wurde in der Schule auch oft weggelassen 😕 )

    Surkevin schrieb:

    Desto höher der Basisstrom, desto größer der Strom der durch E zu C fließen kann...

    In gewisser Weise ja, aber prinzipiell eigentlich eher nein! Wenn dein Basisstrom groß genug ist leitet der Transistor.

    Surkevin schrieb:

    aber das ist doch dumm, wieso denn nicht den kompletten Strom, der von E zu C kommen kann? Gibt es so einen Transistor auch?

    Ds ist eigentlich abgesehen von kleinen Verlusten schon so, dass alles durchgeht - also U-CE = 0 ist 🙂

    Hoffe jetzt nichts durcheinandergebracht zu haben 🤡


Anmelden zum Antworten