ArduinoCharlieplexing with 6 LEDs

In het vorige project hebben we een Charlieplexing oplossing gemaakt met 2 pin verbindingen en 2 LEDs. Hier gaan we een pin verbinding meer gebruiken.

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

In de vorige oplossing hadden we 2 pins. Dus is n=2. In de formule n-kwadraat - n, is dat 4 - 2 = 2 LEDs.

Nu zetten we het aantal pins op 3. Dus is nu n=3. In de formule is dat 3-kwadraat - 3 = 9 - 3 = 6 LEDs. Dus door een lijntje erbij kunnen we nu 6 LEDs aansturen. Als je dit wilt proberen met 4 pin lijnen kun je 12 LEDs aansluiten. Met 5 lijnen 20 LEDs etc.

Het aansluiten van de LEDs is een precisie werkje dat overigens goed te doen is. Er komen 3 pins binnen. Het beste kun je de verbindingen doorlussen.



ArduinoCharlieplexing

De slimmigheid in Charlieplexing is het gebruik van de eigenschap van een LED dat deze het enkel en alleen doet als de stroom van + naar - loopt. Dit hebben we in het vorige project al zien gebruiken. Nu is dat uitgebreid met een eigenschap van de Arduino. Om stroom te laten lopen is een kringetje nodig. Door een pin als OUTPUT te definieren is deze onderdeel van de stroomkring. Door echter de niet gebruikte pins als INPUT te definieren maken deze geen onderdeel meer uit van de stroomkring.


In het figuur hierboven is aangegeven per pin (vertikaal) wat de waarden voor de LEDs (horizontaal) dient te zijn. Voor LED1 moet de waarde op pin2 LOW zijn, de waarde op pin3 HIGH en pin4 mag geen onderdeel van de stroomkring zijn.

Voor LED5 moet de waarde op pin2 LOW zijn, de waarde op pin4 HIGH en pin3 mag hier geen onderdeel van de stroomkring zijn.



ArduinoBreadboard


Het eerste schema is de methode die ik zelf heb gebruik om de schakeling te maken. In het figuur eronder de Fritzing tekening. Volg de blauwe kabels zijn voor pin2 aansluitingen, de rode kabel voor pin3 en de gele kabel voor pin4.

Nummering van de LEDs in de Fritzing van links naar rechts.

Bij het aansluiten heb ik de waarden doorgelust. Dus volg vanuit pin2 de blauwe kabel door de weerstand, dan naar de - van LED1, door naar de + van LED2, door naar de - van LED5 en uiteindelijk naar de + van LED6. Als je het op die manier uitsluit heb je per pootje van de LED 2 stekkers nodig. De - van LED3, de + van LED6, de - van LED6 slechts 1 aansluiting. Dit laatste ter controle.



ArduinoSketch
/*
  Charlieplexing with 2 LEDs

  www.punthooft.nl
*/

// Variables
int blinkMode = 0;

void setup() {

}

void loop() {

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

  blinkLed(blinkMode);
  delay(60);
}

void blinkLed(int led) {

  switch(led){

    case(1) :
       pinMode(2, OUTPUT);
       pinMode(3, OUTPUT);
       pinMode(4, INPUT);
       digitalWrite(2, LOW);
       digitalWrite(3, HIGH);
       break;
    case(2) :
       pinMode(2, OUTPUT);
       pinMode(3, OUTPUT);
       pinMode(4, INPUT);
       digitalWrite(2, HIGH);
       digitalWrite(3, LOW);
       break;
    case(3) :
       pinMode(2, INPUT);
       pinMode(3, OUTPUT);
       pinMode(4, OUTPUT);
       digitalWrite(3, LOW);
       digitalWrite(4, HIGH);
       break;
    case(4) :
       pinMode(2, INPUT);
       pinMode(3, OUTPUT);
       pinMode(4, OUTPUT);
       digitalWrite(3, HIGH);
       digitalWrite(4, LOW);
       break;
    case(5) :
       pinMode(2, OUTPUT);
       pinMode(3, INPUT);
       pinMode(4, OUTPUT);
       digitalWrite(2, LOW);
       digitalWrite(4, HIGH);
       break;
    case(6) :
       pinMode(2, OUTPUT);
       pinMode(3, INPUT);
       pinMode(4, OUTPUT);
       digitalWrite(2, HIGH);
       digitalWrite(4, LOW);
       break;
    default: 
       break;
  }
}


ArduinoOpmerkingen

De gebruikte weerstanden zijn 220 Ohm

In het schema lopen er geen lijnen naar GND. Er lopen slechts 3 lijnen vanuit de pins van de Arduino. Alle pin lijnen zijn direct verbonden met een weerstand. Het aansluiten van zoveel lijntjes is vaak lastig. Als het niet werkt is het vaak het snelst om helemaal overnieuw te doen.

De default in de switch in functie blinkLED is eigenlijk niet nodig, maar in het kader van netjes programmeren is het goed om altijd een default (een soort overig putje) op te nemen.




Lees Verder in deze categorie

Copyright 2018 www.punthooft.nl

We do not collect cookies for advertisement. Your data is never send to third parties.