Thund3r
19.04.2010, 00:08
Hallo
Ich wollte hier nochmal mein Projekt vorstellen in dem ich einen Asuro Snake Vision Sensor an den RP6 angeschlossen habe.
Mit diesem ist er in der Lage zB Teelichter zu finden:
Video 1: http://www.youtube.com/watch?v=t3B6QOD3lSI
Video 2: http://www.youtube.com/watch?v=DYTQs0__HAI
Video 3: http://www.youtube.com/watch?v=U5HgMhHF9DU
Video 4: http://www.youtube.com/watch?v=Ytfs5m9FXbE
http://www.rn-wissen.de/images/d/d9/SVS.jpg
Dieses Programm zeigt eine Wärmeveränderung in Abhängigkeit einer vorher ermittelten Umgebungstemperatur. Die Ausgabe erfolgt über das Display und über die LEDs an der M32 Platine. Somit ist er in der Lage die Wärmeveränderung einer Hand in über einem Meter Distanz zu registrieren (Der Sensor ist nun hinten am RP6 angebracht und nicht mehr wie in dem Video vorne) :
by Thund3r
int main(void) // Hauptfunktion
{
initRP6Control(); // Microcontroller initialisieren
DDRA &= ~ADC2;
uint16_t adc2 = readADC(ADC_2); //1ten Wert einlesen
uint16_t sSnake = adc2;
uint16_t adc3 = readADC(ADC_3); // 2ten Wert einlesen
uint16_t sSnake2 = adc3;
int a;
a=(sSnake-sSnake2); //Differenzwert als Umgebungstemperatur festlegen
while(true)
{
...
Snake(a);
...
}
while(1);
return 0;
}
...
void Snake(int dif)
{
uint16_t adc2 = readADC(ADC_2);
uint16_t sSnake = adc2;
uint16_t adc3 = readADC(ADC_3);
uint16_t sSnake2 = adc3;
int a,b;
a=(sSnake-sSnake2); //Neuen Wert einlesen
b=0;
if(a>dif+10) //Wenn neuer Wert abzüglich einem Tolleranzwert recht höher ist
{ setLEDs(0b0011);
b=1;
}
if(a<dif-5) //Wenn neuer Wert abzüglich einem Tolleranzwert links höher ist
{ setLEDs(0b1100);
b=1;
}
if(b==0) //Wenn keine relevante Temperaturveränderung erfolgte
{ setLEDs(0b0110);
}
clearLCD();
setCursorPosLCD(0, 0);
writeStringLCD("Rechts: ");
writeStringLCD(" ");
writeIntegerLCD(sSnake, DEC);
writeStringLCD(" ");
writeIntegerLCD(a, DEC);
setCursorPosLCD(1, 0);
writeStringLCD("Links: ");
writeIntegerLCD(sSnake2, DEC);
writeStringLCD(" ");
writeIntegerLCD(b, DEC);
mSleep(200);
}
Die Platine wird an den untersten Pins an die 5V RP6 Stromversorgung angeschlossen.
Die ADC Anschlüsse kommen für den rechten Sensor an den äußersten Pin und für den linken an den mittleren und äußeren:
http://www.rn-wissen.de/images/7/7f/Svb.JPG
Dann müssen noch beide Dioden auf der Platine mit einem Stückchen Draht überbrückt werden:
http://www.rn-wissen.de/images/6/63/Svf.JPG
Nun kann der RP6 die Daten auswerten
Gruß Thund3r
Ich wollte hier nochmal mein Projekt vorstellen in dem ich einen Asuro Snake Vision Sensor an den RP6 angeschlossen habe.
Mit diesem ist er in der Lage zB Teelichter zu finden:
Video 1: http://www.youtube.com/watch?v=t3B6QOD3lSI
Video 2: http://www.youtube.com/watch?v=DYTQs0__HAI
Video 3: http://www.youtube.com/watch?v=U5HgMhHF9DU
Video 4: http://www.youtube.com/watch?v=Ytfs5m9FXbE
http://www.rn-wissen.de/images/d/d9/SVS.jpg
Dieses Programm zeigt eine Wärmeveränderung in Abhängigkeit einer vorher ermittelten Umgebungstemperatur. Die Ausgabe erfolgt über das Display und über die LEDs an der M32 Platine. Somit ist er in der Lage die Wärmeveränderung einer Hand in über einem Meter Distanz zu registrieren (Der Sensor ist nun hinten am RP6 angebracht und nicht mehr wie in dem Video vorne) :
by Thund3r
int main(void) // Hauptfunktion
{
initRP6Control(); // Microcontroller initialisieren
DDRA &= ~ADC2;
uint16_t adc2 = readADC(ADC_2); //1ten Wert einlesen
uint16_t sSnake = adc2;
uint16_t adc3 = readADC(ADC_3); // 2ten Wert einlesen
uint16_t sSnake2 = adc3;
int a;
a=(sSnake-sSnake2); //Differenzwert als Umgebungstemperatur festlegen
while(true)
{
...
Snake(a);
...
}
while(1);
return 0;
}
...
void Snake(int dif)
{
uint16_t adc2 = readADC(ADC_2);
uint16_t sSnake = adc2;
uint16_t adc3 = readADC(ADC_3);
uint16_t sSnake2 = adc3;
int a,b;
a=(sSnake-sSnake2); //Neuen Wert einlesen
b=0;
if(a>dif+10) //Wenn neuer Wert abzüglich einem Tolleranzwert recht höher ist
{ setLEDs(0b0011);
b=1;
}
if(a<dif-5) //Wenn neuer Wert abzüglich einem Tolleranzwert links höher ist
{ setLEDs(0b1100);
b=1;
}
if(b==0) //Wenn keine relevante Temperaturveränderung erfolgte
{ setLEDs(0b0110);
}
clearLCD();
setCursorPosLCD(0, 0);
writeStringLCD("Rechts: ");
writeStringLCD(" ");
writeIntegerLCD(sSnake, DEC);
writeStringLCD(" ");
writeIntegerLCD(a, DEC);
setCursorPosLCD(1, 0);
writeStringLCD("Links: ");
writeIntegerLCD(sSnake2, DEC);
writeStringLCD(" ");
writeIntegerLCD(b, DEC);
mSleep(200);
}
Die Platine wird an den untersten Pins an die 5V RP6 Stromversorgung angeschlossen.
Die ADC Anschlüsse kommen für den rechten Sensor an den äußersten Pin und für den linken an den mittleren und äußeren:
http://www.rn-wissen.de/images/7/7f/Svb.JPG
Dann müssen noch beide Dioden auf der Platine mit einem Stückchen Draht überbrückt werden:
http://www.rn-wissen.de/images/6/63/Svf.JPG
Nun kann der RP6 die Daten auswerten
Gruß Thund3r