Arduino Nano Companion Kit – Essentiële Componenten & Hulpmiddelen voor DIY Electronica
Onderdelen en benodigdheden
| Arduino Nano R3 | × | 1 |
| USB-A naar Mini-USB kabel | × | 1 |
| Weerstand 10k ohm (2× 220Ω, 1× 1k, 4.7k, 47k, 100k) | × | 4 sets |
| Enkelvoudige potentiometer 10k ohm | × | 1 |
| SparkFun Drukknop 12mm | × | 2 |
| Schuifschakelaar | × | 3 |
| Female Header 8-pins 1 rij (0.1") | × | 4 |
| Male Header 36-pins 1 rij lang (0.1") | × | 2 |
| Adafruit RGB Backlight LCD 16x2 | × | 1 |
| 4xAA batterijhouder | × | 1 |
Nodige gereedschappen
- Solderbout
- Lijmpistool
Over dit project
De Companion IC is een compacte, IC-vormige multifunctionele tool: klok, ohmmetermeter, capaciteitsmeter en diodetester in één. Activeer hem door op pin 1 van de IC te druken. Houd hem op je werkbank voor snelle componenttests en tijdcontrole. Werkt op batterijen of via USB.
Het idee ontstond toen ik condensators wilde testen zonder capaciteitsmeter. Ik ontdekte dat een Arduino dit kan. In plaats van ongebruikte pinnen te laten, voegde ik een autoranging ohmmetermeter, snelle LED/diodetester en RTC-klok toe. Het ontwerp moest uniek zijn – zo ontstond de IC-vorm.
Update (07/01/2016): Optionele doorgangstest toegevoegd (zie reacties).
Deze handleiding legt stap voor stap uit hoe je dit zelf bouwt. Het is beginner-vriendelijk – met 2-3 weken Arduino/electronica-ervaring kom je eruit. Het ontwerp is modificeerbaar; je kunt functies toevoegen of weglaten. Ik maakte het behuizing van karton, maar hout of 3D-printen kan ook.
Alle code is sterk gecommentarieerd en netjes geïndenteerd. We bouwen de schakeling en code stap voor stap op. Dit helpt bij het begrijpen. Vragen? Laat een reactie achter.
Zelfs als je er geen maakt, probeer het op een breadboard of lees het door – er zit altijd een handig trucje in dat je ergens van pas komt.
Stap 1: Gereedschappen en componenten
Componentenlijst (winkellijken ter referentie):
- 1× Arduino Nano V3 (clone met CH340G) – eBay
- Mini USB-kabel (Mini, niet Micro!)
- Karton (~2mm dik, verpakkingsdoos)
- 4× 10kΩ weerstand
- 2× 220Ω weerstand
- 1× set (1k, 4.7k, 47k, 100k) Ω weerstanden
- 1× 10kΩ potentiometer (klein, voor LCD-contrast)
- 2× Micro drukknop (reset en modus)
- 3× Kleine schuifschakelaars (backlight, pinnen 0/1 uitschakelen voor Serial)
- 1× In/uitschakelaar (toggle/latching) voor voeding
- Enkele condensators, diodes, LED's voor testen
- 4× Female header strip (40 pins)
- 2× Male header strip (40 pins)
- 1× 16x2 karakter LCD
- 1× DS3231 of DS1307 RTC Module (koop geen goedkope eBay-versies – nepchips, onnauwkeurig)
- 4× AA batterijen (of AAA, makkelijker maar minder capaciteit)
- 1× 4xAA/AAA batterijhouder (plat model)
- Enkeladrig draad (22 AWG, breadboard-type)
- Lintkabel (of dun gedraaide draden)
- 2× Kleine bout en moer (1.3cm lang)
- Zwart acrylverf en penseel
Gereedschappen:
- Solderbout, solder, desolderlint
- Lijmpistool, maskerplakband, transparante plakband
- Draadstripper, kniptang, scherpe mesjes, schaar
Stap 2: Ohmmetermeter – Concept
Het meetprincipe berust op de spanningsdeler. Weerstandswaarden zijn aanpasbaar; pas de ranges (voor autoranging) in de code aan. Test eerst op breadboard.
Let op: Voor Arduino Nano met CH340G-chip: installeer de juiste driver (Windows 7/8/10, Mac apart). Selecteer "Arduino Nano" in Boards-menu en juiste COM-poort.
Code (Ohmmetermeter)
// Analog pin voor weerstandsmeting
int Apin = 7;
float r1 = 1000, r2 = 4700, r3 = 10000, r4 = 47000, r5 = 100000;
int r1_pin = 2, r2_pin = 3, r3_pin = 4, r4_pin = 5, r5_pin = 6;
float reading = 0, R = 0;
String finalR;
int caseno; // voor debugging
#include <stdlib.h> // voor String(float, n)
void setup() { Serial.begin(9600); }
void loop() {
// Eerst met 1kΩ meten
digitalWrite(r2_pin, LOW); pinMode(r2_pin, INPUT);
digitalWrite(r3_pin, LOW); pinMode(r3_pin, INPUT);
digitalWrite(r4_pin, LOW); pinMode(r4_pin, INPUT);
digitalWrite(r5_pin, LOW); pinMode(r5_pin, INPUT);
pinMode(r1_pin, OUTPUT); digitalWrite(r1_pin, HIGH);
reading = analogRead(Apin);
R = (reading * r1) / (1023 - reading);
if (R < 2850) { caseno = 1;
if (R < 1000) finalR = String(R, 2) + "Ohm";
else { R /= 1000; finalR = String(R, 2) + "kOhm"; }
}
else if (R >= 2850 && R < 7350) { caseno = 2; // 4.7kΩ
digitalWrite(r1_pin, LOW); pinMode(r1_pin, INPUT);
digitalWrite(r3_pin, LOW); pinMode(r3_pin, INPUT);
digitalWrite(r4_pin, LOW); pinMode(r4_pin, INPUT);
digitalWrite(r5_pin, LOW); pinMode(r5_pin, INPUT);
pinMode(r2_pin, OUTPUT); digitalWrite(r2_pin, HIGH);
reading = analogRead(Apin);
R = (reading * r2) / (1023 - reading) / 1000;
finalR = String(R, 2) + "kOhm";
}
else if (R >= 7350 && R < 28500) { caseno = 3; // 10kΩ
digitalWrite(r1_pin, LOW); pinMode(r1_pin, INPUT);
digitalWrite(r2_pin, LOW); pinMode(r2_pin, INPUT);
digitalWrite(r4_pin, LOW); pinMode(r4_pin, INPUT);
digitalWrite(r5_pin, LOW); pinMode(r5_pin, INPUT);
pinMode(r3_pin, OUTPUT); digitalWrite(r3_pin, HIGH);
reading = analogRead(Apin);
R = (reading * r3) / (1023 - reading) / 1000;
finalR = String(R, 2) + "kOhm";
}
else if (R >= 28500 && R < 73500) { caseno = 4; // 47kΩ
digitalWrite(r1_pin, LOW); pinMode(r1_pin, INPUT);
digitalWrite(r2_pin, LOW); pinMode(r2_pin, INPUT);
digitalWrite(r3_pin, LOW); pinMode(r3_pin, INPUT);
digitalWrite(r5_pin, LOW); pinMode(r5_pin, INPUT);
pinMode(r4_pin, OUTPUT); digitalWrite(r4_pin, HIGH);
reading = analogRead(Apin);
R = (reading * r4) / (1023 - reading) / 1000;
finalR = String(R, 2) + "kOhm";
}
else if (R >= 73500) { caseno = 5; // 100kΩ
digitalWrite(r1_pin, LOW); pinMode(r1_pin, INPUT);
digitalWrite(r2_pin, LOW); pinMode(r2_pin, INPUT);
digitalWrite(r3_pin, LOW); pinMode(r3_pin, INPUT);
digitalWrite(r4_pin, LOW); pinMode(r4_pin, INPUT);
pinMode(r5_pin, OUTPUT); digitalWrite(r5_pin, HIGH);
reading = analogRead(Apin);
R = (reading * r5) / (1023 - reading) / 1000;
finalR = String(R, 2) + "kOhm";
}
Serial.println(finalR); Serial.println(" "); delay(1000);
}
Stap 3: Capaciteitsmeter – Concept
De spanning over een condensator bereikt 63,2% van de laadspanning na één tijdconstante (τ = R×C). We meten de tijd tot deze drempel.
Code (Capaciteitsmeter)
/* RCTiming_capacitance_meter - concept Paul Badger 2008 */
int analogPin = 0;
int chargePin = 7;
int dischargePin = 12;
float resistorValue = 10000.0; // 10kΩ
unsigned long startTime, elapsedTime;
float microFarads, nanoFarads;
void setup() {
pinMode(chargePin, OUTPUT); digitalWrite(chargePin, LOW);
Serial.begin(9600);
}
void loop() {
digitalWrite(chargePin, HIGH);
startTime = millis();
while (analogRead(analogPin) < 648) { } // 63.2% van 1023
elapsedTime = millis() - startTime;
microFarads = ((float)elapsedTime / resistorValue) * 1000;
Serial.print(elapsedTime); Serial.print(" mS ");
if (microFarads > 1) {
Serial.print((long)microFarads); Serial.println(" microFarads");
} else {
nanoFarads = microFarads * 1000.0;
Serial.print((long)nanoFarads); Serial.println(" nanoFarads");
}
// Ontladen
digitalWrite(chargePin, LOW);
pinMode(dischargePin, OUTPUT); digitalWrite(dischargePin, LOW);
while (analogRead(analogPin) > 0) { }
pinMode(dischargePin, INPUT);
}
Stap 4: Diode Test
De analoge pin wordt naar 5V opgepulld met 10kΩ. Niets aangesloten → 1023. Diode in doorlaatrichting (anode op analoge pin, katode op D12=GND) → 100-400. In sperrichting → 900-1023. Zo vind je de polariteit van elke diode/LED.
Code (Diode Test)
String state = "null";
int checkPin1 = 12, checkPin2 = 6;
void setup() { Serial.begin(9600); }
void loop() {
pinMode(checkPin1, OUTPUT); digitalWrite(checkPin1, LOW);
if (analogRead(checkPin2) < 700) state = "forward";
Serial.println(state); Serial.println(analogRead(checkPin2));
state = "null"; delay(500);
}
Stap 5: Real Time Clock (RTC)
De RTC (DS1307/DS3231) houdt tijd bij via een knoopcel. Gebruikt I2C: SDA → A4, SCL → A5 (Nano/Uno). Library: RTClib (Adafruit).
Tijd instellen: upload sketch met rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); actief (compile-tijd) of handmatig rtc.adjust(DateTime(2014,1,21,3,0,0));. Belangrijk: Commentaar de regel weer uit na één keer instellen, anders reset de RTC bij elke herstart!
Code (RTC)
#include <Wire.h> #include <RTClib.h>
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
void setup() {
Serial.begin(9600); rtc.begin();
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// rtc.adjust(DateTime(2014,1,21,3,0,0));
}
void loop() {
DateTime now = rtc.now();
Serial.print(now.year()); Serial.print('/');
Serial.print(now.month()); Serial.print('/');
Serial.print(now.day()); Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]); Serial.print(") ");
Serial.print(now.hour()); Serial.print(':');
Serial.print(now.minute()); Serial.print(':');
Serial.print(now.second()); Serial.println(); Serial.println();
delay(1000);
}
Stap 6: Finale Opstelling
Alle elementen gecombineerd. Hoofdcode en Fritzing-bestand bijgevoegd. Download Fritzing van fritzing.org. Code is gemodulariseerd in functies: Clock(), findResistance(), findCapacitance(), diodeTest() – elk in een apart tabblad. Hoofdprogramma leest de modusknop en roept de juiste functie aan.
Let op: Buzzer nog niet gebruikt? Kan dienen voor doorgangstest.
Stap 7 t/m 35: Behuizing, Printplaat, Assemblage, Afwerking
De volgende stappen behandelen gedetailleerd:
- Schakelaars voorbereiden (solderen, isoleren)
- Karton behuizing knippen, vouwen, lijmen (PDF-sjablonen bijgevoegd)
- LCD monteren, printplaat passen maken
- Arduino Nano, weerstanden, condensatormeter, diodetest, LCD-connectoren, RTC-module op printplaat solderen
- Modusknop, testpunten, poten (met foliefinish), voedingsschakelaar (met epoxy), USB-poort
- Alle draden solderen volgens schema
- Batterijhouder monteren, poten bevestigen
- Afwerken: gaten dichten, tweede verflaag, knoppen maken
- Probleemoplossing en tips (check solderingen, kortsluitingen, LCD-contrast, seriële poort conflicten)
- Gemaakte fouten en lessen (PCB-pad afgerukt, printplaat te vroeg lijmen, RTC-batterij in de weg)
Alle layout-PDF's, CAD-bestanden en hoofdcode: Google Drive link
Code Overzicht
Vier code-fragmenten: Ohmmetermeter, Capaciteitsmeter, Diode Test, RTC. Hoofdcode combineert alles.
Schema's
Main_Schematic.fzz (Fritzing-bestand)
Productieproces
- Slimme Plantenalarmer – DIY Sensor voor Optimale Hydratatie
- Bouw een Italiaanse Woordklok met Arduino Nano, NeoPixel, LCD en RTC
- Bespaar Arduino-pins: Sluit een 4x3-toetsenblok aan met slechts 3 verbindingen
- Bouw een Betrouwbare Sigfox kWh Meter met Arduino MKR Fox 1200
- Bluetooth Temperatuurmeter met Arduino Nano
- Contactloos Gebaarslot: Veilige toegang met APDS-9960 en Arduino
- USB MIDI Adapter Kit voor Arduino Micro / Leonardo – Complete Onderdelenlijst
- Geïsoleerde analoge ingangsschakeling voor Arduino bouwen
- RGB 32-band audio-spectrumvisualisator – Arduino LED-matrixproject
- TV-Uitgangskabel voor Arduino UNO Bouwen met Alleen Twee Weerstanden
- Precisie Reactietijd Test met Arduino UNO