Innholdsfortegnelse:
- Trinn 1: Kretsen
- Trinn 2: Bevis - Excel
- Trinn 3: Arduino -programmering
- Trinn 4: TinkerCAD -kretser
- Trinn 5: "Så lenge, og takk for all fisken." (ref.1)
- Trinn 6: Referanser
Video: Bruk 1 analog inngang for 6 knapper for Arduino: 6 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
Jeg har ofte lurt på hvordan jeg kunne få flere digitale innganger til min Arduino. Det falt meg nylig inn at jeg skulle kunne bruke en av de analoge inngangene for å få inn flere digitale innganger. Jeg gjorde et raskt søk og fant hvor folk var i stand til å gjøre dette, men at disse bare tillot at en enkelt knapp ble trykket om gangen. Jeg vil ha en kombinasjon av knapper som skal trykkes samtidig. Så ved hjelp av TINKERCAD CIRCUITS satte jeg meg for å få dette til.
Hvorfor vil jeg ha samtidig knappetrykk? Som illustrert i TinkerCad Circuits -designet, kan den brukes til DIP -bryterinnganger for valg av forskjellige moduser i programmet.
Kretsen jeg fant opp bruker 5V -kilden som er tilgjengelig fra Arduino og bruker 7 motstander og 6 knapper eller brytere.
Trinn 1: Kretsen
Arduino har analoge innganger som godtar en 0V til 5V inngang. Denne inngangen har en 10-bits oppløsning, noe som betyr at signalet er delt inn i 2^10 segmenter, eller 1024 tellinger. Basert på dette vil det mest mulige vi noen gang kunne legge inn i en analog inngang mens vi tillater samtidig trykk være 10 knapper til 1 analog inngang. Men dette er ikke en perfekt verden. Det er motstand i ledere, støy fra eksterne kilder og ufullkommen kraft. Så, for å gi meg selv mye fleksibilitet, planla jeg å designe dette for 6 knapper. Dette var delvis påvirket av det faktum at TinkerCAD Circuits hadde et 6-Switch DIP Switch-objekt, noe som ville gjøre testingen enkel.
Det første trinnet i designet mitt var å sørge for at hver knapp, når den trykkes individuelt, ville gi en unik spenning. Dette utelukket at alle motstandene var den samme verdien. Det neste trinnet var at motstandsverdiene, når de ble lagt til parallelt, ikke kunne ha samme motstand som noen enkelt motstandsverdi. Når motstander er parallellkoblet, kan den resulterende motstanden beregnes med Rx = 1/[(1/R1)+(1/R2)]. Så hvis R1 = 2000 og R2 = 1000, Rx = 667. Jeg spekulerte i at ved å doble størrelsen på hver motstand, ville jeg ikke se den samme motstanden for noen av kombinasjonene.
Så kretsen min til dette punktet var å ha 6 brytere, hver med sin egen motstand. Men det er en motstand til som kreves for å fullføre denne kretsen.
Den siste motstanden har 3 formål. For det første fungerer den som en nedtrekksmotstand. Uten motstanden, når ingen knapper trykkes, er kretsen ufullstendig. Dette vil tillate spenningen ved Arduinos analoge inngang å flyte til et hvilket som helst spenningspotensial. En nedtrekksmotstand trekker i hovedsak ned spenningen til 0 V. Det andre formålet er å begrense strømmen til denne kretsen. Ohms lov sier at V = IR, eller Spenning = Strøm multiplisert med motstand. Med en gitt spenningskilde, jo større motstand betyr at strømmen ville være mindre. Så hvis et 5V signal ble påført en 500ohm motstand, ville den største strømmen vi kunne se være 0,01A eller 10mA. Den tredje hensikten er å gi signalspenningen. Den totale strømmen som strømmer gjennom den siste motstanden vil være: i = 5V/Rtotal, hvor Rtotal = Rlast+{1/[(1/R1)+(1/R2)+(1/R3)+(1/R4)+ (1/R5)+(1/R6)]}. Imidlertid inkluderer bare 1/Rx for hver motstand som har den tilhørende knappen trykket. Fra den totale strømmen vil spenningen som er levert til den analoge inngangen være i*Rlast, eller i*500.
Trinn 2: Bevis - Excel
Den raskeste og enkleste måten å bevise at jeg ville få unike motstander og dermed unike spenninger med denne kretsen var å bruke funksjonene i Excel.
Jeg konfigurerte alle mulige kombinasjoner av bryterinnganger og organiserte disse sekvensielt etter binære mønstre. En verdi på "1" indikerer at bryteren er på, blank indikerer at den er av. På toppen av regnearket legger jeg inn motstandsverdiene for hver bryter og for nedtrekksmotstanden. Jeg beregnet deretter den tilsvarende motstanden for hver av kombinasjonene, bortsett fra når alle motstandene er slått av siden disse motstandene ikke vil påvirke uten at en strømkilde leverer den. For å gjøre beregningene mine enkle, slik at jeg kunne kopiere og lime inn i hver kombinasjon, inkluderte jeg alle kombinasjoner i beregningen ved å multiplisere hver bryterverdi (0 eller 1) med dens inverterte motstandsverdi. Dette eliminerte motstanden fra beregningen hvis bryteren var av. Den resulterende ligningen kan sees på bildet av regnearket, men Req = Rx + 1/(Sw1/R1 + Sw2/R2 + Sw3/R3 + Sw4/R4 + Sw5/R5 + Sw6/R6). Ved å bruke Itotal = 5V / Req, bestemmer vi den totale strømmen gjennom kretsen. Dette er den samme strømmen som går gjennom nedtrekksmotstanden, og gir oss spenningen til vår analoge inngang. Dette er beregnet som Vin = Itotal x Rx. Ved å undersøke både Req -data og Vin -data, kan vi se at vi faktisk har unike verdier.
På dette tidspunktet ser det ut til at kretsen vår vil fungere. Nå for å finne ut hvordan du programmerer Arduino.
Trinn 3: Arduino -programmering
Da jeg begynte å tenke på hvordan jeg skulle programmere Arduino, planla jeg først å sette opp individuelle spenningsområder for å avgjøre om en bryter var på eller av. Men mens jeg lå i sengen en natt, tenkte jeg på at jeg burde kunne finne en ligning for å gjøre dette. Hvordan? UTMERKE. Excel har muligheten til å beregne ligninger for å passe best data i et diagram. For å gjøre dette, vil jeg ha en ligning av heltallverdien til bryterne (binær) versus spenningsinngangen som tilsvarer den verdien. I Excel -arbeidsboken min la jeg heltallsverdien på venstre side av regnearket. Nå for å bestemme ligningen min.
Her er en rask opplæring om hvordan du bestemmer ligningen for en linje i Excel.
1) Velg en celle som ikke inneholder data. Hvis du har valgt en celle som har data, prøver Excel å gjette hva du vil trend. Dette gjør det mye vanskeligere å sette opp en trend, fordi Excel sjelden forutsier riktig.
2) Velg "Sett inn" -fanen og velg et "Scatter" -diagram.
3) Høyreklikk i kartboksen og klikk på "Velg data …". Dette vil dukke opp vinduet "Velg datakilde". Velg Legg til -knappen for å fortsette å velge dataene.
4) Gi den et serienavn (valgfritt). Velg område for X-aksen ved å klikke på pil opp og deretter velge spenningsdata. Velg område for Y-aksen ved å klikke på pil opp og deretter velge Heltall-data (0-63).
5) Høyreklikk på datapunktene og velg "Legg til trendlinje …" I vinduet "Formater trendlinje", velg Polynom -knappen. Når vi ser på trenden, ser vi at Order of 2 ikke stemmer helt overens. Jeg valgte en rekkefølge på 3 og følte at dette var mye mer nøyaktig. Merk av for "Vis ligning på diagram". Den siste ligningen vises nå på diagrammet.
6) Ferdig.
OK. Tilbake til Arduino -programmet. Nå som vi har ligningen, er det enkelt å programmere Arduino. Heltallet som representerer bryterposisjonene er beregnet i 1 kode linje. Ved å bruke "bitread" -funksjonen, kan vi fange verdien av hver enkelt bit og dermed kjenne tilstanden til hver knapp. (SE BILDER)
Trinn 4: TinkerCAD -kretser
Hvis du ikke har sjekket ut TinkerCAD -kretser, gjør det nå. VENTE!!!! Les ferdig instruksjonsboken min, og sjekk den. TinkerCAD Circuits gjør testing av Arduino -kretser veldig enkelt. Den inneholder flere elektriske objekter og Arduinos, til og med slik at du kan programmere Arduino for testing.
For å teste kretsen min, satte jeg opp 6 brytere ved hjelp av en DIP -bryterpakke og knyttet dem til motstandene. For å bevise at spenningsverdien i Excel -regnearket mitt var riktig, viste jeg et voltmeter ved inngangen til Arduino. Alt fungerte som forventet.
For å bevise at Arduino -programmeringen fungerte, sendte jeg ut tilstandene til bryterne til lysdioder ved hjelp av Arduinos digitale utganger.
Jeg byttet deretter hver bryter for hver mulig kombinasjon og er stolt over å si "DET VIRKER" !!!
Trinn 5: "Så lenge, og takk for all fisken." (ref.1)
Jeg har ennå ikke prøvd dette med ekte utstyr, ettersom jeg for tiden reiser på jobb. Men etter å ha bevist det med TinkerCAD Circuits, tror jeg at det vil fungere. Utfordringen er at verdiene til motstander som jeg har spesifisert ikke alle er standardverdier for motstander. For å komme rundt dette, planlegger jeg å bruke potensiometre og kombinasjoner av motstander for å få verdiene jeg trenger.
Takk for at du leser min instruktive. Jeg håper at det hjelper deg med prosjektene dine.
Legg igjen kommentarer hvis du har forsøkt å takle den samme hindringen og hvordan du hadde løst den. Jeg vil gjerne lære flere måter å gjøre dette på.
Trinn 6: Referanser
Du trodde ikke jeg ville gi et tilbud uten å referere til kilden, gjorde du?
ref. 1: Adams, Douglas. Så lenge, og takk for all fisken. (Den fjerde boken i Hitchhiker's Guide to the Galaxy "trilogien")
Anbefalt:
Arduino Control DC motorhastighet og retning ved bruk av et potensiometer, OLED -skjerm og knapper: 6 trinn
Arduino Control DC motorhastighet og retning ved bruk av et potensiometer, OLED -skjerm og knapper: I denne opplæringen lærer vi hvordan du bruker en L298N DC MOTOR CONTROL driver og et potensiometer for å kontrollere en DC motorhastighet og retning med to knapper og vise potensiometerverdien Se på en demonstrasjonsvideo
4 -knappers spill med en analog inngang: 6 trinn (med bilder)
4-knappers spill ved bruk av en analog inngang: Denne instruksen fokuserer på å bruke en analog inngangslinje for flere knapper som kan oppdages uavhengig av hverandre. Og for å markere bruken av disse knappene som følger med, er programvare for å spille fire forskjellige 4-knappers spill. Alle spillene (8 tommer
DC -motor jevn start, hastighet og retning ved bruk av et potensiometer, OLED -skjerm og knapper: 6 trinn
DC -motor jevn start, hastighet og retning ved bruk av et potensiometer, OLED -display og knapper: I denne opplæringen lærer vi hvordan du bruker en L298N DC MOTOR CONTROL -driver og et potensiometer for å kontrollere en jevn motor, jevn start, hastighet og retning med to knapper og vis potensiometerverdien på OLED -skjermen. Se en demonstrasjon vide
Arduino Control DC motorhastighet og retning ved bruk av et potensiometer og knapper: 6 trinn
Arduino Control DC motorhastighet og retning ved bruk av potensiometer og knapper: I denne opplæringen lærer vi hvordan du bruker en L298N DC MOTOR CONTROL driver og et potensiometer for å kontrollere en DC motor hastighet og retning med to knapper. Se en demonstrasjonsvideo
IoT analog inngang - Komme i gang med IoT: 8 trinn
IoT analog inngang - Komme i gang med IoT: Forstå analoge innganger er en avgjørende del for å forstå hvordan ting rundt oss fungerer, de fleste om ikke alle sensorene er analoge sensorer (noen ganger blir disse sensorene konvertert til digitale). I motsetning til digitale innganger som bare kan være på eller av, analog inngang