| Autor |
Nachricht |
waste
Roboter Experte


|
Auf Wunsch beschreibe ich hier nochmal den Umbau der IR-Schnittstelle des Asuro zum IR-Hindernisdetektor. Es wurde zwar schon in diesem Thread
http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=10026
vorgestellt, aber hier ist es jetzt in einem Beitrag zusammengefasst, im Detail beschrieben und mit Beispielcode.
Im Asuro ist bereits alles dafür vorhanden, die IR-Diode SFH415-U (D10) als Sender und der Baustein SFH5110-36 (IC2) als Detektor. Man muß nur die beiden Bauteile mechanisch nach vorne ausrichten. Vorsicht beim Auslöten von IC2, das geht nicht so ganz einfach. Man sollte das geeignete Werkzeug zur Hand haben, sonst könnte der Baustein kaputt gehen. Elektrisch kann die Schaltung bleiben, damit auch weiterhin das Flashen und die Funktion als serielle IR-Schnittstelle wie gewohnt möglich sind. Den mechanischen Umbau kann man recht gut in dem Bild erkennen. Befestigt ist der Aufsatz mit einem Gewindebolzen in dem bereits vorhandenen Loch in der Asuroplatine. Wichtig für eine gute Funktion sind der Mittelsteg und das so weit nach vorne gezogene untere Blech. Der Mittelsteg verhindert eine direkte optische Kopplung zwischen Sendediode und Empfänger und das vorgezogene Blech vermeidet Reflektionen von Bauteilen des Asuro bzw. vom Untergrund direkt vor dem Asuro. Die elektrischen Verbindungen werden einfach mit isolierten Litzen von der Asuroplatine zu dem Aufsatz gezogen (siehe auch Bild).
Um nun ein Hindernis detektieren zu können, muss man nur die IR-Diode mit 36kHz versorgen. Das ist die Frequenz, die der IR-Empfänger SHF5110-36 braucht. Der Ausgang des IR-Empfängers wird dann auf LOW gezogen, wenn ein reflektiertes Signal erkannt wird. Das 36kHz-Signal ist im Asuro schon vorbereitet und steht am Ausgang PB3 an. Die IR-Diode ist über einen Vorwiderstand an PB3 und an PD1 angeschlossen. Man braucht also nur den Ausgang PD1 am Atmega auf LOW setzen und schon sendet die IR-Diode. Folgende 2 Zeilen im C-Programm sorgen dafür:
DDRD |= (1 << DDD1); // Port D1 als Ausgang
PORTD &= ~(1 << PD1); // PD1 auf LOW
Die Auswertung des IR-Empfängers erfolgt über den Eingang PD0 des Atmega mit z.B. folgendem Code:
if (!(PIND & (1 << PD0))) // prüft Eingang PD0 auf LOW
Das ist die einfache Version der Hinderniserkennung mit der unveränderten Library "asuro.c". Ich habe zusätzlich noch eine Erweiterung durchgeführt, damit die Intensität der IR-Diode gesteuert werden kann. Das ermöglicht auch eine Erkennung bei geringeren Entfernungen, denn in der einfachen Version ist die Empfindlichkeit maximal und die Hindernisse werden meist bei 1 Meter oder mehr erkannt. Dazu musste ich allerdings die Library "asuro.c" verändern. Wer die Erweiterung haben will, muss auch meine Lib verwenden. Die Lib ist auf der Weja-Lib aufgebaut, wer die bereits benutzt, braucht also auf nichts zu verzichten. Mit meiner Lib "asuro.c" kann man die Intensität der IR-Diode mit der Pulsbreite des 36kHz-Signals steuern. Die Pulsbreite wird mittels Output Compare Register (OCR2) programmiert. Im Prinzip ist es eine PWM für die IR-Diode. Die kleinste einstellbare Pulsbreite ist 125ns, was dem µC-Takt entspricht und die grösste sinnvolle Pulsbreite ist 13,75µs, was 50% Tastverhältnis entspricht. Hier einige Beispiele zur Programmierung:
OCR2 = 0xFE; //Pulsbreite 1 entspricht 125ns
OCR2 = 0xFD; //Pulsbreite 2 entspricht 250ns
:
OCR2 = 0x90; //Pulsbreite 110 entspricht 13,75µs
Die Pulsbreite entspricht also der Differenz aus 255 und dem OCR2-Register.
Mit der Programmierung der Pulsbreite ist es nun möglich die Empfindlichkeit so weit runter zu drehen, dass der Detektor auch erst bei Objekten in 3cm Abstand anspricht. Damit kann man sich relativ gut an Objekte annähern. Allerdings ist zu sagen, dass das Prinzip keine exakte Abstandsmessung zulässt, da die Stärke der Echos abhängig ist vom Reflexionsfaktor des Objektes. Je nach Farbe und Winkel wird ein stärkeres oder schwächeres Signal reflektiert. Das ist aber generell so bei IR-Detektoren, Ausnahme sind die Sharp-Detektoren, die nach einem anderen Prinzip arbeiten.
Meine Lib "asuro.c" und auch "asuro.h" sind in dem zip-File im Anhang zu finden.
Hier noch 2 kleine Testprogramme. Für beide ist meine Lib notwendig.
Mit dem 1. Testprogramm lässt sich anhand der Taster am Asuro die Pulsbreite und damit die Empfindlichkeit einstellen. Die Status-LED zeigt mit dem Wechsel von grün auf rot ein erkanntes Objekt an. Das Testprogramm verdeutlicht sehr schön die Wirkung der Pulsbreite.
#include "asuro.h"
#include <stdlib.h>
int main(void)
{
unsigned char sw;
Init();
DDRD |= (1 << DDD1); // Port D1 als Ausgang
PORTD &= ~(1 << PD1); // PD1 auf LOW
while(1)
{
if (PIND & (1 << PD0))
StatusLED(GREEN);
else
StatusLED(RED);
sw = PollSwitch();
if (sw & 0x01)
OCR2 = 0xFE; //Pulsbreite 1
if (sw & 0x02)
OCR2 = 0xFD; //Pulsbreite 2
if (sw & 0x04)
OCR2 = 0xFB; //Pulsbreite 4
if (sw & 0x08)
OCR2 = 0xF7; //Pulsbreite 8
if (sw & 0x10)
OCR2 = 0xEF; //Pulsbreite 16
if (sw & 0x20)
OCR2 = 0x90; //Pulsbreite 110
}
return 0;
}
Im 2. Testprogramm wird die Pulsbreite laufend von 1 bis 110 durchgesweept. Je nach Entfernung verändert sich die Farbe der Status-LED von rot über orange nach grün.
#include "asuro.h"
#include <stdlib.h>
int main(void)
{
float puls;
Init();
DDRD |= (1 << DDD1); // Port D1 als Ausgang
PORTD &= ~(1 << PD1); // PD1 auf LOW
puls = 1;
while(1)
{
if (PIND & (1 << PD0))
StatusLED(GREEN); // kein Hindernis
else
StatusLED(RED); // Hindernis erkannt
puls = 1.02 * puls; // Pulsbreite wird um 2% erhöht
if (puls > 110) puls = 1;
OCR2 = 255 - (int)(puls);
}
return 0;
}
Mit den beiden Testprogrammen kann man nun spielen und herausfinden wie der IR-Detektor auf verschiedene Objekte reagiert.
Ich hoffe es gefällt und freue mich auf Feedback und vielleicht sogar Verbesserungen.
Gruss Waste |
|
|
|
 |
izaseba

Anmeldungsdatum: 08.05.2005
Beiträge: 2348
Wohnort: Issum Alter: 38

|
Hallo Waste,
Tolle Arbeit =D> ,
ich denke, es werden Dir mehrere Asuro Besitzer dankbar sein !!
Gruß Sebastian |
|
|
|
 |
JeanLuc
Öfters hier


Anmeldungsdatum: 12.07.2005
Beiträge: 12
Alter: 25

|
Hallo, das sieht hervorrgend aus, vor allem da man sich keine neuen teile zusammen suchen muss.
Ich nehme an die Taster musstest du aus platzgruenden nach unten setzen, aber warum hast du beim rechten eine bruecke eingebaut? |
|
|
|
 |
waste
Roboter Experte



|
Hallo Jeanluc,
die Brücke ist nur ein Massebügel zum einfachen Anklemmen für die Masseklemme meines Tastkopfs.
Bei meinem Bausatz wurden spiegelverkehrte Taster mitgeliefert, das habe ich aber erst gemerkt nachdem ich schon 4 eingelötet hatte. Oben wären sie unsymmetrisch, also habe ich sie unten eingebaut.
Waste |
|
|
|
 |
Andun
Roboter Genie


Anmeldungsdatum: 04.04.2005
Beiträge: 855
Wohnort: Hamburg Alter: 22

|
Super waste!!!
Herzlichen Dank!
Jetzt muss ich nur noch umlöten.
So long
Andun |
_________________ www.subms.de
Aktuell: Flaschcraft Funkboard - Informationssammlung |
|
|
 |
JeanLuc
Öfters hier


Anmeldungsdatum: 12.07.2005
Beiträge: 12
Alter: 25

|
Ich werde mich auch mal ans umlöten machen. Muss mir nur noch das Blech schneiden, und dass kann bei mir länger dauern  |
|
|
|
 |
Andun
Roboter Genie


Anmeldungsdatum: 04.04.2005
Beiträge: 855
Wohnort: Hamburg Alter: 22

|
Ja. Ich muss auch erstmal Teile beschaffen. |
_________________ www.subms.de
Aktuell: Flaschcraft Funkboard - Informationssammlung |
|
|
 |
toby83
Neu hier


Anmeldungsdatum: 25.07.2005
Beiträge: 4
|
Hi! Coole Idee. Ich bekomme meinen asuro erst noch diese woche und bin somit am überlegen das gleich so zu bauen.
Nun meine Frage: Wie kann ich den IC2 noch für die serielle Schnittstelle nutzen (wie oben beschrieben) wenn ich ihn ausgelötet hab und für die Abstandserkennung nutze? |
|
|
|
 |
JeanLuc
Öfters hier


Anmeldungsdatum: 12.07.2005
Beiträge: 12
Alter: 25

|
Du änderst nichts an der Schaltung, sie bleibt wie sie ist. Du baust nur den IC2 und die IR LED an eine anderen Stelle.
Wenn du den Asuro programmierst ist also noch alles wie sonst, nur dass die Bauteile nach vorne zeigen. Die Abstandserkennung wird erst im Programm aktiviert |
|
|
|
 |
toby83
Neu hier


Anmeldungsdatum: 25.07.2005
Beiträge: 4
|
Na aber der IC2 ist doch auf dem Infarot Transceiver eingelötet und die IR LED auf der Hauptplatine des Asuro. Das sind doch zwei getrennte Bauteile!?
Und nun löte ich den IC2 auch auf die Hauptplatine. Nun is doch der Transceiver ohne IC2 und hat keine verbindung zur Hauptplatine oder?
Sorry wenn ich das jetz falschsehe aber ich hab den asuro noch nich und berufe mich nur auf die Erkenntnisse aus der Anleitungs pdf.
Oh ich glaub ich habs jetz gesehen! Die teile sind zweimal vorhanden auf dem Tranceiver und auf der Hauptplatine stimmts? Sorry! |
|
|
|
 |
Andun
Roboter Genie


Anmeldungsdatum: 04.04.2005
Beiträge: 855
Wohnort: Hamburg Alter: 22

|
Hä? Ich glaub du verwechselst da was.
Du machst einfach nur den IR Sender und Empfänger(IC2) an Kabel und richtest sie anders aus. Das ist schon alles. Im Programm kann man damit dann halt auch was machen. |
_________________ www.subms.de
Aktuell: Flaschcraft Funkboard - Informationssammlung |
|
|
 |
izaseba

Anmeldungsdatum: 08.05.2005
Beiträge: 2348
Wohnort: Issum Alter: 38

|
hallo toby,
was hat da keine Verbindung zu Hauptplatine ?
Wenn Du Dir das Foto von Waste anschaust hat er wohl ein paar Drähte richtung Platine eingelötet oder?
Es ist wohl Wurst, od die 2 Bauteile direkt auf der Platine eingelötet sind, oder über ein paar Drähte verbunden sind.
P.S. Ich habe es gerade umgebaut und es klappt prima!
Ob Waste eine "Asuroumbauwelle" damit ausgelöst hat?
Gruß Sebastian
EDIT: Andun war etwas schneller... |
|
|
|
 |
toby83
Neu hier


Anmeldungsdatum: 25.07.2005
Beiträge: 4
|
| toby83 hat folgendes geschrieben:: |
Oh ich glaub ich habs jetz gesehen! Die teile sind zweimal vorhanden auf dem Tranceiver und auf der Hauptplatine stimmts? Sorry! |
Ja ich hab da was verwechselt!  |
|
|
|
 |
izaseba

Anmeldungsdatum: 08.05.2005
Beiträge: 2348
Wohnort: Issum Alter: 38

|
Du brauchst Dich nicht zu entschuldigen, jeder darf sich mal irren, Aber was ist da zweimal vorhanden?
Es gibt da kein Bauteil mehr, und kein weniger
Gruß Sebastian |
|
|
|
 |
toby83
Neu hier


Anmeldungsdatum: 25.07.2005
Beiträge: 4
|
Danke! Na doch. Den IC2 sowie die IR LED gibt es doch jeweils auf der Hauptplatine sowie auf dem Tranceiver.
Ich habe eben fälschlicherweise gedacht die Bauteile gäbe es nur auf dem Tranceiver.
Ich hoffe der Science Shop liefert bald, ich will auch endlich basteln.  |
|
|
|
 |
JeanLuc
Öfters hier


Anmeldungsdatum: 12.07.2005
Beiträge: 12
Alter: 25

|
bei mir haben die in 4 Tagen geliefert, kannst also bald anfangen |
|
|
|
 |
Archi
Fleißiges Mitglied


Anmeldungsdatum: 02.12.2004
Beiträge: 198
Wohnort: München Alter: 36

|
Hallo Waste!
Ist ja eine saugeile Idee! Wenn mir das vor zwei Jahren eingefallen wäre, hätte ich's gleich mit eingebaut!
CU, Robin |
|
|
|
 |
waste
Roboter Experte



|
Hallo Robin,
falls es mal ein Upgrade oder eine neue Variante vom Asuro gibt, kannst es ja einbauen. Meinen Segen dazu hast.
Gruss Waste |
|
|
|
 |
payce
Stammmitglied


Anmeldungsdatum: 19.07.2005
Beiträge: 53
Wohnort: Nürnberg Alter: 30

|
Ich hab zwar meinen Asuro noch nich (ist erst letzte Woche bestellt worden), aber das hier bau ich gleich von Anfang an mit rein! Ist ein absolut super Mod!!! Hammergute Idee, danke auch von meiner Seite aus für die genial einfache Lösung!
Werd auch mal versuchen, mit kleinen Reflektoren um den Sender und Empfänger herum die Empfindlichkeit nochmal zu steigern (und damit türlich das "geradeaus" gucken).
Cooool! Dankööö!  |
|
|
|
 |
julien
Stammmitglied


Anmeldungsdatum: 18.03.2005
Beiträge: 81
Wohnort: Mecklenburg Vorpommern / Hamburg Alter: 21

|
Hallo! Ich finde die Idee mit der IR-Hinderneserkennung wirklich sehr gut, daher habe ich es auch meinem Asuro damit umgebaut. Nun habe ich ein Programm geschrieben (im Anhang), wo Asuro Hindernissen ausweicht (außer schwarze Hindernisse).
Also, wenn er ein Hindernis entdeckt, guckt er, in welcher Richtung er diese am Besten umfahren könnte und somit sucht er sich den Weg (z.B. durch die Wohnung) alleine. Wenn sich keine Hindernisse im Weg befinden, fährt er geradeaus. Wenn ihr noch verbesserungen habt, würde ich mich freuen, diese zu posten.
MfG julien |
|
|
|
 |
pebisoft User gesperrt!
Robotik Einstein


Anmeldungsdatum: 20.06.2004
Beiträge: 1971

|
einfacher ist ein is471f. braucht weniger ressourcen vom avr. und ist einfacher zu steuern bzw zu regeln. auch für den anfänger in winavr-c ist er besser zu proggen. die asuro-grundprogramme haben langsam dimensionen, wo der speicher fast am überlaufen ist und an übersichtlichkeit zu wünschen übrig lassen. der anfänger hat es sehr sehr schwer.
mfg pebisoft |
|
|
|
 |
waste
Roboter Experte



|
Lieber Pebisoft,
Du machst mich mal wieder neugierig, wieso der IS471 weniger Ressourcen in dieser Anwendung verbraucht. Kannst Du mir das anhand eines Beispielcodes erklären?
Gruß Waste |
|
|
|
 |
|
|
|
|