Arduino - DIP Switch

DIP (Dual In-line Package) schakelaars worden veel gebruikt in elektronica voor configuratiedoeleinden, zoals het instellen van apparaatadressen, het aan- of uitzetten van functies, enzovoort. In deze handleiding leert u hoe u een DIP switch gebruikt met Arduino. We behandelen in detail:

Arduino with DIP Switch

Hardware Benodigd

1×Arduino Uno R3
1×USB 2.0-kabel type A/B
1×DIP Schakelaar
1×Breadboard (experimenteerprint)
1×Jumper Wires (verbindingsdraden)
1×(Aanbevolen) Schroefklem Block Shield voor Arduino Uno
1×(Aanbevolen) Breadboard-Shield voor Arduino Uno
1×(Aanbevolen) Behuizing voor Arduino Uno
1×(Aanbevolen) Prototyping Basisplaat & Breadboard Kit voor Arduino Uno

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over DIP Switch

DIP schakelaars worden vooral gebruikt voor apparaatconfiguratie, zodat gebruikers parameters kunnen instellen zoals apparaatadres, communicatie-instellingen, beveiligingscodes, bedrijfsmodus en systeemvoorkeuren in diverse industrieën en toepassingen.

Een DIP switch bestaat uit meerdere kleine schuifschakelaars die samen verpakt zijn. Elke schuifschakelaar wordt een "positie" genoemd. DIP switches zijn er in verschillende uitvoeringen, afhankelijk van het aantal posities. Bijvoorbeeld: 2-positie DIP switches, 4-positie DIP switches, 5-positie DIP switches, 6-positie DIP switches, 8-positie DIP switches en 10-positie DIP switches.

Een DIP switch kan een configureerbaar getal vertegenwoordigen. Elke positie op de switch correspondeert met een bit van dat getal. Door de posities tussen AAN en UIT te schakelen, kan het gewenste getal worden ingesteld.

Pinout

DIP Switch Pinout
image source: diyables.io

Een DIP switch bestaat uit twee rijen pinnen, waarbij het aantal pinnen per rij overeenkomt met het aantal beschikbare posities op de switch. Bijvoorbeeld, een 4-positie DIP switch heeft in totaal 8 pinnen, verdeeld in 4 pinnen aan elke zijde. Binnen de DIP switch vormen elk paar tegenoverliggende pinnen een schuifschakelaar. Let op: het is niet nodig om onderscheid te maken tussen de pinnen aan beide zijden, omdat deze onderling verwisselbaar zijn.

Hoe Het Werkt

Bij DIP switches betekent een AAN-positie dat de schakelaar gesloten is. Dit houdt in dat er een elektrische verbinding is, waardoor stroom door de schakelaar kan lopen.

Een UIT-positie betekent dat de schakelaar open is. In dit geval is de elektrische verbinding verbroken en kan er geen stroom door de schakelaar vloeien.

Ter verduidelijking:

  • AAN-positie: Gesloten circuit, stroom kan vloeien.
  • UIT-positie: Open circuit, stroom wordt geblokkeerd.

Wanneer we een zijde van een schakelaar aansluiten op GND en de andere kant op een Arduino pin, en die Arduino pin configureren als digitale input met pull-up, dan geldt de onderstaande tabel voor de relatie tussen de positie van de schakelaar en de waarden die Arduino leest:

DIP switch positie Binaire weergave Circuit status Arduino pin status
AAN 1 GESLOTEN LOW
UIT 0 OPEN HIGH

In de volgende onderdelen gebruiken we een 4-positie DIP switch als voorbeeld. U kunt dit eenvoudig aanpassen voor 2-positie, 3-positie, 5-positie, 6-positie, 8-positie en 10-positie DIP switches.

Bedradingsschema

Arduino DIP switch Bedradingsschema

This image is created using Fritzing. Click to enlarge image

Arduino Code - DIP Switch

We leren aan de hand van twee codevoorbeelden:

  • Lezen van de AAN/UIT-status van individuele posities van de DIP switch.
  • Coderen van de posities naar een getal.

Arduino code - Lezen van de AAN/UIT-status van de DIP switch

/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino/arduino-dip-switch */ #define POSITION_NUM 4 #define ON LOW #define OFF HIGH // define the pins connected to the dip switch const int SWITCH_PINS[] = { 2, 3, 4, 5 }; void setup() { // initialize serial communication Serial.begin(9600); // set the dip switch pins as inputs with pull-up resistors enabled for (int i = 0; i < POSITION_NUM; i++) pinMode(SWITCH_PINS[i], INPUT_PULLUP); } void loop() { // Read the state of each switch position for (int i = 0; i < POSITION_NUM; i++) { Serial.print("position "); Serial.print(i + 1); Serial.print(": "); int state = digitalRead(SWITCH_PINS[i]); if (state == ON) Serial.println("ON "); else Serial.println("OFF "); } Serial.println(); // add a delay to prevent rapid readings delay(500); }

Snelle Stappen

  • Maak de bedrading aan volgens het bovenstaande schema
  • Verbind Arduino met de PC via de USB-kabel
  • Open de Arduino IDE
  • Selecteer het juiste board en de juiste poort
  • Klik op de Upload knop in de Arduino IDE om de code naar Arduino te uploaden
  • Zet elke positie van de DIP switch één voor één op AAN
  • Bekijk het resultaat op de Seriële Monitor.
COM6
Send
positie 1: UIT positie 2: UIT positie 3: UIT positie 4: UIT positie 1: AAN positie 2: UIT positie 3: UIT positie 4: UIT positie 1: AAN positie 2: AAN positie 3: UIT positie 4: UIT positie 1: AAN positie 2: AAN positie 3: AAN positie 4: UIT positie 1: AAN positie 2: AAN positie 3: AAN positie 4: AAN
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Arduino code - Coderen van de status van de DIP switch naar een getal

/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino/arduino-dip-switch */ #define POSITION_NUM 4 #define ON LOW #define OFF HIGH // define the pins connected to the dip switch const int SWITCH_PINS[] = { 2, 3, 4, 5 }; void setup() { // Initialize serial communication Serial.begin(9600); // Set the DIP switch pins as inputs with pull-up resistors enabled for (int i = 0; i < POSITION_NUM; i++) pinMode(SWITCH_PINS[i], INPUT_PULLUP); } void loop() { int encoded_state = 0; for (int i = 0; i < POSITION_NUM; i++) { int state = digitalRead(SWITCH_PINS[i]); if (state == ON) encoded_state |= 1 << (POSITION_NUM - i - 1); } Serial.print("encoded state: "); Serial.println(encoded_state); // add a delay to prevent rapid readings delay(500); }

Snelle Stappen

  • Upload de bovenstaande code naar Arduino
  • Zet elke positie van de DIP switch één voor één op AAN
  • Bekijk het resultaat op de Seriële Monitor, het zal eruitzien als hieronder.
COM6
Send
encoded state: 0 encoded state: 1 encoded state: 2 encoded state: 3 encoded state: 4 encoded state: 5 encoded state: 6 encoded state: 7 encoded state: 8 encoded state: 9 encoded state: 10 encoded state: 11 encoded state: 12 encoded state: 13 encoded state: 14 encoded state: 15
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Let op dat de waarde afhangt van de posities van elke schuifschakelaar. De onderstaande tabel toont de relatie tussen AAN/UIT posities en de decimale waarde voor een 4-positie DIP switch:

Positie-1Positie-2Positie-3Positie-4Binaire waardeDecimale waarde
UIT UIT UIT UIT 0000 0
UIT UIT UIT AAN 0001 1
UIT UIT AAN UIT 0010 2
UIT UIT AAN AAN 0011 3
UIT AAN UIT UIT 0100 4
UIT AAN UIT AAN 0101 5
UIT AAN AAN UIT 0110 6
UIT AAN AAN AAN 0111 7
AAN UIT UIT UIT 1000 8
AAN UIT UIT AAN 1001 9
AAN UIT AAN UIT 1010 10
AAN UIT AAN AAN 1011 11
AAN AAN UIT UIT 1100 12
AAN AAN UIT AAN 1101 13
AAN AAN AAN UIT 1110 14
AAN AAN AAN AAN 1111 15

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

Bekijk onze video-tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten en helpt u beter te begrijpen hoe u een DIP switch met Arduino gebruikt.

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!