-         

Ergebnis 1 bis 5 von 5

Thema: Optomechanische Maus

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    12.05.2011
    Beiträge
    10

    Rotes Gesicht Optomechanische Maus

    Anzeige

    Hallochen,


    vor kurzem kam die Idee für einen Roboter und nun stehe ich vor der Frage, wie denn die Weg-/ Streckenmessung funktioniert.
    Mein erster Einfall war eine optomechanische Maus, die ja min. 2 Infrarot-Lichtschranken beinhaltet.

    Kennt sich jemand damit aus?
    Wie setze ich meine Idee um?

    Dazu muss auch noch erwähnt werden, dass der Robo 2 Antriebsräder (hinten), die separat beschalten werden, und ein Stützrad (vorn) besitzt.
    Die Mausmechanik sollte am Stützrad angebracht werden, um die Streckenmessung durchführen zu können.

    Bitte helft mit.


    Danke!
    "Auch eine Enttäuschung, wenn sie nur gründlich und endgültig ist, bedeutet einen Schritt vorwärts." Max Planck

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    29
    Beiträge
    4.544
    Es kommt darauf an wie du es machen willst. Es gibt mehrere Möglichkeiten.
    1) Die Lichtschranken ausbauen und so wie bei z.B. Asuro verwenden. Jedes Rad bekommt eine Lichtschranke. So kannst du alles errechnen.
    2) PS/2 Maus nehmen. Ich lese mich gerade in die Verwendung von einer PS/2 Tastatur ein und habe diese Seiten gefunden.
    http://www.marjorie.de/ps2/start.htm
    http://de.wikipedia.org/wiki/PS/2-Schnittstelle
    Die Seite marjorie.de ist relativ gut aufgebaut und sehr genau beschrieben wie das Protokoll aussieht.
    3) USB Maus kannst du auch verwenden. Du müsstest dich aber in die Ansteuerung einlesen. Eventuell musst du die Elektronik bis auf dem Auswertechip ausbauen und eine eigene Elektronik bauen.

    MfG Hannes

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Meine PS/2-Programme für Tastatur und Maus (Anschluss jeweils an PC0 und PC1):
    Code:
    // PS/2-Schnittstelle am ATMega32                                  1.4.2009 mic
    // RP6 liest AT-Tastatur am I2C-Port
    
    // http://www.marjorie.de/ps2/ps2_protocol.htm
    // http://www.beyondlogic.org/keyboard/keybrd.htm
    
    #include "RP6RobotBaseLib.h"
    
    uint8_t i, scancode;
    
    int main(void)
    {
    	initRobotBase();
    	DDRC &= ~3; //SDA und SCL sind Eingänge
    	PORTC  &= ~3; // ohne interne PullUps (extern sind 4k7 PullUps angeschlossen)
    
    	while(1)
    	{
    		i=0;
    		scancode=0;
    		while(PINC & 1); // Warten auf Startbit
    		while(!(PINC & 1)); // Ende Startbit
    		do
    		{
    		   while(PINC & 1); // Tastatur bereitet die Daten vor
    		   if(PINC & 2) scancode |= (1<<i); // Bit einlesen
    		   i++;
    		   while(!(PINC & 1)); // gelesen, auf nächstes Bit warten
    		}while(i<8);
    
    		while(PINC & 1); // Warten auf Paritybit
    		while(!(PINC & 1)); // Ende Paritybit
    		while(PINC & 1); // Warten auf Stopbit
    		while(!(PINC & 1)); // Ende Stopbit
    
    		writeInteger(scancode, 16);
    		writeChar('\n');
    	}
    	return(0);
    }
    Code:
    // PS/2-Schnittstelle am ATMega32                                  1.4.2009 mic
    // RP6 liest PS/2-Maus am I2C-Port
    
    // http://www.marjorie.de/ps2/ps2_protocol.htm
    // http://www.beyondlogic.org/keyboard/keybrd.htm
    // http://instruct1.cit.cornell.edu/courses/ee476/FinalProjects/s2004/jcc72/index.html
    
    // Hihi: http://www.mikrocontroller.net/topic/130824
    
    #include "RP6RobotBaseLib.h"
    
    #define Clock_Low  	{DDRC |=1; PORTC &=~1;} 	// clock low aktiv
    #define Data_Low   	{DDRC |=2; PORTC &=~2;} 	// data low aktiv
    #define Clock_High 	{DDRC &=~1; PORTC &=~1;} 	// clock high (Eingang mit PullUp)
    #define Data_High  	{DDRC &=~2; PORTC &=~2;} 	// data high (Eingang mit PullUp)
    #define Data_Out     {DDRC |=2; PORTC |=2;} 		// data high aktiv
    #define Clock_In     (PINC & 1)
    #define Data_In      (PINC & 2)
    
    uint8_t i, scancode;
    
    // Send a command to the mouse
    // http://instruct1.cit.cornell.edu/courses/ee476/FinalProjects/s2004/jcc72/code.html
    void send(uint8_t command)
    {
    
      char parity=0;
      char mask = 0x01;
      parity =  (command & 0x01) ^		//Calculate odd parity
                ((command & 0x02) >> 1) ^ // ich kenne das anders ;)
                ((command & 0x04) >> 2) ^
                ((command & 0x08) >> 3) ^
                ((command & 0x10) >> 4) ^
                ((command & 0x20) >> 5) ^
                ((command & 0x40) >> 6) ^
                ((command & 0x80) >> 7);
      Clock_Low;  	// Pull clock low
      //delay_us(120);
      sleep(2);
      Data_Low;  	// data low
      Clock_High; 	// Release clock
      while(!Clock_In); // wait for clock high
      for (i=0; i<8; i++) {
    
           while(Clock_In);  // wait for low clock
           //PORTD.1 = !(command & mask); // send inverted data bit to data line
           if(command & mask) Data_Low else Data_Out
           while(!Clock_In);   // wait for clock high
           mask = mask<<1;   // update mask
      }
    
      while(Clock_In);  // wait for low clock
      //PORTD.1 = parity;	//send parity bit to data line
      if(parity) Data_Low else Data_High
      while(!Clock_In);   // wait for high
      while(Clock_In);  // wait for low clock
      while(!Clock_In);   // wait for clock high
    
      Data_High;	//release the data line
    
      while(Data_In); // wait for data go low
      while(!Data_In); // wait for data go hi
    }
    uint8_t read(void)
    {
    		uint8_t i, scancode;
    		i=0;
    		scancode=0;
    		while(Clock_In); // Warten auf Startbit
    		while(!Clock_In); // Ende Startbit
    		do
    		{
    		   while(Clock_In); // Tastatur bereitet die Daten vor
    		   if(Data_In) scancode |= (1<<i); // Bit einlesen
    		   i++;
    		   while(!Clock_In); // gelesen, auf nächstes Bit warten
    		}while(i<8);
    
    		while(Clock_In); // Warten auf Paritybit
    		while(!Clock_In); // Ende Paritybit
    		while(Clock_In); // Warten auf Stopbit
    		while(!Clock_In); // Ende Stopbit
    	return(scancode);
    }
    
    int main(void)
    {
    	initRobotBase();
    	Clock_High;
    	Data_High;
    	
    		writeString_P("\nBitte Maus bewegen!\n\n");
    		send(0xf4);
    		mSleep(500);
    
    	while(1)
    	{
    		writeInteger(read(), 16);
    		writeChar('\n');
    	}
    	return(0);
    }
    Beide Programme laufen auf meinem RP6 (8MHz-Mega32), sollten aber einfach zu portieren sein. Vielleicht hilft euch das beim Einstieg.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Auf den Seiten vom C´t Bot kann man ziemlich gut nachlesen wie die den Mouse Sensor einsetzen, auch programm technisch ist das dort ganz gut beschrieben.

    Gruß Richard

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    29
    Beiträge
    4.544
    Danke radbruch für das Bsp. Ich versuche aber den anderen Weg zu wählen (Tastatur Emulator), damit ich mit einer Taste den NAS (Netzwerkfestplatte) herunterfahren kann. Zusätzlich möchte ich wenn ich es brauche im Betrieb eine Tastatur anstecken können. Wenn ich es nicht schaffe bleibt immer noch die Möglichkeit eine USB Tastatur anzustecken.

    @Richard
    Danke für den Hinweis. Werde ich mir dann, wenn ich es konkret brauche, durchlesen.

    MfG Hannes

Ähnliche Themen

  1. RC Maus
    Von Pilotzi im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 5
    Letzter Beitrag: 01.06.2009, 20:19
  2. optische Maus am PC, aber nicht als Maus ...
    Von frank-findus im Forum Sensoren / Sensorik
    Antworten: 7
    Letzter Beitrag: 02.09.2007, 23:22
  3. Maus als Bewegungssensor
    Von Zet im Forum Sensoren / Sensorik
    Antworten: 16
    Letzter Beitrag: 07.08.2007, 21:41
  4. AVR u. GPS Maus
    Von Andy123 im Forum AVR Hardwarethemen
    Antworten: 5
    Letzter Beitrag: 10.02.2007, 14:26
  5. Das Rad in der Maus
    Von honkitonk im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 1
    Letzter Beitrag: 25.08.2005, 20:41

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •