Abhängigkeit von Reflexion und Abstand an einer optischen Messeinrichtung?
Hallo Leute,
Ich bin gerade dabei einen Vegetationsindex Messer zu bauen.
Dabei werden Pflanzen mit Leuchtdioden unterschiedlicher Wellenlänge angestrahlt und die Reflexion dabei als Maß für den Vegetationsindex verwendet.
Als LED's habe ich 30° 1W LED's mit 5 verschiedenen Wellenlängen 595, 670, 690, 740, 780nm verwendet, die um einen Licht Frequenz Wandler ( TSL235 ) herum angeordnet sind.
Diesem Lichtsensor ist eine CARCLO Linse mit 23° Öffnungswinkel ( Eigentlich zum fokussieren von High Power LED's gedacht ) angebaut.
Wenn man mit dieser Anordnung eine weisse Fläche anstrahlt, sind die Reflexionen, der einzelnen Wellenlängern, stark von der Entfernung der Fläche zu der Sensoreinheit abhängig ( 30 bis 70cm hab ich ausprobiert ) . Eigentlich hätte ich eine gleichmässige Abnahme der Reflexionen bei allen Wellenlängen erwartet.
Tatsächlich wird jede Wellenlänge mit einer anderen intensität abhängig von der Entfernung reflektiert.
Warum das so ist ist eine große Frage?
Wäre es eventuell besser die Optik weg zu lassen und Stattdessen ein lichtundurchlässiges Rohr als seitliche Abschattung für den Sensor zu verwenden - Wer hat damit Erfahrung?
Hat noch jemand eine andere mögliche Idee?
Ich weiß, das Thema ist reichlich speziell, aber eventuell findet sich doch der Eine oder Andere Spezialist.
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ein Versuch wäre es ggf. auch wert jeweils versetzt mit und ohne Beleuchtung zu messen für eine Differenzbildung
Die Werte werden sequenziell nacheinander ermittelt. Also alle Wellenlängen nacheinander Durch und diesen Durchlauf dann 10 mal.
Die Sequenz ist keine Beleuchtung 525nm ohne Filter, 670nm ohne Filter, 670nm mit Rotfilter, 700nm mit Rotfilter, 740nm mit Rotfilter, 780 nm mit Rotfilter. Dann das Ganze fortlaufend, immer die letzten 10 Werte werden gespeichert und verarbeitet. Der älteste 11te Wert wird wieder verworfen.
Die Frequenzmessung läuft über einen Timer, der auf externen Takt geschaltet ist. Die Torzeit wird über einen zweiten Timer bereitgestellt.
Zitat:
welcher Art sind die Störungen bei Tageslicht
Das Gerät wird über der zu messenden Fläche bewegt, deshalb ändert sich die Reflexion natürlich ständig.
So lange die Werte mit "farbigen" Licht sich deutlich von denen ohne natürliche Beleuchtung abheben, funktioniert das Ganze auch.
Nur wenn die Unterschiede zu klein werden - sprich das Tageslicht zu hell wird - können keine plausiblen Messwerte mehr ermittelt werden.
Das ist eine Kette die klappt:
leer o.F. 525nm o.F. 670nm o.F. 670nm m.RF. 700nm m.RF. 740nm m.RF. 780nm m.RF.
5814 6303 6267 5915 6174 6713 7127
Die Werte bei Sonneneinstrahlung liegen so um 40000 bis 50000 und da ist die Differenz zu den Werten mit Beleuchtung zu gering.
Bei den LED's ist so ziemlich das Ende erreicht. 5W Led's mit den gewünschten Wellenlänge hab ich noch nicht finden können.
Ob eine weiter 1W LED hier noch was bringt?
Das Problem wird dabei auch, das ich platzmässig auch Probleme krieg und das Ganze sicherlich noch schwerer zu beherrschen wird, wenn die LED's weit auseinander stehen. Sind ja jetzt schon 5 Stück auf Star Platine.
Anbei mal eine Messung die zumindest im Mittelteil brauchbar wäre:
Anhang 20954
Der Reip Wert wurde *25 genommen, damit er in das Koordinatefeld passte!
Liste der Anhänge anzeigen (Anzahl: 2)
Ok, nun gibt es wieder genug grüne Blattmasse für die Messungen und ich hatte ein paar Tage frei.
Ich hab heute ein wenig rumexperimentiert und leider keine vernünftigen Werte bekommen.
Das Messverfahren habe ich jetzt auf 1 Leermessung pro Lichtfarbe geändert.
Aber auch das brachte nur einen Teilerfolg.
Das Hauptproblem ist größtenteils das zu helle Tageslicht.
Habt Ihr da noch irgendwelche guten und praktikablen Ideen?
In den Anhang hab ich mal nen kleinen Log eingestellt.
Die Datei runterladen, und von .txt auf .kml umbenennen. Google Earth müsste dabei auf dem Rechner installiert sein.
Dann kann man sich mal Vorstellen, wie ich das künftig mal haben will.
Die LOGDA003.kml ist bei vollem Tageslicht
Die LOGDA005.kml ist in der Dämmerung um ca. 21:00Uhr erstellt worden.
Die geloggte Fläche ist links und rechts vom Weg.
Beim 21:00Uhr Log kann man die unterschiedliche Bestandsdichte und die nicht grünen Flächen einwandfrei erkennen.
Beim Tageslicht Log funktioniert das überhaupt nicht!
Liste der Anhänge anzeigen (Anzahl: 1)
OK, ich hab mal den Empfänger neu designed.
Er soll das Rechteck modulierte Signal mit einer Frequenz von 2kHz empfangen und gleichrichten.
Das Tageslicht - Umgebungshelligkeit - soll dabei weitgehend ausgeblendet werden.
Am Ausgang nach dem Filter und Gleichrichter sitzt ein A/D Wandler, der die Pegel des 2kHz Signals in für den Controller auswertbare Werte umrechnet.
Guckt doch bitte mal drüber, ob das so passt, oder ob da noch grobe Fehler drin sind.
Könnte man die Empfindlichkeit für die 2KHz Komponente noch weiter erhöhen?
Anhang 22837
Liste der Anhänge anzeigen (Anzahl: 1)
Nun hab Ich den passiven Ansatz zum laufen gebracht.
Als Controller hab Ich da einen AVR32DB32 verbaut.
Es werden dabei 2 Sensoren vom Typ AS7265x verwendet.
Der eine misst die von oben kommende Strahlung, der andere das reflektierte Licht der Pflanzen.
Leider ist das Auslesen der Sensoren sehr fehleranfällig, die Ergebnisse aber brauchbar.
Des weiteren passen die benötigten Frequenzbänder nicht genau zu der für die REIP Ermittlung benötigten Wellenlängen.
Ich versuche zur Zeit das Problem durch Gewichtung von benachbarten Wellenlängen zu lösen - Suboptimal, aber zur Zeit nicht anders lösbar.
Siehe Code:
Code:
//Calculate Raw Data for Reip 460nm-2 560nm-6, 680nm-10, 705nm-11, 730nm-12, 810nm-14 nearest to Orig.
//Orig needed for REIP Calculation = 460, 550nm, 670nm, 700nm, 740nm, 780nm
//To get nearer to the real Wavelength mix two Wavelength an weight it!
void calc_reip(void)
{
//460nm
volatile uint32_t buffer;
volatile int32_t buffer2;
buffer=(Bot_read[2]); //Multiply Bottom *32768 wavelength 460nm = Blue
buffer=buffer<<15;
buffer2=Top_read[2];
if(buffer2 < 1)buffer2=1;
buffer /=buffer2; //Divide by Top Read to get Real reflection Values
if(buffer < 32768)Reip_val[0]=buffer; //Avoid Bot Sensor Value to high
//560nm
buffer=(Bot_read[6]); //Multiply Bottom *32768 wavelength 560nm = Green
buffer=buffer<<15;
buffer2=Top_read[6];
if(buffer2 < 1)buffer2=1;
buffer /=buffer2; //Divide by Top Read to get Real reflection Values
if(buffer < 32768)Reip_val[1]=buffer; //Save the Value in Buffer for later transmission
//670nm
buffer=(Bot_read[10]); //And so on for the other Wavelengths ...
buffer *=5; //Gewichtung der 680nm *5
buffer +=Bot_read[9]; //Gewichtung der 645nm *2 um Wert für 670nm zu bekommen
buffer +=Bot_read[9];
buffer /=7; //Resultat durch /7
buffer=buffer<<15;
buffer2=Top_read[10]; //Gleiche Prozedur für den Top Sensor
buffer2 *=5;
buffer2 +=Top_read[9];
buffer2 +=Top_read[9];
buffer2 /=7;
if(buffer2 < 1)buffer2=1;
buffer /=buffer2; //Divide by Top Read to get Real reflection Values
if(buffer < 32768)Reip_val[2]=buffer;
//700nm
buffer=(Bot_read[11]);
buffer=buffer<<15;
buffer2=Top_read[11];
if(buffer2 < 1)buffer2=1;
buffer /=buffer2; //Divide by Top Read to get Real reflection Values
if(buffer < 32768)Reip_val[3]=buffer;
//740nm
buffer=(Bot_read[12]); //Multiply 730nm by 2
buffer *=2;
buffer +=(Bot_read[13]); //Add 760nm
buffer /=3; //Divide by 3
buffer=buffer<<15;
buffer2=Top_read[12]; //Same procedure for Top readings
buffer2 *=2;
buffer2 +=Top_read[13];
buffer2 /=3;
if(buffer2 < 1)buffer2=1;
buffer /=buffer2; //Divide by Top Read to get Real reflection Values
if(buffer < 32768)Reip_val[4]=buffer;
//780nm
buffer=(Bot_read[13]); //Get Value of 760nm
buffer *=3; //Multiply by 3
buffer=Bot_read[14]; //Get Value of 810nm and multiply by 2
buffer=Bot_read[14];
buffer /=5; //Divide by 5
buffer=buffer<<15;
buffer2=Top_read[13]; //Same for Top Sensor results
buffer2 *=3;
buffer2 +=Top_read[14];
buffer2 +=Top_read[14];
if(buffer2 < 1)buffer2=1;
buffer /=buffer2; //Divide by Top Read to get Real reflection Values
if(buffer < 32768)Reip_val[5]=buffer;
}
Ein seltsamer Fehler ist noch aufgetreten:
Wenn die beiden Spektralsensoren ( oder auch nur Einer ) angeschlossen ist, fällt der GPS Empfang mit der internen Antenne komplett aus!
Mit einer extrernen Antenne hab Ich dann im Freien wieder D-GPS Empfang mit 12 oder mehr Satelliten ( NEO-M8N Empfänger )!
Noch ein Problemchen, bei der Montage am Traktor fällt der Messkopf zeitweise aus.
Da bin Ich noch auf der Suche, habe aber den Quarz in Veracht, denn die Vibrationen sind heftig.
Anbei ein Bild des derzeitigen Sensorkopfes:Anhang 36066
Wenn Ihr Lust habt, kann Ich mal ne .kml Datei zur Visualisierung in Google Earth bereit stellen.
Allerdings nur als PN von wegen Datenschutz.