Weerstand berekening

algemene C code
Berichten: 5
Geregistreerd: 05 Sep 2013, 10:05

Weerstand berekening

Berichtdoor Christina » 16 Sep 2013, 12:35

Hello,

Om pinnen te besparen had ik graag knoppen voorbeeld gebruikt.
Maar hoe weet ik welke knop ingedrukt wordt?
Ik weet dat ik deze berekende waarden moet gebruiken wanneer VCC +5V is; 0, 144, 329, 504, 741 maar weet niet hoe ik deze waarden moet berekenen…
En vloeit de spanning of stroom naar AD0 die dan de waarden meet?

Dank om dit te lezen!

Christina
Bijlagen
5-Button-Keyboard-Diagram.jpg
5-Button-Keyboard-Diagram.jpg (46.35 KiB) 9132 keer bekeken

Advertisement

Berichten: 7
Geregistreerd: 05 Sep 2013, 22:36

Re: Weerstand berekening

Berichtdoor BartDeW » 17 Sep 2013, 00:10

analogRead(0) geeft aan hoeveel spanning er tussen de aarde en pin AD0 staat, waar 1023 staat voor 5 volt.

Als er geen knop is ingedrukt komt er 5 volt op pin nul, en geeft analogread dus 1023.

Als de knop "RIGHT" wordt ingedrukt dan staat pin 0 direct in verbinding met de aarde, en staat er dus 0 volt op pin 0. Analogread geeft 0.

Als de knop "UP" is ingedrukt dan hebben we een spanningsdeler. De spanning die er dan staat is:

330 OHM / (330 OHM + 2000 OHM) * 5 Volt = ~0.708 volt.

Dit willen we omzetten naar die 1023 schaal, dus dan moeten we het delen door 5 en keer 1023, dus we krijgen ~145.

Als we de knop Down indrukken, dan kunnen we R3 en R4 zien als 1 weerstand door de waardes op te tellen. We krijgen dan van analogRead:

(330 + 620) / (2000 + 330 + 620) * 1023 = ~329.

Zo kan je ook de rest doen.

Maar in de praktijk klopt niet alles altijd precies (ik gebruik vaak weerstanden met slechts 5% nauwkeurigheid), dus als ik jouw was zou ik een testprogramma maken. Zo iets (ik heb dit niet getest):

Code: Alles selecteren
const int analogInPin = 0;

int sensorValue = 0;
void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
}

void loop() {
  sensorValue = analogRead(analogInPin);           
  Serial.print("sensor = " );                       
  Serial.println(sensorValue);     
  delay(500);                     
}


Dan open je de Serial monitor (Ctrl + Shift + M). Nu krijg je elke halve seconde een bericht van wat pin 0 aan het meten is.


We zouden ook nog kunnen uitrekenen wat er gebeurt als je twee of meer knoppen tegelijk indrukt, maar met het bovenstaande programma vind ik dat niet de moeite waard.

Berichten: 5
Geregistreerd: 05 Sep 2013, 10:05

Re: Weerstand berekening

Berichtdoor Christina » 17 Sep 2013, 00:34

Mooi Bart!

Ik begrijp weinig van elektriciteit maar met zo een duidelijke uitleg heb ik eindelijk door hoe dit werkt!
En zal zeker de enige niet zijn.
Ga dit vlug testen voor ik naar bed ga...

Je hebt mij goed geholpen en wil je hierbij bedanken!

Groetjes,

Christina

Berichten: 48
Geregistreerd: 10 Mei 2014, 06:25

Re: Weerstand berekening

Berichtdoor lex » 21 Mei 2014, 04:27

Met hoeveel knoppen "maak contacten" kun je dit doen?

Best wel interesant als je een bedieningspaneeltje wilt maken slechts 3 draadjes naar de Arduino, vervolgens kan er een relais print met bijvoorbeeld 8 relais worden aangestuurd.

Een stroomvoorziening voor de Arduino een 7,2 tot 9 volt Li-ion accu pack "modelbouw" met een lader.

Tja de Arduino moet dan wel standalone kunnen werken. Hierover had ik al het nodige gelezen op dit forum.

Lex

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Weerstand berekening

Berichtdoor nicoverduin » 21 Mei 2014, 07:51

Als je hoogwaardige precisie weerstanden zou hebben en knoppen met een interne weerstand van 0 ohm etc etc theoretisch 1023. Omdat je onderscheid kan maken van 1023 verschillende waarden. De praktijk is uiteraard anders. Wil je nog enige flexibiliteit behouden dan zou ik het beperken tot een stuk of 10. Wel zul je rekening moeten houden met temperatuur verloop. Het soort weerstanden dat de meeste hier gebruiken willen nog wel eens iets verlopen door wisselende temperaturen. En daardoor ook de waarden van de weerstanden en daardoor ook de spanningen die je meet.
Je doet er beter aan om met de weerstanden die je gaat gebruiken de waardes meten en dan in een tabel stoppen met een minimum en maximum waarde per knop waarbij de gemeten waarde in het midden zit.
't is maar een idee.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 163
Geregistreerd: 15 Dec 2012, 21:02
Woonplaats: Delfzijl

Re: Weerstand berekening

Berichtdoor FPCUser » 21 Mei 2014, 09:53

Als aanvulling op bovenstaand bericht van Nico:

Als je voor de uitlezing een switch / case constructie gebruikt, kun je de spreiding opvangen door een bereik op te geven.
Bij 5 toetsen kun je gerust een marge van +/- 10% opgeven zonder overlap, zie bijgevoegd .

M.v.g.

Code: Alles selecteren
/*
  sketch_detectie_5toetsen_V2
 
  Inlezen 1 van de 5 toetsen op een analoge ingang
 
 Detektielus op A0
 Trekweerstand ingang A0 naar plus voeding => 2k2
 Meldweerstanden => 330, 620, 1k, 3k3
 A ...D => maakkontakten (NO) naar GND
 
               A0
               |
 +5V  --[2k2]--++--[330]--+--[620]--+--[1k ]--+--{3k3]--+
                |         |         |         |         |
                A         B         C         D         E
                |         |         |         |         |
                +---------+---------+---------+---------+-- GND
               
 Berekeningen:
 
       Analoge ingang             
              |                waarde = (RL / (RL + RV)) * 1024
 +5V --[ RV ]--+--[ RL ]-- GND
 
 v.b. toets C
 waarde = (330 + 620) / (330 + 620 + 2200) * 1024
        = 950 / 3150 * 1024
        = 309 
 */

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println(Toets(analogRead(A0)));
  delay(1000);
  }


String Toets(int ingelezenWaarde) {
  switch(ingelezenWaarde) {
    // marges zijn +/- 10% v/d berekende waarden
  case 0 ... 10:
    // berekend 0, idem gemeten
    return "A";
    break;
  case 121 ... 147:
    // berekend 134, gemeten 132
    return "B";
    break;
  case 278 ... 340:
    // berekend 309, gemeten 310
    return "C";   
    break;
  case 433 ... 529:
    // berekend 481, gemeten 482
    return "D";   
    break;
  case 649 ... 793:
    // berekend 721, gemeten 722
    return "E";   
    break;   
  default:
    // berekend 1023, idem gemeten
    return "Geen toets ingedrukt";   
  }   
}


Berichten: 48
Geregistreerd: 10 Mei 2014, 06:25

Re: Weerstand berekening

Berichtdoor lex » 21 Mei 2014, 12:06

Prachtige oplossing als je een schakelsysteem met bedieningspaneel wilt maken.

Scheelt ook een hoop ingangen van de Arduino en kabels die getrokken moeten worden.

Anders is voor elke schakelaar "drukknop" een ingang van de Arduino nodig.

Ik zag op E-bay zelfs schakelborden met 16 relais voor $18,- inclusief verzendkosten.

Ik heb dit opgeslagen bij arduino projecten.

Lex

Berichten: 48
Geregistreerd: 10 Mei 2014, 06:25

Re: Weerstand berekening

Berichtdoor lex » 21 Mei 2014, 19:26

Ik vond over dit onderwerp op Youtube de hieronder staande link.

https://www.youtube.com/watch?v=nXl4fb_LbcI

Kevin Darrah, heem zeer interessante projecten zeker voor beginners met zeer duidelijk uitleg "Engels"

LINK https://www.youtube.com/user/kdarrah1234

Lex

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Weerstand berekening

Berichtdoor shooter » 21 Mei 2014, 21:18

ik ben vanavond lui dus even opgezocht op arduino.cc
vond er een prima libje met beschrijving.
kijk in de pde hoe je het allemaal aan elkaar moet maken.
met deze schakeling kun je meerdere kontakten tegelijk zien. anders dan al de bovenstaande.
theoretisch kun je er 10 doen, maar 8 is echt wel praktisch max.
5 is een prima keuze.

als je meer hulp nodig hebt dan hoor ik het graag.
paul deelen
shooter@home.nl

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 10 gasten