Arduino Nano - DIP Schakelaar

Dual In-line Package (DIP) schakelaars worden vaak gebruikt in de elektronicawereld voor configuratietaken, zoals het instellen van apparaatadressen, communicatie-instellingen, beveiligingscodes, werkingsmodi en meer. In deze tutorial bespreken we hoe u een DIP schakelaar kunt gebruiken met de Arduino Nano. Specifiek behandelen we:

Arduino Nano with DIP Switch

Benodigde Hardware

1×Official Arduino Nano
1×Alternatief: DIYables ATMEGA328P Nano Development Board
1×USB A naar Mini-B USB kabel
1×DIP Schakelaar
1×Breadboard (experimenteerprint)
1×Jumperdraden
1×(Aanbevolen) Schroefklem Uitbreidingsboard voor Arduino Nano
1×(Aanbevolen) Breakout Uitbreidingsboard voor Arduino Nano
1×(Aanbevolen) Stromsplitter voor Arduino Nano

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 Schakelaar

DIP schakelaars worden voornamelijk gebruikt voor het configureren van apparaten. Hiermee kan de gebruiker parameters instellen zoals apparaatadressen, communicatie-instellingen, beveiligingscodes, bedrijfsmodi en systeemvoorkeuren voor diverse toepassingen en industrieën.

Een DIP schakelaar bestaat uit meerdere kleine schuifschakelaars die samen zijn gebundeld, waarbij elke schuifschakelaar een “positie” wordt genoemd. DIP schakelaars zijn verkrijgbaar in verschillende types, afhankelijk van het aantal posities. Zo zijn er 2-positie, 4-positie, 5-positie, 6-positie, 8-positie en 10-positie DIP schakelaars.

Elke positie op een DIP schakelaar vertegenwoordigt een configureerbare bit van een getal. Door de posities tussen ON en OFF te schakelen, kunnen we de gewenste numerieke waarde instellen.

Pinout

DIP Switch Pinout
image source: diyables.io

Een DIP schakelaar bestaat uit twee rijen met pinnen, waarbij het aantal pinnen per rij overeenkomt met het aantal posities. Een 4-positie DIP schakelaar heeft bijvoorbeeld totaal 8 pinnen, verdeeld in 4 pinnen aan elke zijde. In de constructie vormt elk paar tegenoverliggende pinnen samen een schuifschakelaar. Het is niet nodig om onderscheid te maken tussen de pinnen aan de twee zijden, want deze kunnen worden verwisseld.

Hoe Werkt Het

Bij DIP schakelaars betekent een schakelaar in de ON-stand dat de schakelaar gesloten is, oftewel ingeschakeld. Dit houdt in dat er een elektrisch contact is en er stroom door de schakelaar kan lopen.

Conversie wordt als de schakelaar in de OFF-stand staat, waarmee wordt bedoeld dat de schakelaar open is en geen elektrisch contact maakt. Hierdoor kan er geen stroom door de schakelaar lopen.

Samengevat:

  • ON-stand: Circuit gesloten, stroom kan vloeien.
  • OFF-stand: Circuit open, stroom wordt geblokkeerd.

Wanneer u één zijde van een schakelaar verbindt met GND en de andere zijde met een Arduino Nano-pin, en deze pin configureert als een digitale input met pull-up, toont de onderstaande tabel de relatie tussen de schakelaarstand en de waarden die Arduino Nano uitleest:

DIP switch position Binaire weergave Circuit status Arduino Nano pin status
ON 1 GESLOTEN LOW
OFF 0 OPEN HIGH

In de volgende paragrafen gebruiken we een 4-positie DIP schakelaar als voorbeeld. U kunt dit makkelijk aanpassen voor 2-, 3-, 5-, 6-, 8- en 10-positie DIP schakelaars...

Aansluitschema

Arduino Nano DIP switch Aansluitschema

This image is created using Fritzing. Click to enlarge image

Zie De beste manier om Arduino Nano en andere componenten van stroom te voorzien.

Arduino Nano Code - DIP Schakelaar

We leren aan de hand van twee codevoorbeelden:

  • Het uitlezen van de ON/OFF-status van elke positie van de DIP schakelaar.
  • Het coderen van de posities tot een getal.

Arduino Nano code - Uitlezen van ON/OFF-status van de DIP schakelaar

/* * Deze Arduino Nano code is ontwikkeld door newbiely.nl * Deze Arduino Nano code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino-nano/arduino-nano-dip-switch */ #define POSITION_NUM 4 #define ON LOW #define OFF HIGH // define the Arduino Nano pins connected to the dip switch const int SWITCH_PINS[] = { 4, 5, 6, 7 }; 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); }

Korte Stappen

  • Voer de bedrading uit volgens het bovenstaande aansluitschema
  • Verbind de Arduino Nano met uw pc via de USB-kabel
  • Open de Arduino IDE
  • Selecteer het juiste bord en de juiste poort
  • Klik op de Upload-knop in de Arduino IDE om de code naar de Arduino Nano te uploaden
  • Zet elke positie van de DIP schakelaar één voor één op ON.
  • Bekijk het resultaat in de Seriële Monitor.
COM6
Send
positie 1: OFF positie 2: OFF positie 3: OFF positie 4: OFF positie 1: ON positie 2: OFF positie 3: OFF positie 4: OFF positie 1: ON positie 2: ON positie 3: OFF positie 4: OFF positie 1: ON positie 2: ON positie 3: ON positie 4: OFF positie 1: ON positie 2: ON positie 3: ON positie 4: ON
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Arduino Nano code - Coderen van de status van de DIP schakelaar tot een getal

/* * Deze Arduino Nano code is ontwikkeld door newbiely.nl * Deze Arduino Nano code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino-nano/arduino-nano-dip-switch */ #define POSITION_NUM 4 #define ON LOW #define OFF HIGH // define the Arduino Nano pins connected to the dip switch const int SWITCH_PINS[] = { 4, 5, 6, 7 }; 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); }

Korte Stappen

  • Upload de bovenstaande code naar de Arduino Nano
  • Zet elke positie van de DIP schakelaar één voor één op ON.
  • Bekijk het resultaat in de Seriële Monitor, het ziet er ongeveer zo uit:
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 standen van de schuifschakelaars. De onderstaande tabel toont de mapping tussen ON/OFF-standen en de decimale waarde voor een 4-positie DIP schakelaar:

Positie-1Positie-2Positie-3Positie-4Binaire WaardeDecimale Waarde
OFF OFF OFF OFF 0000 0
OFF OFF OFF ON 0001 1
OFF OFF ON OFF 0010 2
OFF OFF ON ON 0011 3
OFF ON OFF OFF 0100 4
OFF ON OFF ON 0101 5
OFF ON ON OFF 0110 6
OFF ON ON ON 0111 7
ON OFF OFF OFF 1000 8
ON OFF OFF ON 1001 9
ON OFF ON OFF 1010 10
ON OFF ON ON 1011 11
ON ON OFF OFF 1100 12
ON ON OFF ON 1101 13
ON ON ON OFF 1110 14
ON ON ON ON 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.

※ 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!