heise online · c't · iX · Technology Review · Telepolis · mobil · Security · Netze · heise open · heise resale · Autos · c't-TV · Jobs · Kiosk
Zum Inhalt
c't

c't Projekte - c't-Bot und c't-Sim - Mailinglisten

c't-Bot und c't-Sim


[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

Re: [ct-bot] Streulicht herausrechnen?

Absender: Torsten Evers
Datum: So, 19.03.2006 21:43:32
In-reply-to: <441DBF3F.5030805@xxxxxxxxxxxx>
References: <200603192107.18570.tevers@xxxxxxxxxxxxx> <441DBF3F.5030805@xxxxxxxxxxxx>


Hallo Harald,

Am Sonntag, 19. März 2006 21:29 schrieb Harald Härtl:

> bei mir ist kein Anhang angekommen.
ist anscheinend gestripped worden...in meinem Mailausgang ist einer dran :/ 
Ich habe ihn unten nochmal als Text angehangen.

> ganz spontan würde ich den Streulichtanteil abziehen:
>
> Sc = S - (1023-Sd)
>
> eben weil auch die Messung mit LED zusätzlich das Streulicht mitmisst.
> Oder denke ich da eine Ecke zu wenig?
genau das tut die formel...bitte bedenken, dass ein hoher Wert meint, es ist 
dunkler!
Daher addieren, denn wir wollen ja ein zuviel an Helligkeit wegrechnen ;)

Mfg,

Torsten Evers

Hier nochmal der Patch:

Index: sensor-low.c
===================================================================
RCS file: /ctbot/ct-Bot/mcu/sensor-low.c,v
retrieving revision 1.4
diff -u -r1.4 sensor-low.c
--- sensor-low.c	4 Mar 2006 14:54:23 -0000	1.4
+++ sensor-low.c	19 Mar 2006 18:47:03 -0000
@@ -130,8 +130,22 @@
  * Die digitalen Sensoren liefern ihre Werte dagegen unmittelbar
  * Aber Achtung es lohnt auch nicht, immer alles so schnell als moeglich
  * zu aktualiseren, der Bot braucht auch Zeit zum nachdenken ueber Verhalten
+ * - Linien- und Kantensensoren werden nun einmal ohne und einmal mit LED
+ *   ausgelesen, um Streulicht herausrechnen zu koennen
  */
 void bot_sens_isr(void){
+	int16 tempBorderL;		/* Kantensensor links, ohne LED */	
+	int16 tempBorderR;		/* Kantensensor rechts, ohne LED */
+	int16 tempLineL;			/* Liniensensor links, ohne LED */
+	int16 tempLineR;			/* Liniensensor rechts, ohne LED */
+	
+	/* erste Messung ohne LED, um spaeter Streulicht herausrechnen zu koennen */
+	/* da 0x3FF hoechster Wert (=pechschwarz), ist das Streulicht 1023-Messwert 
*/
+	tempBorderL = 1023-adc_read(SENS_KANTE_L);
+	tempBorderR = 1023-adc_read(SENS_KANTE_R);
+	tempLineL = 1023-adc_read(SENS_M_L);
+	tempLineR = 1023-adc_read(SENS_M_R);
+	
 	ENA_on(ENA_KANTLED|ENA_MAUS|ENA_SCHRANKE|ENA_KLAPPLED);
 
  	// Aktualisiere die Position des Maussensors 
@@ -145,14 +159,18 @@
 	sensLDRL = adc_read(SENS_LDR_L);
 	sensLDRR = adc_read(SENS_LDR_R);
 
-	sensBorderL = adc_read(SENS_KANTE_L);
-	sensBorderR = adc_read(SENS_KANTE_R);
+	/* Messwert um "Streulicht" korrigieren */
+	/* tempBorderX enhaelt nur Streulichtanteil */
+	/* also muss der Sensorwert um das Streulicht dunkler == hoeher sein */ 
+	sensBorderL = adc_read(SENS_KANTE_L)+tempBorderL;		
+	sensBorderR = adc_read(SENS_KANTE_R)+tempBorderR;
 	ENA_off(ENA_KANTLED);
-			
-	sensLineL = adc_read(SENS_M_L);
-	sensLineR = adc_read(SENS_M_R);
+	/* Dito mit den Liniensensoren */
+	sensLineL = adc_read(SENS_M_L)+tempLineL;
+	sensLineR = adc_read(SENS_M_R)+tempLineR;
 	ENA_off(ENA_MAUS);	
 
+	
 	//Aktualisiere Distanz-Sensoren
 	// Die Distanzsensoren sind im Normalfall an, da sie 50 ms zum booten 
brauchen
 //	sensDistL= adc_read(SENS_ABST_L);



Copyright © 2007 Heise Zeitschriften Verlag Kritik, Anregungen bitte an c't-WWW Datenschutzhinweis   Impressum