Input Multiplexer (Eingänge vervielfachen)

Wenn zu wenig Eingänge am Arduino für die gewünschte Anwendung verfügbar sind dann hilft ein Input Multiplexer wie der CD4051 weiter. Das Bauteil ist sehr preiswert und erweitert erweitert einen Eingang auf 8 Eingänge.

Hier die Belegung vom CD4051 ( A,B,C bedeutet S0,S1,S3 )

Hier ein Testaufbau:

Beschaltung:

   Arduino    CD4051
   
   2       =  11 (S0)
   3       =  10 (S1)    
   4       =  9  (S2)     
   A7      =  3  (In Out)
   GND     =  6  (ING)
   GND     =  7  (Vee)
   GND     =  8  (Vss)
   5V+     = 16  (Vdd)
             

Die maximal 8 Sensoren/Schalter/Poti können dann an den Channel I/O Pins angeschlossen werden.

Hier ein Tesprogramm welches auf der Seriellen Schnittstelle die jeweiligen Inputs ausgibt:

In meinem Beispielaufbau habe ich ein Poti als Sensor 1 und 3 Schalter als Sensoren 2-4.

Testprogramm:

    /*
     Analog IN Multiplexer CD4051
     
     Connections:
     
     Arduino    CD4051
     
     2       =  11 (S0)
     3       =  10 (S1)    
     4       =  9  (S2)     
     A7      =  3  (In Out)
     GND     =  6  (ING)
     GND     =  7  (Vee)
     GND     =  8  (Vss)
     5V+     = 16  (Vdd)
     
     */  


// Setup
    const int analogInPin = A7;  // Analog input pin from Multiplexer
    const int maxi = 8;          //how many inputs from 4051 (maximum 8)
    const int s0Pin = 2;         //Pin on Arduino connected to 4051 S0
    const int s1Pin = 3;         //Pin on Arduino connected to 4051 S1
    const int s2Pin = 4;         //Pin on Arduino connected to 4051 S2

// Variables
    int sensorValue = 0;         // Sensor Value
    int r0 = 0;                  //value of select pin at the 4051 (s0)
    int r1 = 0;                  //value of select pin at the 4051 (s1)
    int r2 = 0;                  //value of select pin at the 4051 (s2)
    int count = 0;               //which y pin we are selecting

    void setup(){
      Serial.begin(9600); 
      pinMode(s0Pin, OUTPUT);    // s0
      pinMode(s1Pin, OUTPUT);    // s1
      pinMode(s2Pin, OUTPUT);    // s2
    }
     
    void loop () {
     
      for (count=0; count<maxi; count++) {
     
        // determine the bits 
        r0 = bitRead(count,0);
        r1 = bitRead(count,1);
        r2 = bitRead(count,2);
        
        // set S0,S1,S2 to 4051
        digitalWrite(s0Pin, r0);
        digitalWrite(s1Pin, r1);
        digitalWrite(s2Pin, r2);
      
      // Read the values an output the result to serial
      Serial.print(" sensor " );                       
      Serial.print(count + 1);    
      Serial.print(" : " );   
      sensorValue = analogRead(analogInPin);       
      Serial.print(sensorValue);    
     
      }  
      
      Serial.println(" ");
    }

Weitere Informationen:

* Playground Arduino erklährt auch wie 64 Eingänge auf einen Eingang zusammengelegt werden kann

Persönliches Fazit: Dieses Bauteil benötigt keine zusätzlichen Bauteile, das Coding ist sehr überschaubar und der Preis sehr niedrig. Dafür bietet es aber einen enorm grossen Mehrwert und kann sehr vielfältig eingesetzt werden.