Indholdsfortegnelse:

Brug 1 analog indgang til 6 knapper til Arduino: 6 trin
Brug 1 analog indgang til 6 knapper til Arduino: 6 trin

Video: Brug 1 analog indgang til 6 knapper til Arduino: 6 trin

Video: Brug 1 analog indgang til 6 knapper til Arduino: 6 trin
Video: Как управлять приводом с помощью Arduino - Robojax 2024, November
Anonim
Brug 1 analog indgang til 6 knapper til Arduino
Brug 1 analog indgang til 6 knapper til Arduino

Jeg har ofte spekuleret på, hvordan jeg kunne få flere digitale input til min Arduino. Det gik for nylig op for mig, at jeg skulle kunne bruge en af de analoge indgange til at indføre flere digitale input. Jeg lavede en hurtig søgning og fandt ud af, hvor folk var i stand til at gøre dette, men at disse kun tillod, at der blev trykket på en enkelt knap ad gangen. Jeg vil gerne have en kombination af knapper, der skal trykkes samtidigt. Så ved hjælp af TINKERCAD CIRCUITS satte jeg mig for at få dette til at ske.

Hvorfor vil jeg have samtidigt tryk på knapper? Som illustreret i TinkerCad Circuits -designet kan den bruges til DIP -switchindgange til valg af forskellige tilstande inden for programmet.

Kredsløbet, jeg fandt på, bruger 5V -kilden, der er tilgængelig fra Arduino og bruger 7 modstande og 6 knapper eller kontakter.

Trin 1: Kredsløbet

Kredsløbet
Kredsløbet

Arduino har analoge indgange, der accepterer et 0V til 5V input. Denne indgang har en 10-bit opløsning, hvilket betyder, at signalet er opdelt i 2^10 segmenter eller 1024 tællinger. Baseret på dette ville det mest, vi nogensinde kunne indtaste i en analog indgang, samtidig med at vi kunne trykke samtidigt, være 10 knapper til 1 analog indgang. Men dette er ikke en perfekt verden. Der er modstand i ledere, støj fra eksterne kilder og ufuldkommen strøm. Så for at give mig selv masser af fleksibilitet planlagde jeg at designe dette til 6 knapper. Dette var delvist påvirket af det faktum, at TinkerCAD Circuits havde et 6-switch DIP Switch-objekt, hvilket ville gøre testningen let.

Det første trin i mit design var at sikre, at hver knap, når den trykkes individuelt, ville give en unik spænding. Dette udelukkede, at alle modstande var den samme værdi. Det næste trin var, at modstandsværdierne, når de blev tilføjet parallelt, ikke kunne have den samme modstand som en enkelt modstandsværdi. Når modstande er forbundet parallelt, kan den resulterende modstand beregnes med Rx = 1/[(1/R1)+(1/R2)]. Så hvis R1 = 2000 og R2 = 1000, Rx = 667. Jeg spekulerede i, at ved at fordoble størrelsen på hver modstand ville jeg ikke se den samme modstand for nogen af kombinationerne.

Så mit kredsløb til dette punkt var at have 6 kontakter, hver med sin egen modstand. Men der er en modstand mere nødvendig for at fuldføre dette kredsløb.

Den sidste modstand har 3 formål. For det første fungerer det som en pull-down-modstand. Uden modstanden er kredsløbet ufuldstændigt, når der ikke trykkes på knapper. Dette ville tillade spændingen ved Arduino's analoge indgang at flyde til ethvert spændingspotentiale. En pull-down-modstand trækker hovedsageligt spændingen ned til 0 V. Det andet formål er at begrænse strømmen i dette kredsløb. Ohms lov siger, at V = IR eller Spænding = Strøm ganget med modstand. Med en given spændingskilde betyder den større modstand, at strømmen ville være mindre. Så hvis et 5V signal blev tilført en 500ohm modstand, ville den største strøm vi kunne se være 0,01A eller 10mA. Det tredje formål er at levere signalspændingen. Den samlede strøm, der strømmer gennem den sidste modstand, ville være: i = 5V/Rtotal, hvor Rtotal = Rlast+{1/[(1/R1)+(1/R2)+(1/R3)+(1/R4)+ (1/R5)+(1/R6)]}. Inkluder dog kun 1/Rx for hver modstand, der har den tilhørende knap trykket ned. Fra den samlede strøm ville spændingen, der blev leveret til den analoge indgang, være i*Rlast eller i*500.

Trin 2: Bevis - Excel

Bevis - Excel
Bevis - Excel

Den hurtigste og letteste måde at bevise, at jeg ville få unikke modstande og dermed unikke spændinger med dette kredsløb, var at bruge funktionerne i Excel.

Jeg konfigurerede alle de mulige kombinationer af switchindgange og organiserede disse sekventielt efter binære mønstre. En værdi på "1" angiver, at kontakten er tændt, blank angiver, at den er slukket. Øverst på regnearket satte jeg modstandsværdierne ind for hver switch og for pull-down-modstanden. Jeg beregnede derefter den tilsvarende modstand for hver af kombinationerne, undtagen når alle modstande er slukkede, da disse modstande ikke vil påvirke uden en strømkilde, der forsyner den. For at gøre mine beregninger lette, så jeg kunne kopiere og indsætte i hver kombination, inkluderede jeg alle kombinationer i beregningen ved at gange hver switchværdi (0 eller 1) med dens inverterede modstandsværdi. Derved eliminerede dets modstand fra beregningen, hvis kontakten var slukket. Den resulterende ligning kan ses på billedet af regnearket, men Req = Rx + 1/(Sw1/R1 + Sw2/R2 + Sw3/R3 + Sw4/R4 + Sw5/R5 + Sw6/R6). Ved hjælp af Itotal = 5V / Req bestemmer vi den samlede strøm gennem kredsløbet. Dette er den samme strøm, der går gennem Pull-down-modstanden, og giver os spændingen til vores analoge indgang. Dette beregnes som Vin = Itotal x Rx. Ved at undersøge både Req -data og Vin -data kan vi se, at vi faktisk har unikke værdier.

På dette tidspunkt ser det ud til, at vores kredsløb vil fungere. Nu for at finde ud af, hvordan du programmerer Arduino.

Trin 3: Arduino -programmering

Arduino programmering
Arduino programmering
Arduino programmering
Arduino programmering
Arduino programmering
Arduino programmering

Da jeg begyndte at tænke på, hvordan jeg skulle programmere Arduino, planlagde jeg oprindeligt at konfigurere individuelle spændingsområder for at afgøre, om en switch var tændt eller slukket. Men mens jeg lå i sengen en nat, gik det op for mig, at jeg skulle kunne finde en ligning til at gøre dette. Hvordan? EXCEL. Excel har evnen til at beregne ligninger for bedst at passe data i et diagram. For at gøre dette vil jeg have en ligning af switchens heltalværdi (binær) versus spændingsindgangen, der svarer til denne værdi. I min Excel -projektmappe lagde jeg Integer -værdien i venstre side af regnearket. Nu for at bestemme min ligning.

Her er en hurtig vejledning i, hvordan du bestemmer ligningen for en linje i Excel.

1) Vælg en celle, der ikke indeholder data. Hvis du har valgt en celle, der har data, vil Excel forsøge at gætte, hvad det er, du vil trend. Dette gør det meget vanskeligere at oprette en trend, fordi Excel sjældent forudsiger korrekt.

2) Vælg fanen "Indsæt", og vælg et "Scatter" -diagram.

3) Højreklik i diagramboksen og klik på "Vælg data …". Dette åbner vinduet "Vælg datakilde". Vælg knappen Tilføj for at fortsætte med at vælge dataene.

4) Giv det et serienavn (valgfrit). Vælg område for X-aksen ved at klikke på pil op og derefter vælge spændingsdata. Vælg område for Y-aksen ved at klikke på pil op og derefter vælge Integer Data (0-63).

5) Højreklik på datapunkterne, og vælg "Tilføj trendlinje …" I vinduet "Formater trendlinje" skal du vælge knappen Polynom. Ser vi på trenden, ser vi, at rækkefølgen af 2 ikke helt matcher. Jeg valgte en rækkefølge på 3 og følte, at dette var meget mere præcist. Marker afkrydsningsfeltet for "Vis ligning på diagram". Den sidste ligning vises nu på diagrammet.

6) Udført.

OKAY. Tilbage til Arduino -programmet. Nu hvor vi har ligningen, er programmering af Arduino let. Heltallet, der repræsenterer switch -positionerne, beregnes i 1 kodelinje. Ved at bruge "bitread" -funktionen kan vi fange værdien af hver enkelt bit og dermed kende tilstanden for hver knap. (SE BILLEDER)

Trin 4: TinkerCAD -kredsløb

TinkerCAD kredsløb
TinkerCAD kredsløb

Hvis du ikke har tjekket TinkerCAD -kredsløb ud, gør det nu. VENTE!!!! Afslut med at læse min Instructable, og tjek den derefter. TinkerCAD Circuits gør det meget let at teste Arduino -kredsløb. Det indeholder flere elektriske objekter og Arduinos, så du endda kan programmere Arduino til test.

For at teste mit kredsløb konfigurerede jeg 6 switches ved hjælp af en DIP switch pack og bandt dem til modstandene. For at bevise, at spændingsværdien i mit Excel -regneark var korrekt, viste jeg et voltmeter ved indgangen til Arduino. Alt dette fungerede som forventet.

For at bevise, at Arduino -programmeringen fungerede, udsendte jeg switches tilstande til LED'er ved hjælp af Arduino's digitale udgange.

Jeg skiftede derefter hver switch til hver mulig kombination og er stolt over at sige "DET VIRKER" !!!

Trin 5: "Så længe, og tak for alle fiskene." (ref.1)

Jeg har endnu ikke prøvet dette ved hjælp af ægte udstyr, da jeg i øjeblikket rejser på arbejde. Men efter at have bevist det med TinkerCAD -kredsløb, tror jeg på, at det vil fungere. Udfordringen er, at værdierne af modstande, som jeg har angivet, ikke alle er standardværdier for modstande. For at komme uden om dette planlægger jeg at bruge potentiometre og kombinationer af modstande for at få de værdier, jeg har brug for.

Tak fordi du læste min instruktive. Jeg håber, at det hjælper dig med dine projekter.

Efterlad venligst kommentarer, hvis du har forsøgt at tackle den samme forhindring, og hvordan du havde løst det. Jeg ville elske at lære flere måder at gøre dette på.

Trin 6: Referencer

Du troede ikke, at jeg ville give et tilbud uden at give en reference til dens kilde, gjorde du?

ref. 1: Adams, Douglas. Så længe, og tak for alle fiskene. (Den fjerde bog i Hitchhiker's Guide to the Galaxy "trilogien")

Anbefalede: