Bygga en Arduino baserade termisk scanner (4 / 6 steg)
Steg 4: Programvara - Arduino portion
Okej! Nu när du är klar med hårdvara, låt oss gå vidare till programvaran.Arduinoen används som ett gränssnitt i detta projekt. Det gör servon och IR-sensorn lätt kommunicera med datorn med enkla kommandon.
Detta är en "enkel" operation, finns det några kritiska områden som behöver åtgärdas. En av de frågor som jag stötte på en hel var kommunikation synkroniseras. I grund och botten när mikroprocessorn var redo att läsa kommandot, har datorn inte slutförts skickar den. En enkel lösning på detta är att tilldela en "kommando redo" karaktär. Jag valde ett semikolon som min terminator.
Se till att kommandona som finns i en seriell aspekt som kommer att stoppa datorn från att försöka läsa en temperatur medan IR-sensorn var i rörelse, behöver jag ett svar metod. En lösning att, gemensamma för kommunikation, kallas ack, eller bekräftelse. Låt oss säga att vi kör "p120;" (panorera till 120deg), vi vill att datorn ska vänta på att mikroprocessorn säga "AP120;" (ack pan 120). När ACK tas emot kan programmet fortsätta att hämta en temperatur eller nästa uppsättning kommandon.
En annan komplicerad del läser IR-data från den seriella porten på sensorn. Vi måste göra något som kallas "lite-bang" för att läsa data. Detta innebär att inrätta ett avbrott i utkanten klocka fallande för att läsa lite på data linjen. Varje "burst" som kommer i innehåller ett huvud och vissa data som behöver avkodas.
Läsa PDF-filen för ZyTemp-modulen (http://www.metrisinst.com/item_management/assets/files/TN9_UserManual_009.pdf ) på sidan kan 13 du se datamängd för varje utbrott av data. Istället för att spendera lite tid på detta, beslutat jag att göra en snabb sökning och hittade någon annan redan skrev detta för arduino (de gjorde en exakt kokplatta temperatur styrenhet). Källan dokumenteras i koden för referens och kredit för idéerna.
Allt i all Arduino kod, när sammanställt, tar 7982 byte av utrymme.
Kommandon att veta (alla kommandon måste avslutas med en ';':
p < n >; #pan till < n > deg
t < n >; #tilt till < n > deg
r; #read IR sensor objekt
a; #read IR sensor omgivande temp
använda dessa för att justera skyddszoner (inte tillåter ett pan/tilt kommando att arbeta om out of bounds - några servon kommer att tugga dem selfs upp om de försöker gå längre än max)
u < n >; #set övre servo gränsen (skydd) standard är 145 deg
l < n >; # Ställ in lägre servo gränsen (skydd) standard är 35 grader