Ultrasonic hinder att undvika Robot (12 / 16 steg)
Steg 12: Kontroll och problem av modulen Jonas_soderberg-04
Pinut
GND - ostridigt
Detta stift ansluter till marken netto av schematiskt
VCC - power järnväg
Detta stift måste knytas till linjen makt i vår krets, som - i mitt fall ges av 5V buck converter.
TRIG - trigger pin
Användaren har att ge en mikrosekund länge impuls om detta stift, sedan vänta på ekot att anlända på echo PIN-koden. Observera att echo är hög i de första tiotals millisekunder, se till att du vänta så vid initiering. Detta stift åberopas, då programmet ska vänta en stigande kant och starta en timer, TMR1. WASTE_10_US(); är ett makro jag skrev, det består av tillräckligt "NOP" monteringsanvisningar som avfall en sammanlagd tid av 10 mikrosekunder. Räkna stoppas när echo pulsen går lågt igen. Från nummer i registret över counter vet vi den tid som behövs för att ljudet ska komma tillbaka från ett eventuellt hinder. Vi vet att ljudets hastighet - kan vi beräkna avståndet!
ECHO - echo pin
Detta stift används för att upptäcka de reflekterade ljudvågorna. Jag anslutit den till ett stift som har avbrott, bara i fall - men det används i enkla ingångsläge. En stigande kanten slutar tidigare nämnda räknaren, och sparar den i en variabel, som blir bearbetade strax efter.
Ett litet trick för att underlätta den PIC-s
Tidpunkten för pulserar visas i databladet för denna modul. Som tidigare nämnts, måste du vänta ut första ~ 100 ms, sedan ge 10 mikrosekund trigger pulser på TRIG PIN-koden. Sådan knuff resulterar i en 8 cykel burst kommer från sändaren "talare". Vi måste vänta på ett eko framöver. Eko är tillfångatagen av mottagaren, och omvandlas till en impuls av variabel längd på ECHO stift. Längden på denna echo impuls är direkt proportionell med avståndet till hindret. Databladet ger en enkel formel för att räkna ut detta:
avståndet [cm] = t mätt [mikrosekunder] / 58
då återgår avståndet i centimeter. Jag delar bara med 5.8, så avståndet får returneras i millimeter. Eftersom jag inte nödvändigtvis behöver extremt precisa avläsningar, kommer att jag lägga en liten twist här. Jag vill bara undvika hinder, jag bryr mig inte hur långt de är, så det finns ingen användning av beräkna avståndet i dubbel variabeltyper. Denna typ av uträkningar ta lång tid, vilket i detta fall är helt onödigt. Så låt oss förenkla beräkningarna lite. Vi vet att den mottagna impulsen längd i mikrosekunder behövs för att räkna ut avståndet. Vår bas är dock inte en mycket rund en, 83,33 [ns]. Så, istället för att ta TMR1 greven, multiplikation med tiden till få längden i mikrosekunder, sedan dividera det med 5,8 att få avståndet i millimeter, vi kommer att göra något enklare och dummare. Låt oss upprätta vad en enda TMR1 räkning betyder i millimeter:
1 count = 83,33 [ns] = 0.08333 [us], som, dividerat med 5,8 resultat i 0.014 [mm] för varje TMR1 [antal]
Med detta sagt kan vi skriva följande:
1 [count] .......................... 0.014 [mm]
x [antal] y [mm]
och fortsätta att skriva formeln nedan:
y [mm] = (x * 0.014) / 1 = x * 0.014 = x / 71.42
Så vi vet att vi kan få avståndet till ett hinder genom att dividera TMR1 räkna med 71.42. Detta är dock fortfarande en precision kalkyl som tar lång tid, så vi tar en titt och inser att detta inte är så långt från 64, en trevlig "runda" antal. Dividera med en 2 i programvara är mycket lätt, kan göras via skiftande just sex gånger. Byte skiftande är en native instruktion av bilden, och det är mycket mycket snabb i jämförelse med en dubbel division. Så, låt oss runda 71.42 till 64 och bara Skift TMR1 lämnade 6 gånger för att få en idé på hur nära ett hinder är!
Låt oss se skillnaden detta trick ger vid en 8000 (till exempel) räknas:
original: 8000 / 71.42 = 112 [mm]
knepig: 8000 / 64 = (8000 >> 6) = 125 [mm]
Så är felet cirka 10%, inte mycket jämfört med den enorma mängden tid som vi bara sparas!
Problem
Jag har inte slog några problem under arbetet med denna modul, en sak som hände var att kabeln mellan PIC och ECHO stift lämnades bortkopplad, och PIC väntade oändligt på kanterna på det klämmer fast. Detta var lätt att fånga, eftersom den röda lysdioden som växlar vid varje sekund stoppade. Jag visste genast att programmet frös, och ett ställe det kan frysa är denna väntan för edge rutin. Problemet löst efter en minut!
En sak till: dessa saker fungerar med 5 [V], så har bara 4,8 [V] full kostnad innebär, att vi är stretching det för långt. Om spänningen är inte tillräckligt för att fånga eko, kommer att MCU hänga, väntar på EKOT att komma fram!