Innholdsfortegnelse:
- Trinn 1: Essentials (egentlig ikke)
- Trinn 2: Spenningsdeleren
- Trinn 3: Spenningsdeler
- Trinn 4: Oppsummering
Video: Slik leser du mange brytere med én MCU -pin: 4 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:26
Har du noen gang holdt på med et eller flere prosjekt, og prosjektet fortsetter å vokse og vokse, mens du legger til flere ting (vi kaller det en Feaping Creaturism)? På et nylig prosjekt bygde jeg en frekvensmåler og la til en femfunksjonssignalgenerator/frekvenssynthesizer. Jeg avsluttet snart med flere brytere enn jeg hadde ledige pinner igjen, så hva skal en fyr gjøre?
Imidlertid hadde jeg snart sju brytere til på Funbox (ja, det var det jeg kalte funksjonsgeneratoren min … jeg vet, jeg har ingen kreativitet) og her er en kort instruks som viser deg hvordan du kan gjøre det samme. Det krever ingen skiftregistre eller spesifikke IC -er. Faktisk krever det heller ikke en mikrokontroller, hvis diskrete halvledere er hvordan du ruller. Her er en måte du kan lese/administrere flere brytere ved å bruke en enkelt pinne på AVR -en (eller annen mikrokontroller … Jeg har hørt at det er andre mikrokontrollere i tillegg til AVR -er, men jeg kan ikke forestille meg …).:)
Trinn 1: Essentials (egentlig ikke)
For å oppnå dette trenger du noen få komponenter. Det hjelper å ha et mangfold av brytere som du må administrere. Du trenger også noen motstander og enten en mikrokontroller som har ADC (analog-til-digital konvertering) eller en annen måte du vil indikere at det var en bryter aktivert og hvilken bryter den var.
Hvis du vil, kan du bruke en spenningsstyrt oscillator for å indikere dette, kanskje med noen blinklys, eller alternativt med lyd. I denne artikkelen skal jeg late som om vi bruker en AVR, men i din verden kan du late som det som gjør deg lykkelig. Jeg savner Bob Ross.
Trinn 2: Spenningsdeleren
I hovedsak er måten vi skal gjøre dette på ved å bruke en teknikk og krets som kalles en spenningsdeler. Spenningsdelere deler, som du kanskje har gjettet, V,, in,, spenningen med en verdi du bestemmer. Du kan dele spenningen med flere komponenter, inkludert kondensatorer og induktorer, men her skal jeg gjøre det med den gode motstanden. Ideen Det vi gjør er å sette to komponenter i serie som hver for seg vil føre til et spenningsfall over komponenten. Se på det første bildet hvis jeg ikke gir mening. Det er en potensiell forskjell på 9V fra skinne til skinne. Mellom 9V og 0V er det to motstander i serie. Hver av disse vil oppleve et spenningsfall over seg selv, avhengig av motstanden, som du sannsynligvis husker fra V = IR. Hvis du tar en spenningsmåling mellom de to motstandene, får du en verdi mellom 9V og 0V, avhengig av hvor mye spenning som har falt over den første motstanden og hvor mye som er igjen å falle over den andre motstanden, før 0V. Det er en enkel formel for å beregne spenningsfallet over en motstand i denne situasjonen, og det ser slik ut. La spenningen over motstand 1 (R1) være V1 og spenningen over motstand to (R2) være V2. Siden jeg ikke kan bruke formatering lenger, se på bilde 2 nedenfor for formelen … Så i vår resistive divider kan Vout -spenningen bestemmes av vår formel for V2 (siden vi refererer GND til 0V). Hva har dette å gjøre med at en haug med brytere blir oppdaget fra en pinne? Vel, snu siden, så viser jeg deg!
Trinn 3: Spenningsdeler
Anta nå at vi har alle våre brytere, kanskje seks eller åtte eller seksten, alle koblet via motstander som hver fungerer som en spenningsdeler slik at når tilstanden til bryterpinnen endres, leses spenningen og er basert på spenningsnivået, vi kan vite hvilken bryter som nettopp ble aktivert. Se under. På bildet nedenfor har jeg koblet til to blokker med brytere. Den øverste blokken har to brytere, og den nederste blokken har fem brytere. Du kan koble de separate bryterne, momentane, taktile, etc. bryterne på samme måte. Det viktige å legge merke til er motstanden som bryteren er koblet til. I mitt eksempel har jeg nesten doblet motstanden til den neste motstanden for å skape et spenningsgap som er lett å måle og ikke feile med bryteren før eller etter. Hvis du ikke har lagt merke til det før, kan du se igjen og innse at vi er tilbake til vår gamle venn, den resistive spenningsdeleren. Den første motstanden, 10k ohm, er koblet til 5V og den andre motstanden - motstanden som bestemmer Vute for SWITCH_ADC -pinne, er koblet til hver bryter, og derfor er hver bryter assosiert med en bestemt Vout -spenning som kan leses fra ADC -pinnen som er koblet til SWITCH_ADC. Deretter bestemmer du forventet Vout fra hver bryter slik
Vout = Vin * (R2 / (R1 + R2))
for bryter en:
Vout = 5V * (500 / (10000 + 500)) = 5 * 0,048 = 0,24V eller 240 mV
for bryter to:
Vout = 5V * (2200 / (10000 + 2200)) = 5 * 0,18 = 0,9V eller ~ 900mV
og så videre.. Du kan gjerne bytte inn dine egne verdier for R2 hvis du bare har visse motstander hendig … Det viktigste her er å holde et stort nok spenningsgap mellom bryterne slik at enhver feilmargin på ADC vinner ' t sette deg inn i spenningen som forventes fra en nabobryter. Jeg har funnet det enkleste å gjøre er å bygge skillestigen og sette et multimeter/voltmeter på ADC -pinnen og trykke på hver pinne og se hvilke verdier du får. De burde være ganske på linje med det du regner ut. Når du har alle forventede spenningsverdier fra hver bryter ved hjelp av en bestemt motstand, kan du få MCU -en til å lese ADC -pinnen og sammenligne den med dine kjente verdier for å avgjøre hvilken bryter som ble trykket på. For eksempel, si at du har registrert en avbruddsrutine som vil bli ringt opp hver gang det oppdages en endring på ADC -pinnen. Inne i denne ISR -en kan du lese ADC og sammenligne denne verdien med bryterbordet ditt. Hvis du bruker en 8-biters ADC-verdi, blir spenningen konvertert til et tall mellom 0 og 255 som tilsvarer en spenning mellom 0V og 5V. Dette forutsetter at du har ADC konfigurert på denne måten.
Trinn 4: Oppsummering
Så nå burde du vite hvordan du skal være nøysom med å bruke GPIO -pinner for brytere. Når du er tom for GPIO -pinner, eller knapt har noen å begynne med, eller hvis du innser at du kommer til å bruke en bank med brytere, er den resistive skillelinjen veien å gå for å lagre GPIO -pinnene dine mens du fortsatt gir en robust mekanisme for å oppdage bryteradgang.
Anbefalt:
Slik leser du av en elektrisitetsmåler via Arduino: 3 trinn
Slik leser du opp en elektrisitetsmåler via Arduino: Ofte ville det være interessant å vite gjeldende strømforbruk eller totalt strømforbruk i hjemmet ditt for å begrense kostnadene for strøm og beskytte miljøet. Dette er egentlig ikke noe problem, for stort sett finner du en smart digital el
Slik leser du DHT -data på LCD ved hjelp av Raspberry Pi: 6 trinn
Slik leser du DHT -data på LCD -skjermen ved hjelp av Raspberry Pi: Temperaturen og den relative fuktigheten er viktige værdata i miljøene. De to kan være dataene en miniværstasjon leverer. Å lese temperaturen og relativ fuktighet med Raspberry Pi kan oppnås med forskjellige varianter
Slik leser du et mikrometer. 3 trinn
Hvordan lese et mikrometer .: Hei, jeg heter Damian Paul. Jeg er en andreårsstudent ved Lake Area Technical Institute i presisjonsbearbeidingsprogrammet. Jeg har kjørt CNC -maskiner i over 2 år før jeg gikk på Lake Area Technical Institute. I dag skal jeg
Slik gjør du smarte rullegardiner med SONOFF smarte brytere ?: 14 trinn
Slik gjør du smarte rullegardiner med SONOFF smarte brytere ?: Bruk låsemodus i SONOFF smarte brytere for å gjøre dine vanlige rullegardiner/persienner til smarte, om de fleste av dere er enige om at dette er en plikt at du trekker rullegardiner/persienner opp om morgenen og trekke den ned på kvelden? Uansett, jeg er
Slik driver du mange lysdioder fra noen få mikrokontrollerpinner. 6 trinn (med bilder)
Slik driver du mange lysdioder fra noen få mikrokontrollerpinner: Ved å bruke det faktum at mange mikrokontrollerpinner har tre tilstander (+V, GND eller "høy impedens", kan du kjøre N*(N-1) lysdioder fra N-pinner . Så den lille 8 -pinners mikrokontrolleren som en PIC12Fxxx eller en ATtiny11 kan drive 20 lysdioder på fem tilgjengelige