-
        

Ergebnis 1 bis 8 von 8

Thema: Neigungswinkelsensor

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    20.11.2008
    Beiträge
    11

    Neigungswinkelsensor

    Anzeige

    Hallo,

    ich habe seit kurzem einen ASURO und komme auch mit den Sensoren im großen und ganzen gut klar.

    Im Rahmen eines Kurses an der TUHH habe ich jetzt einen Neigungswinkelsensor angebaut. Klick mich für infos

    Der Trick ist: Solange die Front LED an ist, kann man ganz normal die Liniensensoren auslesen, sobald die Front LED aus ist, überlagert der Neigungswinkelsensor die Signale der Liniensensoren.

    Mein Problem ist nun folgendes:
    Die Linienverfolgung funktionierte einwandfrei, bevor ich die zusätzliche Platineinstallierte. Nun sind a) die Werte von den Liniensensoren sehr viel geringer als vorher (vorher lag die Grenze von weiß zu schwarz bei hellem Licht bei ca 200, nun bei ca 50)
    und b) spielt nun der ASURO irgendwie verrückt.

    Er fährt jetzt Rückwärts statt forwäts und umgekehrt, und bei folgendem Quelltext spielt er total verrückt:

    Code:
    #include "asuro.h"
    #include "Funktionen.h"
    
    int main(void)
    {
    unsigned int data[2],a,b;
    char text1,text2;
    Init();
    
    	StatusLED(GREEN);
    	FrontLED(ON);
    	WaitS(1);
    	
    	
    	while(1)
    		{
    		LineData(data);
    		a=data[0];
    		b=data[1];
    		itoa(a,text1,4);
    		itoa(b,text2,4);	
    		SerWrite(text1,4);
    		SerWrite(text2,4);
    		SerWrite("\r\n",2);
    		WaitM(500);
    		}	
    	
    	while(1);
    	return 0;
    }
    Er soll eigentlich "einfach" die Zahlenwerte an das Hyperterminal senden, aber er schaltet die Status LED ein, kurz danach die Front LED aus (welche vorher lief) und danach die Status LED hintereinander immer wieder an und aus.

    Das Hyperterminal zeigt nur einmal das Symbol eines Dreieckes an

    Ich bin mir ziehmlich sicher, dass ich alles richtig zusammengebaut habe, vorher ging er ja auch und auch der Anschluss der zusatzplatine ist eigentlich in ordnung


    Hat einer von euch ne idee, woran das liegt und wie ich das ändern kann?
    Würde mich über schnelle hilfe sehr freuen.

    MfG

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.01.2008
    Alter
    26
    Beiträge
    239
    hallo Der Ire

    du willst doch eien 4stellige zahl in einen string (char-array) speichern/umwandlen. jedoch haben deine variablen text1 und text2 nur 1 element zur verfügung.
    um einen "text" mit 4 zeichen abspeichern zu können, musst du aber einen string mit 5 elementen zur verfügung stellen (am ende wird immer eine 0 angehängt, um das ferst zu legen, wo der text aufhört)

    also müsstes du deinen code etwas umändern:
    Code:
    #include "asuro.h"
    #include "Funktionen.h"
    
    int main(void)
    {
    unsigned int data[2],a,b;
    char text1[5],text2[5];          //5 elemente pro text (4 zeichen + 0)
    Init();
    
       StatusLED(GREEN);
       FrontLED(ON);
       WaitS(1);
       
       
       while(1)
          {
          LineData(data);
          a=data[0];
          b=data[1];
          itoa(a,text1,4);
          itoa(b,text2,4);   
          SerWrite(text1,4);
          SerWrite(text2,4);
          SerWrite("\r\n",2);
          WaitM(500);
          }   
       
       while(1);
       return 0;
    }
    versuch es einmal mit dieser variante
    mfg hai1991

    P.S.: wer großbuchstaben oder rechtschreibfehler findet darf sie behalten

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.11.2006
    Ort
    Hamburg
    Alter
    25
    Beiträge
    384
    Hi,

    also die Werte deiner Liniensensoren erscheinen mir normal. Das eigenartige ist finde ich, dass sie vorher so hoch waren ^^. Aber als ich mit dem Neigungswinkelsensoren den Berg erklommen habe, hatte ich auch nur so Werte um die 50 rum für Weiß und ich habs trotzdem geschaft . Als eine Erklärung für den "Einbruch" deiner Lichtwerte könnte aber vielleicht der höhere Stromverbrauch der Zusatzplatine sein, da sie für einen Spannungsabfall an der Referenzspannung des A/D Wandlers sorgt. Aber dass das so eine große Differenz hervorbringt find ich ein wenig eigenartig.

    mfg und bis Freitag
    Erik

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    20.11.2008
    Beiträge
    11
    Hey, vielen Dank. Mit der kleinen Änderung läufts jetzt.

    Wenn ich die FrontLED aus hab, habe ich ja die Werte der Neigungswinkelplatine an meinen Liniensensoren. Angeblich sollen die Werte bei ca. 500 liegen, wenn er gerade steht. Bei mir liegen die bei ca 2000^^
    Irgendwas mach ich falsch.



    Auch zum arbeiten mit chars hätte ich da nochmal ne frage:


    Code:
    #include "asuro.h"
    #include "Funktionen.h"
    
    int main(void)
    {
    char a[5],b[5],c[5];
    Init();
    	a="A";
    	b="B";
    	c=a+b;
    
    	SerWrite(a,5);
    	SerWrite("\r\n",2);
    	SerWrite(b,5);
    	SerWrite("\r\n",2);
    	SerWrite(c,5);
    	SerWrite("\r\n",2);
    
    	
    	while(1);
    	return 0;
    }
    in der Variable c möchte ich halt "AB" haben, also die beiden verknüpft.

    Aber WinAVR sagt mir, das bei a="A" und das auch bei b "incompatible types" sind.

    Wie mache ich das richtig?

    @Erik, mal gucken ob ich das bis Freitag gepackt hab^^

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.11.2006
    Ort
    Hamburg
    Alter
    25
    Beiträge
    384
    Hi,

    Als eine Erklärung für den "Einbruch" deiner Lichtwerte könnte aber vielleicht der höhere Stromverbrauch der Zusatzplatine sein, da sie für einen Spannungsabfall an der Referenzspannung des A/D Wandlers sorgt. Aber dass das so eine große Differenz hervorbringt find ich ein wenig eigenartig.
    Vergiss das mal... Wenn die Referenzspannung sinkt steigt der AD-Wandler wert natürlich .

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    26.09.2008
    Ort
    Wien
    Alter
    31
    Beiträge
    94
    Der Ire,

    Gänsefüsschen (Doppelte Anführungszeichen) repräsentieren Strings. Die Variable c ist bei dir aber ein character, also nur ein Zeichen, welche mit ' angegeben werden müssen.
    Desweiteren, warum machst du ein Array mit 5 Zeichen, wenn du nur eines speicherst? Das verbraucht unnötig Ressourcen.

    Probiere mal folgendes:
    char a,b,c[2];
    Init();
    a='A';
    b='B';
    c[0]=a;
    c[1]=b;

    Gruß
    while (!asleep()) sheep++;
    RP6 und Asuro Befehlsübersicht

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    20.11.2008
    Beiträge
    11
    @nil.at:

    Danke für den Tipp werde das gleich mal ausprobieren.
    Wegen den 5 Zeichen: ich wollte sichergehen dass genug platz ist^^ und bei diesem Testprogram war mir resourcensparung relativ egal.


    @ all:
    Hab dsa Programm mit der abänderung von hai1991 ausprobiert udn bekamm auch Werte, allerdings lagen die laut HyperTerminal so bei 2020...

    Anhand der LED's und nen paar while und if schleifen habe cih aber werte um und bei 570 ermittelt, die irgendwie der realität näher kommen.
    Woran liegt das, dass ich so total andere Werte erlange.

    und Zweite frage: ich hab nen kleines prog geschrieben mit dem er halt immer in richtung höchsten Punkt fahren soll. Mit den LED's habe ich dann die Grenzwerte eingestellt, und daran findet er auch den höchsten punkt, allerdings sobald ich die Motoren aktiviere habe ich das gefühl, dass sich die Grenzen für den Neigungswinkelsensor verändern.
    Kann es sein, dass die Spannung an den Motoren meine Werte vom Sensor versaut?

    MfG
    Der Ire

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.11.2006
    Ort
    Hamburg
    Alter
    25
    Beiträge
    384
    Zitat Zitat von Der Ire
    Kann es sein, dass die Spannung an den Motoren meine Werte vom Sensor versaut?
    Ja... Ein früherer Kursteilnehmer hat das mal in einer Grafik ausgewertet und die Abweichungen bestimmt. Ich weiß nicht mehr wie viel das war, aber es gab schon eine Abweichung. Er hat dann immer angehalten, um die Neigungswerte auszulesen.

    mfg
    Erik

Berechtigungen

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