Talar till ultraljud avstånd Sensor HC-SR04 med hjälp av en ATtiny84
Detta instructable handlar om samverkar en ATtiny84 med HC-SR04 ultraljud avstånd sensor använder bara C kod – ingen Arduino hårdvara eller bibliotek.
HC-SR04 fungerar enligt följande:
-Skicka en 10us hög puls på Trigger stift.
-Sensorn skickar ut en "sonic explosion" av 8 gånger.
-Lyssna till Echo stift och varaktigheten av nästa hög signal ger dig den tid för ljudet att gå fram och tillbaka från sensorn till målet.
Här, används PB0 PIN-koden för att skicka ut 10 puls. För att mäta bredden på echo pulsen, kan vi använda en pin-ändra avbryta och en timer. Här är tanken:
-Setup pin change interrupt PCINT0 så att varje logisk ändring på stift kommer att orsaka ett avbrott.
-Skicka en 10 US pulse trigger nålen.
-Loop tills PCINT0 avbrottet sätter en flagga som anger att mätningen görs.
-I PCINT0 avbrottet, starta en 8-bitars timer när du ser en stigande kanten – dvs., echo pulsen har gått från låg till hög. 8-bitars timern är inställd för att använda overflow avbrottet.
-Den 8-bitars räknaren flödar över varje gång den når 255, och så när att avbryta bränder, vi lägger 255 till en löpande 32-bitars räknare-värdet.
-I PCINT0 avbrottet, stoppa 8-bitars timer när du ser en fallande kant-dvs., echo pulsen har gått från hög till låg. Uppdatera 32 bitars räknare och ange flagga som anger att mätningen görs.
-Uppmätta pulse bredd är en counter värde, och vi kan konvertera det till sekunder, eftersom vi vet klockhastighet. Detta värde används sedan för att beräkna avståndet.
Avståndet skickas sedan med seriell kommunikation på pin PB1 – jag har täckt denna del i en separat artikel. Detta är också anledningen till vi inte kan använda 16-bitars timern för att mäta puls bredd – det används redan för seriell kommunikation. Plus det är kul att lära sig använda 8-bitars timern för att räkna stora värden, rätt? ;-)
Bilder för Schematisk och skärbräda layout är kopplade.
Detta är Makefile som går längs med ovanstående kod:
https://GIST.GitHub.com/electronut/5763929
Och här är Python kod används för att rita data:
https://GIST.GitHub.com/electronut/5730160
Python-koden är en mindre ändring i vad jag skrivit innan i ämnet.