Inhoudsopgave:

Gebruik 1 analoge ingang voor 6 knoppen voor Arduino - Ajarnpa
Gebruik 1 analoge ingang voor 6 knoppen voor Arduino - Ajarnpa

Video: Gebruik 1 analoge ingang voor 6 knoppen voor Arduino - Ajarnpa

Video: Gebruik 1 analoge ingang voor 6 knoppen voor Arduino - Ajarnpa
Video: #13 VTScada (бесплатная лицензия) Modbus RS485 Аналоговое чтение и запись | Внешний ПЛК Arduino 2024, Juli-
Anonim
Gebruik 1 analoge ingang voor 6 knoppen voor Arduino
Gebruik 1 analoge ingang voor 6 knoppen voor Arduino

Ik heb me vaak afgevraagd hoe ik meer digitale ingangen voor mijn Arduino kon krijgen. Onlangs bedacht ik me dat ik een van de analoge ingangen zou moeten kunnen gebruiken om meerdere digitale ingangen in te voeren. Ik deed een snelle zoekopdracht en ontdekte waar mensen dit konden doen, maar dat er maar één knop tegelijk kon worden ingedrukt. Ik wil dat elke combinatie van knoppen GELIJKTIJDIG kan worden ingedrukt. Dus, met de hulp van TINKERCAD CIRCUITS, wilde ik dit mogelijk maken.

Waarom zou ik gelijktijdig op de knop willen drukken? Zoals geïllustreerd in het ontwerp van TinkerCad Circuits, kan het worden gebruikt voor DIP-schakelaaringangen voor het selecteren van verschillende modi binnen het programma.

Het circuit dat ik bedacht, gebruikt de 5V-bron die beschikbaar is bij de Arduino en gebruikt 7 weerstanden en 6 knoppen of schakelaars.

Stap 1: Het circuit

Het circuit
Het circuit

Arduino's hebben analoge ingangen die een ingang van 0V tot 5V accepteren. Deze ingang heeft een resolutie van 10 bits, wat betekent dat het signaal wordt opgedeeld in 2^10 segmenten, oftewel 1024 counts. Op basis hiervan zou het meeste dat we ooit zouden kunnen invoeren in een analoge ingang, terwijl gelijktijdige drukken mogelijk zijn, 10 knoppen naar 1 analoge ingang zijn. Maar dit is geen perfecte wereld. Er is weerstand in geleiders, ruis van externe bronnen en onvolmaakte stroom. Dus, om mezelf voldoende flexibiliteit te geven, was ik van plan dit te ontwerpen voor 6 knoppen. Dit werd gedeeltelijk beïnvloed door het feit dat TinkerCAD Circuits een 6-Switch DIP Switch-object had, wat het testen gemakkelijk zou maken.

De eerste stap in mijn ontwerp was ervoor te zorgen dat elke knop, wanneer hij afzonderlijk werd ingedrukt, een unieke spanning zou leveren. Dit sloot uit dat alle weerstanden dezelfde waarde hadden. De volgende stap was dat de weerstandswaarden, wanneer ze parallel werden opgeteld, niet dezelfde weerstand konden hebben als een enkele weerstandswaarde. Wanneer weerstanden parallel worden geschakeld, kan de resulterende weerstand worden berekend met Rx=1/[(1/R1)+(1/R2)]. Dus, als R1=2000 en R2=1000, Rx=667. Ik speculeerde dat door de grootte van elke weerstand te verdubbelen, ik niet dezelfde weerstand zou zien voor een van de combinaties.

Dus mijn circuit tot nu toe zou 6 schakelaars hebben, elk met zijn eigen weerstand. Maar er is nog een weerstand nodig om dit circuit te voltooien.

De laatste weerstand heeft 3 doelen. Ten eerste fungeert het als een pull-down-weerstand. Zonder de weerstand is het circuit onvolledig als er geen knoppen worden ingedrukt. Hierdoor zou de spanning op de analoge ingang van de Arduino naar elk spanningspotentieel kunnen zweven. Een pull-down-weerstand trekt in wezen de spanning naar 0 V. Het tweede doel is om de stroom van dit circuit te beperken. De wet van Ohm stelt dat V = IR, of spanning = stroom vermenigvuldigd met weerstand. Bij een gegeven spanningsbron betekent hoe groter de weerstand dat de stroom kleiner zou zijn. Dus als een 5V-signaal werd toegepast op een weerstand van 500 ohm, zou de grootste stroom die we konden zien 0,01 A of 10 mA zijn. Het derde doel is om de signaalspanning te leveren. De totale stroom die door de laatste weerstand vloeit zou zijn: i=5V / Rtotal, waarbij Rtotal = Rlast + {1/[(1/R1)+(1/R2)+(1/R3)+(1/R4)+ (1/R5)+(1/R6)]}. Voeg echter alleen 1/Rx toe voor elke weerstand waarvan de bijbehorende knop is ingedrukt. Van de totale stroom zou de aan de analoge ingang geleverde spanning i*Rlast of i*500 zijn.

Stap 2: Bewijs - Excel

Bewijs - Excel
Bewijs - Excel

De snelste en gemakkelijkste manier om te bewijzen dat ik met dit circuit unieke weerstanden en dus unieke spanningen zou krijgen, was door de mogelijkheden van Excel te gebruiken.

Ik heb alle mogelijke combinaties van schakelingangen ingesteld en deze sequentieel volgens binaire patronen georganiseerd. Een waarde van "1" geeft aan dat de schakelaar aan staat, blanco geeft aan dat deze uit is. Bovenaan de spreadsheet heb ik de weerstandswaarden voor elke schakelaar en voor de pull-down-weerstand ingevoerd. Ik heb vervolgens de equivalente weerstand voor elk van de combinaties berekend, behalve wanneer alle weerstanden zijn uitgeschakeld, omdat deze weerstanden geen effect hebben zonder een voedingsbron. Om mijn berekeningen gemakkelijk te maken, zodat ik elke combinatie kon kopiëren en plakken, heb ik alle combinaties in de berekening opgenomen door elke schakelwaarde (0 of 1) te vermenigvuldigen met de omgekeerde weerstandswaarde. Hierdoor werd de weerstand van de berekening geëlimineerd als de schakelaar uit was. De resulterende vergelijking is te zien in de afbeelding van de spreadsheet, maar Req = Rx+1/(Sw1/R1 + Sw2/R2 + Sw3/R3 + Sw4/R4 + Sw5/R5 + Sw6/R6). Met Itotal = 5V / Req bepalen we de totale stroom door het circuit. Dit is dezelfde stroom die door de pull-down-weerstand gaat en ons de spanning naar onze analoge ingang levert. Dit wordt berekend als Vin = Itotaal x Rx. Als we zowel de Req-gegevens als de Vin-gegevens onderzoeken, kunnen we zien dat we inderdaad unieke waarden hebben.

Op dit moment lijkt het erop dat ons circuit zal werken. Nu om erachter te komen hoe de Arduino te programmeren.

Stap 3: Arduino-programmering

Arduino-programmering
Arduino-programmering
Arduino-programmering
Arduino-programmering
Arduino-programmering
Arduino-programmering

Toen ik begon na te denken over het programmeren van de Arduino, was ik aanvankelijk van plan om individuele spanningsbereiken in te stellen om te bepalen of een schakelaar aan of uit was. Maar toen ik op een avond in bed lag, bedacht ik dat ik een vergelijking moest kunnen vinden om dit te doen. Hoe? UITSTEKEND. Excel heeft de mogelijkheid om vergelijkingen te berekenen die het beste passen bij gegevens in een grafiek. Om dit te doen, wil ik een vergelijking van de gehele waarde van de schakelaars (binair) versus de spanningsingang die overeenkomt met die waarde. In mijn Excel-werkmap plaats ik de integerwaarde aan de linkerkant van het werkblad. Nu om mijn vergelijking te bepalen.

Hier is een korte zelfstudie over het bepalen van de vergelijking van een lijn in Excel.

1) Selecteer een cel die geen gegevens bevat. Als u een cel hebt geselecteerd die gegevens bevat, probeert Excel te raden wat u wilt trenden. Dit maakt het veel moeilijker om een trend op te zetten, omdat Excel zelden correct voorspelt.

2) Selecteer het tabblad "Invoegen" en selecteer een "spreidingsdiagram".

3) Klik met de rechtermuisknop in het diagramvak en klik op "Gegevens selecteren…". Hierdoor verschijnt het venster "Gegevensbron selecteren". Selecteer de knop Toevoegen om door te gaan met het selecteren van de gegevens.

4) Geef het een serienaam (optioneel). Selecteer het bereik voor de X-as door op de pijl omhoog te klikken en vervolgens de spanningsgegevens te selecteren. Selecteer het bereik voor de Y-as door op de pijl omhoog te klikken en vervolgens de Integer Data (0-63) te selecteren.

5) Klik met de rechtermuisknop op de gegevenspunten en selecteer "Trendlijn toevoegen…" Selecteer in het venster "Trendlijn opmaken" de knop Polynoom. Kijkend naar de trend zien we dat de Order of 2 niet helemaal overeenkomt. Ik selecteerde een bestelling van 3 en vond dat dit veel nauwkeuriger was. Vink het selectievakje aan voor "Vergelijking op grafiek weergeven". De laatste vergelijking wordt nu weergegeven in de grafiek.

6) Klaar.

OKE. Terug naar het Arduino-programma. Nu we de vergelijking hebben, is het programmeren van de Arduino eenvoudig. Het geheel getal dat de schakelposities vertegenwoordigt, wordt berekend in 1 regel code. Door de functie "bitread" te gebruiken, kunnen we de waarde van elk afzonderlijk bit pakken en zo de status van elke knop kennen. (ZIE FOTO'S)

Stap 4: TinkerCAD-circuits

TinkerCAD-circuits
TinkerCAD-circuits

Als je TinkerCAD Circuits nog niet hebt uitgecheckt, doe het dan nu. WACHT!!!! Voltooi het lezen van mijn Instructable en bekijk het dan. TinkerCAD Circuits maakt het testen van Arduino-circuits heel eenvoudig. Het bevat verschillende elektrische objecten en Arduino's, waardoor je zelfs de Arduino kunt programmeren om te testen.

Om mijn circuit te testen, heb ik 6 schakelaars ingesteld met behulp van een DIP-schakelaarpakket en deze aan de weerstanden vastgemaakt. Om te bewijzen dat de spanningswaarde in mijn Excel-spreadsheet correct was, toonde ik een voltmeter bij de ingang naar de Arduino. Dit werkte allemaal zoals verwacht.

Om te bewijzen dat de Arduino-programmering werkte, voerde ik de toestanden van de schakelaars uit naar LED's, met behulp van de digitale uitgangen van de Arduino.

Ik schakelde toen elke schakelaar voor elke mogelijke combinatie en ben trots om te zeggen "HET WERKT"!!!

Stap 5: "Tot nu toe, en bedankt voor alle vissen." (ref.1)

Ik moet dit nog uitproberen met echte apparatuur, omdat ik momenteel op reis ben voor mijn werk. Maar nadat ik het heb bewezen met TinkerCAD Circuits, geloof ik dat het zal werken. De uitdaging is dat de waarden van weerstanden die ik heb gespecificeerd niet allemaal standaardwaarden voor weerstanden zijn. Om dit te omzeilen, ben ik van plan potentiometers en combinaties van weerstanden te gebruiken om de waarden te krijgen die ik nodig heb.

Bedankt voor het lezen van mijn instructable. Ik hoop dat het je helpt bij je projecten.

Laat alsjeblieft opmerkingen achter als je geprobeerd hebt om hetzelfde obstakel aan te pakken en hoe je het hebt opgelost. Ik zou graag meer manieren willen leren om dit te doen.

Stap 6: Referenties

Je dacht toch niet dat ik een citaat zou geven zonder een bronvermelding?

ref. 1: Adams, Douglas. Tot zover, en bedankt voor alle vissen. (Het 4e boek van de Hitchhiker's Guide to the Galaxy "trilogie")

Aanbevolen: