Innehållsförteckning:

Använd 1 analog ingång för 6 knappar för Arduino: 6 steg
Använd 1 analog ingång för 6 knappar för Arduino: 6 steg

Video: Använd 1 analog ingång för 6 knappar för Arduino: 6 steg

Video: Använd 1 analog ingång för 6 knappar för Arduino: 6 steg
Video: #20 Modbus Master Analog & Digital Input Read | Outseal Arduino PLC 2024, Juli
Anonim
Använd 1 analog ingång för 6 knappar för Arduino
Använd 1 analog ingång för 6 knappar för Arduino

Jag har ofta undrat hur jag skulle kunna få fler digitala ingångar till min Arduino. Det kom nyligen för mig att jag skulle kunna använda en av de analoga ingångarna för att få in flera digitala ingångar. Jag gjorde en snabb sökning och fann var människor kunde göra detta, men att dessa bara tillät en knapp att tryckas in åt gången. Jag vill kunna ha valfri kombination av knappar som ska tryckas samtidigt. Så, med hjälp av TINKERCAD CIRCUITS, bestämde jag mig för att få detta att hända.

Varför skulle jag vilja ha knapptryckningar samtidigt? Som illustreras i TinkerCad Circuits -designen kan den användas för DIP -switchingångar för val av olika lägen inom programmet.

Kretsen som jag kom på använder 5V -källan som är tillgänglig från Arduino och använder 7 motstånd och 6 knappar eller omkopplare.

Steg 1: Kretsen

Kretsen
Kretsen

Arduino har analoga ingångar som accepterar en 0V till 5V ingång. Denna ingång har en 10-bitars upplösning, vilket innebär att signalen är uppdelad i 2^10 segment, eller 1024 räkningar. Baserat på detta skulle det mesta vi någonsin skulle kunna mata in i en analog ingång samtidigt som vi tillåter samtidigt tryckningar vara 10 knappar till 1 analog ingång. Men detta är inte en perfekt värld. Det finns motstånd i ledare, buller från externa källor och ofullkomlig kraft. Så för att ge mig själv mycket flexibilitet planerade jag att designa detta för 6 knappar. Detta påverkades delvis av det faktum att TinkerCAD Circuits hade ett 6-switch DIP Switch-objekt, vilket skulle göra testningen enkel.

Det första steget i min design var att se till att varje knapp, när den trycks individuellt, skulle ge en unik spänning. Detta utesluter att alla motstånd är samma värde. Nästa steg var att motståndsvärdena, när de adderades parallellt, inte kunde ha samma motstånd som något enskilt motståndsvärde. När motstånd är parallellt anslutna kan det resulterande motståndet beräknas med Rx = 1/[(1/R1)+(1/R2)]. Så om R1 = 2000 och R2 = 1000, Rx = 667. Jag spekulerade på att genom att fördubbla storleken på varje motstånd skulle jag inte se samma motstånd för någon av kombinationerna.

Så min krets till denna punkt var att ha 6 switchar, var och en med sitt eget motstånd. Men det krävs ytterligare ett motstånd för att slutföra denna krets.

Det sista motståndet har 3 syften. Först fungerar det som ett neddragningsmotstånd. Utan motståndet, när inga knappar trycks in, är kretsen ofullständig. Detta skulle låta spänningen vid Arduinos analoga ingång flyta till vilken spänningspotential som helst. Ett neddragningsmotstånd drar i huvudsak ner spänningen till 0 V. Det andra syftet är att begränsa strömmen för denna krets. Ohms lag säger att V = IR eller Spänning = Ström multiplicerat med motstånd. Med en given spänningskälla, desto större motstånd betyder att strömmen skulle vara mindre. Så om en 5V -signal applicerades på ett 500ohm -motstånd skulle den största strömmen vi kunde se vara 0,01A eller 10mA. Det tredje syftet är att tillhandahålla signalspänningen. Den totala strömmen som flödar genom det sista motståndet skulle vara: i = 5V/Rtotal, där Rtotal = Rlast+{1/[(1/R1)+(1/R2)+(1/R3)+(1/R4)+ (1/R5)+(1/R6)]}. Inkludera dock bara 1/Rx för varje motstånd som har motsvarande knapp nedtryckt. Från den totala strömmen skulle spänningen som levereras till den analoga ingången vara i*Rlast eller i*500.

Steg 2: Bevis - Excel

Bevis - Excel
Bevis - Excel

Det snabbaste och enklaste sättet att bevisa att jag skulle få unika motstånd och därmed unika spänningar med denna krets var att använda funktionerna i Excel.

Jag ställde in alla möjliga kombinationer av switchingångar och organiserade dessa sekventiellt efter binära mönster. Värdet "1" indikerar att omkopplaren är på, tom anger att den är avstängd. Högst upp i kalkylbladet lägger jag in motståndsvärdena för varje switch och för neddragningsmotståndet. Jag beräknade sedan det ekvivalenta motståndet för var och en av kombinationerna, förutom när alla motstånd är avstängda eftersom dessa motstånd inte påverkar utan att en strömkälla levererar det. För att göra mina beräkningar enkla så att jag kunde kopiera och klistra in i varje kombination inkluderade jag alla kombinationer i beräkningen genom att multiplicera varje switchvärde (0 eller 1) med dess inverterade motståndsvärde. Genom att göra detta eliminerades dess motstånd från beräkningen om omkopplaren var avstängd. Den resulterande ekvationen kan ses på bilden i kalkylbladet, men Req = Rx + 1/(Sw1/R1 + Sw2/R2 + Sw3/R3 + Sw4/R4 + Sw5/R5 + Sw6/R6). Med hjälp av Itotal = 5V / Req bestämmer vi den totala strömmen genom kretsen. Detta är samma ström som går genom neddragningsmotståndet och ger oss spänningen till vår analoga ingång. Detta beräknas som Vin = Itotal x Rx. Genom att undersöka både Req -data och Vin -data kan vi se att vi verkligen har unika värden.

Vid denna tidpunkt verkar det som om vår krets kommer att fungera. Nu för att ta reda på hur man programmerar Arduino.

Steg 3: Arduino -programmering

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

När jag började fundera på hur jag skulle programmera Arduino, planerade jag inledningsvis att ställa in individuella spänningsområden för att avgöra om en omkopplare var på eller av. Men när jag låg i sängen en natt, kom jag på att jag skulle kunna hitta en ekvation för att göra detta. Hur? EXCEL. Excel har möjlighet att beräkna ekvationer för att bäst passa data i ett diagram. För att göra detta vill jag ha en ekvation av switcharnas heltalsvärde (binärt) kontra spänningsingången som motsvarar det värdet. I min Excel -arbetsbok lägger jag heltalet till vänster i kalkylarket. Nu för att bestämma min ekvation.

Här är en snabb handledning om hur du bestämmer ekvationen för en rad i Excel.

1) Välj en cell som inte innehåller data. Om du har en cell markerad som har data kommer Excel att försöka gissa vad du vill utveckla. Detta gör det mycket svårare att sätta upp en trend, eftersom Excel sällan förutsäger korrekt.

2) Välj fliken "Infoga" och välj ett "Scatter" -diagram.

3) Högerklicka i diagramrutan och klicka på "Välj data …". Detta öppnar fönstret "Välj datakälla". Välj knappen Lägg till för att fortsätta att välja data.

4) Ge det ett seriens namn (valfritt). Välj intervallet för X-axeln genom att klicka på uppåtpilen och sedan välja spänningsdata. Välj intervallet för Y-axeln genom att klicka på uppåtpilen och sedan välja heltalsdata (0-63).

5) Högerklicka på datapunkterna och välj "Lägg till trendlinje …" I fönstret "Formatera trendlinje", välj knappen Polynom. Tittar vi på trenden ser vi att Order of 2 inte riktigt stämmer. Jag valde en order på 3 och tyckte att detta var mycket mer exakt. Markera kryssrutan för "Visa ekvation på diagram". Den slutliga ekvationen visas nu på diagrammet.

6) Klar.

OK. Tillbaka till Arduino -programmet. Nu när vi har ekvationen är det enkelt att programmera Arduino. Heltalet som representerar omkopplarpositionerna beräknas med en kodrad. Genom att använda "bitread" -funktionen kan vi ta tag i värdet på varje enskild bit och därmed veta tillståndet för varje knapp. (SE BILDER)

Steg 4: TinkerCAD -kretsar

TinkerCAD -kretsar
TinkerCAD -kretsar

Om du inte har kollat in TinkerCAD -kretsar, gör det nu. VÄNTA!!!! Läs klart min Instructable och kolla sedan in den. TinkerCAD Circuits gör det enkelt att testa Arduino -kretsar. Den innehåller flera elektriska föremål och Arduinos, till och med så att du kan programmera Arduino för testning.

För att testa min krets satte jag upp 6 switchar med ett DIP -switchpaket och knöt dem till motstånden. För att bevisa att spänningsvärdet i mitt Excel -kalkylblad var korrekt visade jag en voltmeter vid ingången till Arduino. Allt fungerade som förväntat.

För att bevisa att Arduino -programmeringen fungerade matar jag ut switcharnas tillstånd till lysdioder med hjälp av Arduinos digitala utgångar.

Jag bytte sedan varje switch för varje möjlig kombination och är stolt över att säga "DET FUNGERAR" !!!

Steg 5: "Så länge och tack för all fisk." (ref.1)

Jag har ännu inte provat detta med hjälp av riktig utrustning, eftersom jag för närvarande reser för arbete. Men efter att ha bevisat det med TinkerCAD -kretsar tror jag att det kommer att fungera. Utmaningen är att värdena på motstånd som jag har specificerat inte alla är standardvärden för motstånd. För att komma runt detta planerar jag att använda potentiometrar och kombinationer av motstånd för att få de värden som jag behöver.

Tack för att du läser min instruerbara. Jag hoppas att det hjälper dig med dina projekt.

Lämna kommentarer om du har försökt att ta itu med samma hinder och hur du hade löst det. Jag skulle gärna lära mig fler sätt att göra detta.

Steg 6: Referenser

Du trodde väl inte att jag skulle lämna ett citat utan att referera till källan?

ref. 1: Adams, Douglas. Så länge och tack för all fisk. (Den fjärde boken i Hitchhiker's Guide to the Galaxy "trilogin")

Rekommenderad: