Inhoudsopgave:
- Stap 1: Bronnen
- Stap 2: Begrijpen hoe infrarooddetectie werkt (optioneel)
- Stap 3: IR-LED's monteren
- Stap 4: Infraroodparen testen - Circuit
- Stap 5: Infraroodparen testen - Basiscode
- Stap 6: Infraroodparen testen - hardware + software
- Stap 7: Problemen oplossen (voor problemen met de laatste stap)
- Stap 8: Tweede IR-paar
- Stap 9: Infraroodinterferentie detecteren (optioneel)
- Stap 10: Meer IR-paren toevoegen
- Stap 11: Vijf IR-paren - Circuit
- Stap 12: Vijf IR-paren - Code
Video: Boe-Bot met infrarooddetectoren - Ajarnpa
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
Deze instructable laat zien hoe je een Boe-Bot bouwt en codeert die door een doolhof kan navigeren met behulp van infrarooddetectoren om obstakels te vermijden. Dit is een gemakkelijk te volgen handleiding waarmee u gemakkelijk aanpassingen kunt doen om aan uw behoeften te voldoen. Dit vereist een basiskennis van circuits en programmeren. Voor dit project heb je BASIC Stamp IDE software nodig. Gratis te downloaden hier. Evenals de Boe-Bot-robot
Stap 1: Bronnen
Elektronische componenten
Boe-Bot met aansluitkabel Parallax Store - BoeBot Kit
5 Infrarood LED's Parallax Store - Montageset IR-zender
5 infraroodafschermingen
5 infrarooddetectoren Parallax Store - BoeBot IR-ontvanger
Weerstanden
- (2) 4,7 kΩ ABRA Electronics - 4,7 kΩ
- (5) 220 Ω ABRA Electronics - 220 Ω
- (2) 1 kΩ ABRA Elektronica - 1 kΩ
- (5) 2 k ABRA-elektronica - 2 kΩ
Diverse bedrading ABRA Electronics - 22 gauge draad
3 LED's ABRA Electronics - 5mm Rode LED
Steun
Computer
BASIC Stamp Editor - (gratis)
Gereedschap
Draadknipper ABRA Electronics - Draadknipper (optioneel)
Draadstripper ABRA Electronics - Draadstripper
Diversen
Muren (om doolhof te bouwen)
Stap 2: Begrijpen hoe infrarooddetectie werkt (optioneel)
Infrarood Koplampen
Het infrarood-objectdetectiesysteem dat we op de Boe-Bot zullen bouwen, lijkt in meerdere opzichten op de koplampen van een auto. Wanneer het licht van de koplampen van een auto op obstakels weerkaatst, detecteren je ogen de obstakels en verwerken je hersenen ze en laat je lichaam de auto dienovereenkomstig sturen. De Boe-Bot zal infrarood LED's gebruiken voor koplampen. Ze zenden infrarood uit en in sommige gevallen reflecteert het infrarood op objecten en kaatst het terug in de richting van de Boe-Bot. De ogen van de Boe-Bot zijn de infrarood detectoren. De infrarooddetectoren zenden signalen uit die aangeven of ze infrarood detecteren dat door een object wordt gereflecteerd. Het brein van de Boe-Bot, de BASIC Stamp, neemt beslissingen en stuurt de servomotoren aan op basis van deze sensor input. Afbeelding 7-1 Objectdetectie met IR-koplampen De IR-detectoren hebben ingebouwde optische filters die heel weinig licht doorlaten, behalve het 980 nm-infrarood dat we willen detecteren met de interne fotodiodesensor. De infrarooddetector heeft ook een elektronisch filter dat alleen signalen rond 38,5 kHz doorlaat. Met andere woorden, de detector zoekt alleen naar infrarood dat 38.500 keer per seconde aan en uit knippert. Dit voorkomt IR-interferentie van veelvoorkomende bronnen zoals zonlicht en binnenverlichting. Zonlicht is gelijkstroominterferentie (0 Hz) en binnenverlichting heeft de neiging om aan en uit te flitsen bij 100 of 120 Hz, afhankelijk van de hoofdstroombron in de regio. Aangezien 120 Hz buiten de 38,5 kHz-banddoorlaatfrequentie van het elektronische filter ligt, wordt het volledig genegeerd door de IR-detectoren.
- Paralax Studentengids
Stap 3: IR-LED's monteren
Steek de IR LED in het grootste deel van de behuizing
Omsluit het doorzichtige deel van de LED met het kleinere deel van de behuizing
Stap 4: Infraroodparen testen - Circuit
Voordat we ergens te diep op ingaan, zullen we testen of het IR-paar werkt (één infrarood-LED en één infrarooddetector).
Begin met het bouwen van het bovenstaande circuit op het breadboard dat bovenop je Boe-Bot. is gemonteerd
Stap 5: Infraroodparen testen - Basiscode
Natuurlijk moeten we code schrijven om onze IR-paren te laten werken
Om dit te doen, zal het de opdracht FREQOUT gebruiken. Deze opdracht is ontworpen voor audiotonen, maar kan worden gebruikt om frequenties in het infraroodbereik te produceren. Voor deze test gebruiken we het commando:
FREQOUT 8, 1, 38500
hierdoor wordt een frequentie van 38,5 kHz die 1 ms duurt naar P8 gestuurd. Het infrarood LED-circuit dat op P8 is aangesloten, zendt deze frequentie uit. Als het infrarood licht wordt teruggekaatst naar de Boe-Bot door een object in zijn pad, zal de infrarood detector de BASIC Stamp een signaal sturen om hem te laten weten dat het gereflecteerde infrarood licht is gedetecteerd.
De sleutel om een IR-paar te laten werken, is om 1 ms van 38,5 kHz FREQOUT te verzenden en de uitvoer van de IR-detector onmiddellijk op te slaan in een variabele.
Dit voorbeeld toont het opslaan van de IR-detectorwaarde in een bitvariabele met de naam irDectectLeft
FREQOUT 8, 1, 38500
irDetectLeft = IN9
De uitgangsstatus van de IR-detector wanneer hij geen IR-signaal ziet, is hoog. Wanneer de IR-detector de 38500 Hz harmonische gereflecteerd door een object ziet, is de output laag. De output van de IR-detector blijft slechts een fractie van een milliseconde laag nadat het FREQOUT-commando klaar is met het verzenden van de harmonische, dus het is essentieel om de output van de IR-detector op te slaan in een variabele onmiddellijk na het verzenden van het FREQOUT-commando. De waarde die door de variabele is opgeslagen, kan vervolgens worden weergegeven in de Debug Terminal of worden gebruikt voor navigatiebeslissingen door de Boe-Bot.
Stap 6: Infraroodparen testen - hardware + software
Nu u de basis kent, kunnen we de hardware en software samenvoegen om een paar samen te testen en realtime feedback te krijgen van wat het IR-paar detecteert
Je kunt proberen de code zelf te maken, of de onderstaande code gebruiken
' {$STAMP BS2}
' {$PBASIC 2.5} irDetectLeft VAR Bit DO FREQOUT 8, 1, 38500 irDetectLeft = IN9 DEBUG HOME, "irDetectLeft = ", BIN1 irDetectLeft PAUZE 100 LUS
- Laat de Boe-Bot aangesloten op de seriële kabel, want u gaat de DEBUG-terminal gebruiken om uw IR-paar te testen.
- Plaats een object, zoals uw hand of een vel papier, ongeveer 2,5 cm van het linker IR-paar
- Controleer of wanneer u een object voor het IR-paar plaatst, de Debug Terminal een 0 weergeeft, en wanneer u het object voor het IR-paar verwijdert, wordt er een 1. weergegeven.
- Als de Debug Terminal niet de verwachte waarden weergeeft, probeer dan de stappen in de stap voor het oplossen van problemen.
Stap 7: Problemen oplossen (voor problemen met de laatste stap)
DEBUG Terminal met onverwachte waarden
Controleer het circuit op kortsluiting, verkeerd geplaatste of ontbrekende connectoren, beschadigde componenten, onjuiste weerstanden of enig ander zichtbaar probleem
Controleer het programma op logische of syntaxisfouten - Als je je eigen code hebt gebruikt voor de laatste stap, overweeg dan om de meegeleverde code te gebruiken
Altijd 0 krijgen, zelfs als er geen objecten voor de Boe-Bot. worden geplaatst
Controleer of er objecten in de buurt zijn die het infraroodsignaal reflecteren. De tafel voor de Boe-Bot zou de oorzaak kunnen zijn. Verplaats de Boe-Bot naar een open ruimte, zodat de IR-led en detector niet kunnen reflecteren op een object in de buurt.
Lezen is meestal 1 wanneer er geen object voor de Boe-Bot is, maar flikkert af en toe naar 0
Er kan interferentie zijn van fluorescerend licht in de buurt; Schakel alle tl-lampen in de buurt uit en herhaal uw tests. Als het probleem aanhoudt, kan stap 9 het probleem aan het licht brengen
Stap 8: Tweede IR-paar
Nu je het programma voor de linker IR hebt, is het jouw beurt om het circuit te maken en het juiste IR-paar te programmeren
- Wijzig de DEBUG-instructie, titel en opmerkingen om naar het juiste IR-paar te verwijzen.
- Wijzig de naam van de variabele van irDetectLeft in irDetectRight. Dit moet je op vier plaatsen in het programma doen.
- Wijzig het Pin-argument van het FREQOUT-commando van 8 in 2.
- Wijzig het invoerregister dat wordt bewaakt door de irDetectRight-variabele van IN9 in IN0.
- Herhaal de teststappen in deze activiteit voor het juiste IR-paar; met het IR LED-circuit aangesloten op P2 en de detector aangesloten op P0.
Stap 9: Infraroodinterferentie detecteren (optioneel)
Of u nu problemen ondervindt met het detecteren van signalen die niet zouden moeten worden gedetecteerd of u van plan bent uw IR-detectie op een alternatieve locatie te demonstreren, u wilt misschien testen op interferentie.
Het concept van dit testprogramma is vrij eenvoudig, je detecteert infraroodsignalen zonder er iets uit te zenden.
U kunt exact hetzelfde circuit gebruiken, maar u zult de code moeten wijzigen. je kunt ervoor kiezen om je eigen code te schrijven, maar je kunt de onderstaande code gebruiken:
' {$STAMP BS2}
' {$PBASIC 2.5} irDetectLeft VAR Bit DO irDetectLeft = IN9 irDetectRight = IN0 IF IN9 = 0 OF IN0 = 0 DAN DEBUG "Interferentie gedetecteerd" PAUZE 100 LUS
Als u toch interferentie ervaart, bepaal dan de waarschijnlijke bron en schakel deze uit/verwijder deze of verplaats de locatie waar u uw Boe-Bot gebruikt.
Stap 10: Meer IR-paren toevoegen
Als u meer nauwkeurigheid wilt in de beweging van uw Boe-Bot, wilt u misschien meer IR-paren toevoegen. 3 Verbetert de prestaties aanzienlijk in vergelijking met twee; u kunt een middenpaar gebruiken om naar een direct obstakel te scannen en twee zij-IR's gebruiken om te bepalen hoeveel u moet draaien. Het nadeel van het 3 IR-paarontwerp is echter dat u misschien weet wanneer u tegen een muur schuift, omdat het middelste IR-paar wordt gebruikt om obstakels te detecteren. Om dit probleem op te lossen, kunt u aan elke kant een IR-paar toevoegen met een hoge weerstandswaarde. Daarom wordt het infraroodsignaal alleen gedetecteerd als de Boe-Bot zich in een kleine hoek dicht bij de zijkant of een muur bevindt.
Stap 11: Vijf IR-paren - Circuit
Wees voorzichtig bij het richten van de twee IR-LED's aan de zijkant, want als u ze draait, kunnen de draden elkaar raken en kan er kortsluiting ontstaan.
Stap 12: Vijf IR-paren - Code
U kunt proberen uw Boe-Bot te programmeren voordat u deze code gebruikt:
' {$STAMP BS2}' {$PBASIC 2.5} 'Vijf IR Pair Deatection Code 'Matthew Shaw' 8 mei 2019 (Versie 7) 'Detectie voor objecten en elementaire logische verwerking om doolhoven op te lossen
irDetectLeft VAR Bit 'Variabele voor links'
irDetectCentre VAR Bit 'Variabele voor midden irDetectRight VAR Bit' Variabele voor rechter irDetectLSide VAR Bit 'Variabele voor linkerkant irDetectRSide VAR Bit 'Variabele voor rechterkant irDetectLSideFar VAR Bit 'Variabele voor linkerkant lage weerstand irDetectRSideFar VAR Bit 'Variabele voor rechterkant lage weerstand
mLoop VAR-woord
Lmotor PIN 15 'De linker motor is aangesloten op pin 14, pulsen gaan hier door
Rmotor PIN 14' rechts = 15
'snelheden zijn -> 650-750-850
LFast CON 850 'Constant voor linkermotor op volle snelheid RFast CON 650 'Constante voor rechtermotor op volle snelheid
LStop CON 750 'Constant voor linker motor op volle toeren'
RStop CON 650 'Constant voor rechter motor op volle toeren'
LMid CON 830 'Constant voor linkermotor bij middelhoge snelheid'
RMid CON 700 'Constant voor rechter motor bij middelhoge snelheid'
LSlow CON 770 'Constant voor linker motor bij minimum toerental
RSlow CON 730 'Constant voor rechter motor bij minimum toerental
LRev CON 650 'Constant voor linkermotor op volle snelheid in achteruit
RRev CON 850 'Constant voor linker motor op volle snelheid in achteruit
FREQOUT 7, 1, 38500 'links'
irDetectLeft = IN8
FREQOUT 6, 1, 38500 'centrum'
irDetectCentre = IN5
FREQOUT 3, 1, 38500 'rechts'
irDetectRight = IN2
FREQOUT 10, 1, 38500 'Links Sluiten'
irDetectLSide = IN11
FREQOUT 1, 1, 38500 'rechts Sluiten
irDetectRSide = IN0
FREQOUT 9, 1, 38500
irDetectLSideFar = IN11
FREQOUT 4, 1, 38500 'rechts'
irDetectRSideFar = IN0
IF irDetectLSide = 0 EN irDetectRSide = 0 DAN hoofd 'STARTCOMMANDO' zwaai met uw handen langs de twee zijdetectoren om het programma te starten
Hoofd:
PAUZE 1000 DO
PULSOUT Lmotor, LFast 'linkermotor draait op volle toeren'
PULSOUT Rmotor, RFast 'Rechtermotor draait op volle toeren'
FREQOUT 6, 1, 38500 'centrum'
irDetectCentre = IN5
FREQOUT 10, 1, 38500 'Links Sluiten'
irDetectLSide = IN11
FREQOUT 1, 1, 38500 'rechts'
irDetectRSide = IN0
ALS irDetectLSide = 0 EN irDetectRSide = 1 DAN
DO PULSOUT Lmotor, LFast
FREQOUT 6, 1, 38500 'centrum'
irDetectCentre = IN5 IF irDetectCentre = 0 DAN cent
FREQOUT 10, 1, 38500 'Links Sluiten'
irDetectLSide = IN11
FREQOUT 3, 1, 38500 'rechts'
irDetectRight = IN2
LUS TOT irDetectLSide = 1 OF irDetectRSide = 0
ELSEIF irDetectLSide = 1 EN irDetectRSide = 0 DAN
DO PULSOUT Rmotor, RFast
FREQOUT 6, 1, 38500 'centrum'
irDetectCentre = IN5 IF irDetectCentre = 0 DAN cent
FREQOUT 10, 1, 38500 'Links Sluiten'
irDetectLSide = IN11
FREQOUT 3, 1, 38500 'rechts'
irDetectRight = IN2
LUS TOT irDetectLSide = 0 OF irDetectRSide = 1
'STOP ALS
IF irDetectCentre = 0 DAN 'START'
FREQOUT 7, 1, 38500 'links irDetectLeft = IN8
FREQOUT 6, 1, 38500 'centrum'
irDetectCentre = IN5
FREQOUT 3, 1, 38500
irDetectRight = IN2
PAUZE 1000 'pauze om gedetecteerd signaal weer te geven'
IF (irDetectLeft = 1 AND irDetectRight = 0) DAN ' evalueer de duur
GOSUB draai naar links
ELSEIF (irDetectLeft = 0 EN irDetectRight = 1) DAN
GOSUB draaiRechts
ELSEIF (irDetectLeft = 1 EN irDetectRight = 1) DAN
GOSUB turnDecide
ANDERS
GOSUB draaiReverse
STOP ALS
ENDIF 'END
LUS
EINDE
sla linksaf:
DO PULSOUT Lmotor, LRev FREQOUT 8, 1, 38500 irDetectLeft = IN9 FREQOUT 5, 1, 38500 irDetectCentre = IN4 FREQOUT 2, 1, 38500 irDetectRight = IN0 LOOP TOT IN0 = 1 RETURN
rechtsaf:
DO PULSOUT Rmotor, RRev FREQOUT 8, 1, 38500 irDetectLeft = IN9 FREQOUT 5, 1, 38500 irDetectCentre = IN4 FREQOUT 2, 1, 38500 irDetectRight = IN0 LOOP TOT IN9 = 1
OPBRENGST
draai achteruit:
VOOR mLoop = 0 TOT 50 PULSOUT Rmotor, RRev PULSOUT Lmotor, LRev PAUSE 20 PULSOUT Lmotor, LRev PAUSE 20 VOLGENDE DO PULSOUT Rmotor, RRev FREQOUT 8, 1, 38500 irDetectLeft = IN9 FREQOUT 5, 1, 38500 irDetectCentre = IN4 FREQOUT 2, 1, 38500 irDetectRight = IN0 LOOP TOT IN9 = 1
OPBRENGST
turnDecide: 'gebruikt lagere weerstand om verder te kijken'
FREQOUT 9, 1, 38500
irDetectLSideFar = IN11
FREQOUT 4, 1, 38500 'rechts'
irDetectRSideFar = IN0
IF (irDetectLSideFar = 1 AND irDetectRSideFar = 0) DAN ' evalueer de duur
GOSUB draai naar links
ELSEIF (irDetectLSideFar = 0 EN irDetectRSideFar = 1) DAN
GOSUB draaiRechts
ELSEIF (irDetectLSideFar = 1 EN irDetectRSideFar = 1) DAN
GOSUB draai naar links
ANDERS
GOSUB draaiReverse
STOP ALS
OPBRENGST