Galileo ramper: utforska hastighet och acceleration med marmor och lutande plan (10 / 10 steg)
Steg 10: Interupts
Förslag från rfmdelgado kan du också använda avbrott på arduino digital stift för att registrera tiden marmor passerar varje gate. Detta kräver lite externa kretsar för att kunna arbeta med justerbar tröskeln värden behöver för varje Gate.
Det första vi behöver är en spänning komparator som kan jämföra två inspänningar och utspänning en hög eller låg som en är högsta. Jag har inte ett specialbyggt spänning komparator chip men det är möjlighet att använda en op-förstärkare med ingen återkoppling istället. Jag följde instruktionerna från Spänning komparator Information och kretsar för att använda en LM358 dual op-förstärkare. Arduino ingång impedans är så hög, i 10MΩ, föreslog sin fina direkt ansluta op-förstärkaren utgång direkt till arduino digital stift utan diod eller transistor som i länken.
En enkel krets skulle bara jämföra utdata från grindarna med spänningen från ett variabelt motstånd används som en spänningsavdelare. Detta skulle kräva manuell justering varje gång utrustning används.
Ett bättre alternativ är att använda PWM utgången från arduino analogWrite() för att ge en justerbar referensspänningen. Ett lågpassfilter, bestående av ett motstånd och en kondensator, krävs att jämna produktionen, jag använde kalkylatorn på RC Low-pass Filter Design för PWM för att välja värden. Ganska stort värderar av 10μF användes för kondensatorn som vi vill i princip få en stadig DC-spänning med minimal rippel spänning. Resistorn jag använde var 2.2kΩ. Det finns en flexibilitet i de värden som används. Filtrera utdata matas in i den icke-invertering (+) ingång av den op-amp input och output från porten ingång matas in Invertera (-) ingång. På en Uno används stift 5 och 6 som dessa har en hög 980 Hz frekvens ger mer spelrum på RC värden.
För koden har vi återigen en ganska en lång utbildning fas. PWM utgången ökas långsamt, vid varje steg den spänning motsvarigheten är läst. Detta kommer inledningsvis att noll och kommer att byta till 1 när PWM utgången överstiger grinden. Värdet när detta händer är kodas. Processen är då omvänd med PWM utgången minskade från Max till noll, värdet där de ingående förändringarna från 1 till 0 registreras. Slutligen tas tröskelvärdet som genomsnittet av stigande och fallande värden plus en fast ökning. Det här värdet skrivs till PWM som används som lång sikt plasttransistorn.
Med ingången kan ange avbrott sedan aktiveras med hjälp av AttachInterrupt. Vi är bara intresserade av den stigande läget när indata går från låg till hög. Stift 2 och 3 som är avbrott 0 och 1 användes på en Uno. Den faktiska avbrottskod är ganska enkel tiden registreras och tidsskillnaden mellan de två gångerna är den totala träningstiden på marmor.
Använda avbrott kunde förbättra resolutionen av tidpunkten kan vara bättre än den ungefär 1ms erhållits från den grundläggande koden. Men det finns stora variationer i försöket, särskilt i den exakta positionen marmorn är släppt så det inte finns alltför mycket att vinna.