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:
Wenn Ihr Lust habt, kann Ich mal ne .kml Datei zur Visualisierung in Google Earth bereit stellen.
Allerdings nur als PN von wegen Datenschutz.
Lesezeichen