Weerstand matrix. Kan ik de waardes met een Arduino onderscheiden?

Hallo mensen,

Ik heb een matrix van weerstanden waarvan telkens een ingang wordt gekozen uit A, B, C en D. En daarnaast een uitgang 1,2 of 3.

Doordat elke ingang of uitgang een eigen weerstandswaarde heeft, heb ik altijd 2 weerstandswaardes die ik kan optellen.
Maar kan ik met een AD meting determineren welke in- en uitgang gebruikt worden?
Ik bedoel... Is het onderscheid niet te klein dat hij in de war raakt? Of juist te groot?

weerstandsmatrix

De scoop ligt tussen 11 en 37,7K.
Met 12 meetpunten ertussen. De marge in de weerstanden zal er zijn, maar dezen mogen niet te groot zijn dat ze waardes geven die overlappen met andere waardes.

Is zoiets te doen?

Hoi.

Het is me niet geheel duidelijk wat je wil gaan doen.
Ik zie je matrix waarbij er 1 gemeenschappelijk punt is (de enige horizontale lijn in de verbindingen.
Maar je hebt het ook over in en uitgangen (meervoud dus).
In je lijstje met mogelijke weerstanden laat je vervolgens een meting zien tussen een van de bovenste aansluitingen en een van de onderste aansluitingen.
Maar je kunt geen weerstand meten met je Arduino, je moet een spanning meten.
Nu kun je natuurlijk a,b,c,en d zowel als 1, 2, en 3 met je Arduino verbinden en daar de pinnen bedienen.
Maar dan ga je nog geen spanning meten.
Spanning zou je kunnen meten aan de horizontale lijn, dus met een 8e pin.
Maar wat je met je Arduino niet kunt doen is 1 pin aan 5 volt hangen, een andere naar keuze aan GND en vooral de overige pinnen dan laten zweven.
Dat laatste gaat dus niet.
Daarmee beïnvloeden alle pinnen dus altijd alle signalen en kun je niet dezelfde meting doen als wat je met je waarheidstabel (de lijst met weerstandwaardes) suggereert.
Ik zal niet zeggen dat je dan nog niet kunt meten welke 2 weerstanden geselecteerd zijn, maar wel dat het niet zomaar zou werken zal als wat ik denk dat je in je hoofd hebt.

Stel je gaat meten aan het gemeenschappelijke punt, en zet een "letter" pin HIGH en een "cijfer" pin HIGH.
Dan zijn alle andere pinnen dus LOW.
Zo kom je dan het dichtst in de buurt van een meting zoals je aangaf, en maak je ook iets dat lijkt op een matrix.
Omdat de overige pinnen dan LOW zijn en dus in de buurt van GND komen, heb je zo bij iedere combinatie een unieke waarde aan je ingang.
Maar waar die waarde uit zal komen en of ze genoeg te onderscheiden zijn kan ik je niet vertellen.
Onder andere omdat je van meer factoren afhankelijk bent (HIGH is niet per definitie 5 volt, maar meer dan 2.5 volt bijvoorbeeld).

Nu kan ik beschikken over een grote hoeveelheid aan weerstanden, dus ik zou de schakeling gewoon op een breadboardje bouwen en kijken wat daar dan uit komt.
Maar wanneer dat voor jou niet zo is, dan is dat wat lastiger.

In principe vind ik dit wel iets dat leuk is om eens te proberen.
Maar of ik daar de tijd voor zou kunnen vinden weet ik even niet.

Bedankt voor je reactie, MAS3,

Ik meende dat je ook weerstand kon meten, maar logischerwijs kan dat natuurlijk niet zonder een spanning/stroom over/door die weerstanden.
Ik ga me even verdiepen in de mogelijkheden.
5v uit de arduino zal een redelijk strakke 5V zijn.
Ik zou dus moeten kunnen spelen met een aangeboden 5V en een ontvangen 5V, waar ik nog een weerstand naar GND leg. Dus 5V aanbieden op de 3 ingangen, en de 4 uitgangen afzonderlijk aan massa leggen. De spanningsdeler die ik dan krijg tussen de matrix en de extra "pulldown" weerstand, zou dan een representatieve waarde kunnen geven, hoewel ik natuurlijk (wat je al aangaf) die andere uitgangen in rust wel écht aan de massa leg.
Ik heb een breadboard. En een shitload aan weerstandvariaties.
Als ik maar een gedegen verschil kan meten tussen de verschillende combinaties van de matrix, ben ik al een heel end.
Back to the oll' drawingboard, I'd say...

Nog even voor de duidelijkheid:

Je kunt je Arduino pinnen HIGH of LOW maken, dus aan ongeveer 5 volt leggen, of aan GND leggen.
Je kunt ze niet nergens aan leggen (dat heet dan dat ze zwevend zijn).
Het is wel mogelijk om pinnen in een andere toestand te brengen, maar dat is wat omslachtig en je kunt die toestand dan niet zwevend noemen.
Daarmee kun je dus niet doen wat je hierboven beschrijft, tenzij er meer componenten worden toegevoegd.

Kun je nog vertellen wat je doel is met een dergelijke schakeling ?
Wellicht gaat er dan een lampje branden bij iemand die daar al eens iets voor heeft uitgewerkt, je weet maar nooit.

Oh ja...
Ik heb een oud toetsenbord waarvan elke knop een contact uit een rij en een contact uit een kolom schakelt.
Omdat je weet welke kolom en welke rij actief zijn gemaakt, weet je welke knop ingedrukt is.
Het is lastig uit te leggen en daar maak ik me ook niet druk om.
Ik wil graag iets met weerstanden doen, wat weer een leermoment voor mijzelf is.

De ingang van de arduino zal altijd met 1K een pulldownweerstand hebben.
De contacten bepalen welke rij en welke kolom (en daarbij dus welke weerstanden) er actief zijn.
Welke dat niet zijn, zijn wellicht zwevend, maar niet van invloed op die ingang, want zelfs bij geen ingedrukt contact hangt deze aan massa via die 1K.
Je antwoorden hebben mij weer aan het werk gezet en het schema is nu als hieronder.
Die matrix... daar ga ik wel uit komen. Het gaat mij erom of ik voldoende afstand heb in weerstandswaardes, dat ik er onderscheid in kan maken.
Vergelijk het met een potmeter die van 10 tot 40K zijn waardes in 12 partjes verdeeld ziet.
Ik heb de weerstanden iets verlaagd, oftewel bij elkaar gezet, zodat de stapjes maar iets groter zijn dan 1K.

Kijk, dat is belangrijke informatie.
Het blijkt dus dat er toch andere hardware gebruikt zal worden, waardoor je wel degelijk de "zwevende" situatie zult hebben.
En het blijkt dat je ook al een matrix hebt.
Je kunt je matrix direct aansluiten op je Arduino, dus zonder weerstanden.
Vervolgens maak je een programma dat telkens kolom A, B of C hoog maakt.
Daarna kijk je of je op rij 1,2 3 of 4 ook een hoog ziet verschijnen.
Wanneer dat het geval is, weet je welke toets er ingedrukt is.
Wanneer er geen toets is ingedrukt, ga je naar de volgende kolom (A, B of C) en doe je hetzelfde trucje.
Dat is de werkelijke kracht van de matrices.
Maar je wil graag een iets andere aanpak meen ik te zien.
In het figuur hierboven moet je altijd 2 toetsen ingedrukt hebben om een andere waarde te kunnen zien dan nul.
Dus denk ik niet dat dat is wat je werkelijk wil en wat je werkelijk hebt met je matrix toetsenbord.
Er vanuit gaande dat je nooit meer dan 1 toets gelijktijdig indrukt, kun je wel iets maken.

     A      B      C
1    #      #      # 
2    #      #      # 
3    #      #      #
4    #      #      #  

Ik neem aan dat dit de layout is van je matrix (want dat is de standaard).
op die manier kun je dan een eigen weerstandswaarde toewijzen aan telkens A, B, C en 1, 2, 3 en 4.

Nul is ook een waarde dus waarom zou je die niet gebruiken.
Wanneer je het volgende doet, moet je eigenlijk al een heel eind komen:

Bij elke kolom komt er 10K bij en we beginnen bij nul, bij elke rij (van onder naar boven) komt er 1K bij en we beginnen ook met nul.
De weerstand naar GND heb ik wat hoger gemaakt zodat de 5 volt niet te hard naar beneden getrokken zal worden.

De toets linksonder zet dus 5 volt over de 2K2 weerstand en zal 5 volt op je analoge ingang zetten, dus 1023 opleveren
De toets daarnaast zal via 10K en 2K2 een spanningsdeler maken, en zal ergens rond 1/6e van de 1023 uitkomen.
De toets daar weer naast zal via 20K en 2K2 rond 1/10e uitkomen.
Zo heeft dan iedere combinatie een uniek resultaat.
Wellicht kom je met een iets andere bedrading handiger uit, maar je kunt dit met je software vertalen naar de juiste toetsen.

Je kunt ook allemaal 2K2 voor de rijen gebruiken en misschien zo wat beter uitkomen om onderscheid te maken tussen de verschillende toetsen, ik zou dat gewoon eens proberen.
Overigens, ga niet precies op een specifieke waarde testen, want er kunnen allerlei variaties optreden.
Dus gebruik een bepaalde range van waarden per toets, dan maak je het wat betrouwbaarder.

Probeer het eens en laat weten wat je resultaten zijn, ik ben benieuwd.

Ja jouw idee zal zeker gaan werken, en Mas3 heeft ook gelijk, die doet het wat simpeler en dus wat zekerder.
reken het maar eens uit met standaard weerstanden en hun marges (heb ik ook al een keer gedaan)
je zult merken dat je het met gemak kunt halen want je hebt 1023 punten op de lijn staan.
zelfs in arduino.cc staan methoden om meerdere standen op 1 ingang te kunnen zien.

Dank voor de uitgebreide uitleg, jongens!
Ik heb dus idd een bestaand systeem en even tegen mijn principes in (eigengereidheid) laat ik even zien wat de bedoeling is en waarom er bij elke toetsaanslag 2 contacten worden gemaakt.
Het principe met de weerstanden en het matrix toetsenbordje ken ik.
Volgens mij zijn die zelfs kant en klaar te verkrijgen. Wellicht met andere weerstandswaarden, maar daar valt mee te spelen.
Echter niet in mijn project. :slight_smile:

Het schema is gebaseerd op dit stukje hardware.
Druk ik bv op de 1, worden er mechanisch 2 contacten gesloten.
Omdat de contacten min of meer in serie staan, krijg je een serieschakeling van 2 weerstanden en de 1K weerstand van de pulldown.
Ik heb al eens wat filmpjes gezien van een potmeter waarvan de waarden werden opgenomen. Zoiets wil ik daarmee dus ook bouwen.

Alles is qua matrixbordje nu gelukt.
Behalve dat ik de 4 weerstanden in de verkeerde volgorde heb geplaatst, waardoor ik 741 als oplopende volgorde van weerstandswaarde heb, ipv 147.

Geen probleem verder.
Ik laat de arduino dit inlezen, waardoor het unieke karakters zijn. En dat met het gebruik van slechts 1 poort.
Tot zover...

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.