Göra en hög höjd ballong Tracker (Arduino) (5 / 8 steg)
Steg 5: Skapa en skiss
Skiss:
Min fullständiga skiss finns i zip-filen i nästa steg, men det är bra att ha en uppfattning om den övergripande planen att göra det lättare att anpassa.
Avbrott:
Vi måste driva radion nämner pin D5 hög/låg med en hastighet av 50 baud. Det vill säga varje 20ms behöver vi representerar en ny bit av data som en hög eller låg för en 1 eller 0 respektive. Vi använder här dataströmmen för att koda en textsträng. Det finns olika metoder för detta, men 7-bitars ASCII är vanligast. Vi ska hålla en dubbel-buffert som innehåller strängen för överföring och en kopia som vi förbereder med uppdaterade uppgifter.
För att få de mest effektiv och pålitlig överföring och särskilt att ge oss exakt timing, vi skickar strängen under avbrott. Detta kräver en kort och snabb bit kod helt enkelt att hålla reda på vilken del som byte av strängen vi är för närvarande sänder och gå vidare till nästa lite varje gång. När vi avslutar en sträng växla vi sträng buffertar, flytta över att skicka de mest aktuella data från andra bufferten.
Huvudloop:
I de viktigaste loop cirkulera vi, läsa alla sensorer och GPS när de är redo. De senaste värdena lagras i variabler. När GPS är redo att ge en ny plats, läste att vi, avkoda det och uppdatera arbetskopia av strängen. Vi måste stänga av avbrott kort för att uppdatera buffert så att vi inte hamnar sänder en halv-konstruerade sträng. Som ett resultat, uppdaterar vi bufferten endast när en ny GPS-plats är redo, så att vi slipper avbrott alltför länge.
Varje gång vi växla buffertar vi ange en flagga som berättar huvudloop att startas en ny växellåda. Gamla strängen som skickades bara sedan skrivs till SD-kortet innan du öppnar bufferten upp till att vara uppdaterad.
Vi måste också hålla ett öga på GPS så att det stannar i offline-läge. Anledningen till att vi använda en Ublox GPS-modulen är att den fungerar upp till de höjder som vi kommer att besöka - många GPSs inte ligga högre än ca 14 km. För att göra Ublox arbete på hög höjd, måste vi se till att det är i rätt läge.
Sensorer & portar:
Styrelsen kan prata med GPS-modulen I2C eller UART. Jag har valt att använda gränssnittet I2C så att jag kan använda UART för felsökning genom att koppla till den seriella porten för PC. Vi kommer också att använda I2C för att prata med Honeywell trycksensor, men två verkar samexistera på I2C linjer utan konflikt.
Styrelsen kommer att ta två DS18B20 temperaturgivare. Jag använde ett internt och ett externt. Dessa är mycket känsliga för timing och jag behövde för att inaktivera avbrott för några mikrosekunder medan du läser dem. De är annars mycket lätt att använda. Jag använde en kopia av tråd biblioteket som påstod sig ha färre hangups än infödda Arduino en. Sant eller inte, arbetat den böter.
SD-kortet sitter på SPI stiften och hanteras av SDfat biblioteket. SD-kort skriva tar en massa minne och en av de verkliga knepen till denna skiss var försöker övervaka hur mycket gratis SRAM var tillgänglig.