ArduinoCharlieplexing with 12 LEDs

Een aantal projecten terug hebben we al gekeken naar Charlieplexing met 3 pins om hiermee 6 LEDs aan te sturen. Nu gaan we een stapje verder en het met 12 LEDs proberen.

Aantal LEDs = n^2 - n 
Waarbij n is het aantal pins.

Als we in deze formule 3 invulden, dan kregen we 3-kwadraat is 9 en dan nog 3 eraf, waardoor we op 6 LEDs uitkwamen. Nu vullen we 4 in. 4-kwadraat is 16, en nu 4 eraf, geeft aan dat we 12 LEDs kunnen aansturen. Kijk nu komen we ergens.

Maar hoe krijgen we de informatie van 4 draadjes zo aangesloten dat we 12 LEDs kunnen aansluiten. Daarvoor heb ik onderstaand schema gemaakt. Je ziet hier onderscheid tussen H en L. Dit zijn de hoge (H) en lage (L) stroomwaarden op de Arduino. Van hoog door de LED naar de laag. De waarden met een puntje doen niet mee. Dit maken we door deze poorten in de Arduino op INPUT te zetten. Ze doen dan niet mee in de stroomkring.



ArduinoAansluiten

Het aansluiten lijkt op het eerste gezicht een kleine ramp. Maar eigenlijk is het best wel eenvoudig als je de volgende volgorde aanhoud. Er zijn 4 verbindingen naar het breadboard vanuit de Arduino, hang hier meteen een weerstand aan, dan hoef je enkel door te lussen.

Voor het verdere aansluiten begin je met de Pin2 kabel. Deze gaat naar de + van led1. Daarna door (!) naar de - van led2, door naar de + van led7 en dan verder naar de - van led8, tot slot naar de + van led11 om te eindigen bij de - van led12. Je zit om deze aan te sluiten heb ik maar 6 kabels met pin nodig (plus de ene kabel voor de connectie met de Arduino). Ook voor de andere pins gaat dit zo.



ArduinoBreadboard

Links staan hier de kabels die van de Arduino komen. Daar aangesloten op poort 2, 3, 4 en 5.

De dikke blauwe punten zijn waar we de kabels doorlussen. Let hierbij wel op het stukje net onder LED7 en LED8. Hieronder nog even overdreven groot weergegeven. De kabels lopen vanuit LED7 en vanuit LED8 naar beneden ze komen hier NIET in contact met de rode draad! De rode draad loopt van links naar rechts zonder de kabels van LED7 en LED8 hier te raken. Denk aan een flyover in de snelweg.



ArduinoSource code
/*
  Charlieplexing with 12 LEDs

  (C) copyright www.punthooft.nl 2019-2024 
*/

// Variables
int blinkMode = 0;

// Setup function runs once when powerup the board and on reset 
void setup() {
  // Nothing for now
}

// The loop function runs over and over again forever
void loop() {

  blinkMode++;
  if (blinkMode>12) {
    blinkMode = 1;
  }

  blinkLed(blinkMode);
  delay(100);
}

// Function blink a LED
void blinkLed(int led) {

  pinMode(2, INPUT);
  pinMode(3, INPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);

  switch(led){

    case(1) :
       pinMode(2, OUTPUT);
       pinMode(3, OUTPUT);
       digitalWrite(2, HIGH);
       digitalWrite(3, LOW);
       break;
    case(2) :
       pinMode(2, OUTPUT);
       pinMode(3, OUTPUT);
       digitalWrite(2, LOW);
       digitalWrite(3, HIGH);
       break;
    case(3) :
       pinMode(3, OUTPUT);
       pinMode(4, OUTPUT);
       digitalWrite(3, HIGH);
       digitalWrite(4, LOW);
       break;
    case(4) :
       pinMode(3, OUTPUT);
       pinMode(4, OUTPUT);
       digitalWrite(3, LOW);
       digitalWrite(4, HIGH);
       break;
    case(5) :
       pinMode(4, OUTPUT);
       pinMode(5, OUTPUT);
       digitalWrite(4, HIGH);
       digitalWrite(5, LOW);
       break;
    case(6) :
       pinMode(4, OUTPUT);
       pinMode(5, OUTPUT);
       digitalWrite(4, LOW);
       digitalWrite(5, HIGH);
       break;
    case(7) :
       pinMode(2, OUTPUT);
       pinMode(4, OUTPUT);
       digitalWrite(2, HIGH);
       digitalWrite(4, LOW);
       break;
    case(8) :
       pinMode(2, OUTPUT);
       pinMode(4, OUTPUT);
       digitalWrite(2, LOW);
       digitalWrite(4, HIGH);
       break;
    case(9) :
       pinMode(3, OUTPUT);
       pinMode(5, OUTPUT);
       digitalWrite(3, HIGH);
       digitalWrite(5, LOW);
       break;
    case(10) :
       pinMode(3, OUTPUT);
       pinMode(5, OUTPUT);
       digitalWrite(3, LOW);
       digitalWrite(5, HIGH);
       break;
    case(11) :
       pinMode(2, OUTPUT);
       pinMode(5, OUTPUT);
       digitalWrite(2, HIGH);
       digitalWrite(5, LOW);
       break;
    case(12) :
       pinMode(2, OUTPUT);
       pinMode(5, OUTPUT);
       digitalWrite(2, LOW);
       digitalWrite(5, HIGH);
       break;
    default: 
       break;
  }
}


ArduinoOpmerkingen

Om de LED's te beschermen tegen teveel spanning zijn voorschakelweerstanden nodig. Een weerstand per LED. Ik gebruik er hier van 220 Ohm. De te gebruiken weerstandswaarde is echter afhankelijk van het type/soort/kleur van de LED. Uitrekenen is eenvoudig, zie de theorie in componenten of gebruik meteen de rekenhulp



Categorie menu

Copyright 2024 www.punthooft.nl
We do not collect cookies for advertisement. Your data is never send to third parties.