Introduction: The Companion IC

The Companion IC is a very cool looking Clock + Ohmmeter + Capacitance Meter + Diode Tester! Turn it on by pressing Pin 1 of the IC! Keep this at your work bench for a quick test of components and checking time. Can be run on batteries or with USB if you have a supply near your work bench.

I always wanted to make an Instructable but never found anything unique to make untill now! The idea came to me when I wanted to test some capacitors to see if they were faulty or not. I only had a multimeter available and it did not have a capacitance measuring function. After searching about it, I came to know that the Arduino can do this. I decided that I'll make one but seeing the unused pins on the Arduino wasn't very satisfying, so I decided to add an auto ranging Ohmmeter, quick LED/Diode tester and RTC Clock as well! I also wanted it to directly measure values by plugging the component in and not use any probes. The design had to be unique so after some brainstorming the IC design was made!

Edit (07/01/2016) : Optional continuity test has been added, please see the comments section.

This instructable explains in great detail how I made this and how you too can make it on your own. It is beginner friendly and anybody with 2-3 weeks of Arduino /Electronics experience can build this!

The design is modifiable and you can remove/add new features as per your requirements. I made the case with cardboard but if you have the skills, you can do it with wood or 3D print it.

I have tried to take and attach pictures at every step that I did (Lots of it in each step!). Most of these were taken multiple times till I got the best angle/light, but still a few of them are a bit blurry as holding it all with two hands is sometimes tough.

I have broken the entire code and wiring in pieces and steps, just how I made it. Code included is heavily commented and properly indented. As we move on. we will combine all the code and wiring step by step to create the final IC. This should help anyone understand it clearly. If not, please let me know in the comments.

Even if you decide not to make one, try it on a breadboard or atleast read through this once as there must be some method or trick or something which you can learn here and will be of use to you someday(Seriously, you never know when it clicks!)

Step 1: Tools and Components Needed

List of Components and Materials Used (Store links just for reference):

  • 1x Arduino Nano V3, I used a clone with CH340G -- ebay
  • Mini USB cable for Arduino Nano -- Mini not Micro!
  • Cardboard -- I used a packaging box, thickness ~2mm. Ask your neighbour, friends, go scavenging if you cant find one.
  • 4x 10k ohm resistor -- easily available
  • 2x 220 ohm resistor -- easily available
  • 1x (1k, 4.7k, 47k, 100k) ohm resistors -- easily available
  • 1x Small 10k ohm potentiometer, for contrast control of LCD...any small sized one will work.-- ebay
  • 2x Micro pushbutton, for reset and mode change button, those common ones you use on a breadboard.
  • 3x Small slide switches, for enabling backlight, pins 0 and 1, These pin needs to be disabled while using Serial -- ebay
  • 1x Maintained/Toggle/Latching push switch, for power switch -- ebay
  • Some capacitors, diode, leds just for testing, you will use them someday anyways.
  • 4x Female header pin strip -- ebay (40 pins per strip)
  • 2x Male header pin strip -- ebay (40 pins per strip)
  • 1x 16x2 character LCD -- ebay
  • 1x DS3231 or DS1307 RTC Module (RTC stands for Real Time Clock) -- Do not buy cheap ones from ebay. These use fake chips and are inaccurate. Buy this, this or this. Any one of these will work.
  • 4x AA batteries (or AAA. Using AAA will be much easier but battery capacity is lesser)
  • 1x 4 AA (or AAA) battery holder, flat variant -- ebay
  • Single strand wire, the ones used for breadboards, 22 guage
  • Ribbon Cable (or some thin twisted pair wires can be used) -- ebay
  • 2x Small nut and bolt -- I used the ones from my old Meccano set (Bolts are 1.3cm long)
  • Black Acrylic paint and brushes

Tools needed:

  • Soldering Iron
  • Solder
  • Desoldering wick/braid (for when you mess it up!)
  • Glue gun
  • Masking tape
  • Cello tape, transparent
  • Wire stripper, nipper
  • Sharp Box Cutter
  • Sharp pair of scissors

Step 2: Ohmmeter - Concept

The basic idea of measuring resistance comes from the voltage divider.

Resistor values are modifiable, change values of r1, r2, etc. Also set the ranges(for auto ranging) accordingly. See code below, download it and test the ohmmeter on a breadboard

If you are setting Nano for the first time, CH340G driver for the it can be downloaded here, works with windows 7, 8, 8.1 and 10. Mac users check here.

Select "Arduino Nano" in boards menu and the correct COM port. Upload!

Code


//Analog pin used to find resistance

int Apin=7;

//values of r1 to r5
float r1=1000;
float r2=4700;
float r3=10000;
float r4=47000;
float r5=100000;

//pins of r1 to r5
int r1_pin=2;
int r2_pin=3;
int r3_pin=4;
int r4_pin=5;
int r5_pin=6;


float reading=0; //read from analog pin and store here
float R=0;       //calculate unknown and store here

String finalR;   //final value to be displayed along with units

int caseno;   //for debugging, stores the case number
              // we divide the entire range into cases and assign each a number,
              // total 5 cases
              // case1 : less than 2850
              // case2 : 2850  to   7350
              // case3 : 7350  to   28500
              // case4 : 28500 to   73500
              // case5 : more than 73500

#include <stdlib.h> // needed for converting float to string, 
                     //has the String(float,n) function. Explained below.

void setup() {
 Serial.begin(9600);

}

void loop() {

  //first we find unknown resistance using 1kOhm resistor
  //Therefore, disable R2, R3, R4 and R5
   digitalWrite(r2_pin, LOW);   //turn each pin to LOW before setting it as INPUT
   pinMode(r2_pin, INPUT);      // turning it to INPUT when its HIGH enables the 
                                // internal pullup resistor 
     
   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);  

 
   //read and calculate resistance
   reading=analogRead(Apin);
   R=(reading*r1)/(1023-reading);

   // if value < 2850, finalR = value(using 1kOhm)
  if(R<2850){
    
    caseno=1;
    
      if(R<1000){ //if value less than 1000 use "Ohm" not "kOhm"                   
      finalR = String(R,2) + "Ohm";  //String(float,n) Converting float to string 
                                     //with n digits after decimal
                                     // attach "Ohm" after value to the string, 
                                     //'+' joins two strings here
    }
    else{ //use "kOhm
      R=R/1000;
      finalR = String(R,2) + "kOhm";
    }
  }

  
  //if value between 2850 and 7350 , use value obtained by 4.7kOhm 
  else if(R>=2850 && R<7350){
     caseno=2; 
     
   digitalWrite(r1_pin, LOW);  //Enable only 4.7kOhm
   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"; 
   
  }

  //if value between 7350 and 28500, use value obtained by 10kOhm
  else if(R>=7350 && R<28500){
      caseno=3;
      
   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";
  }
  
  //if value between 28500 and 73500, use value obtained by 47kOhm
  else if(R>=28500 && R<73500){
       caseno=4;
       
   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";

  }

  //if value more than 73500, use value obtained by 100kOhm
  else if(R>=73500){
       caseno=5;
       
   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); //printing the final string with units
   Serial.println(" ");

   delay(1000);
 
}

Step 3: Capacitance Meter - Concept

Code


/*  RCTiming_capacitance_meter
 *  code concept taken from Paul Badger 2008
 *  
 *    The capacitor's voltage at one time constant is defined as
 *    63.2% of the charging voltage.
 *    i.e, A Capacitor is filled to 63.2% of its total capacity in 
 *    1 Time Constant
 */

 int analogPin=0 ;         // analog pin for measuring capacitor voltage
 int chargePin=7 ;        // pin to charge the capacitor - connected to
                          // one end of the charging resistor
 int dischargePin=12 ;        // pin to discharge the capacitor, 
                              // same used for diode test(checkPin1)
 float resistorValue=10000.0;   // We use 10kOhm resistor
                                  
 unsigned long startTime;
 unsigned long elapsedTime;
 float microFarads;                // floating point variable to preserve precision
 float nanoFarads;

void setup(){

  pinMode(chargePin, OUTPUT);     // set chargePin to output
  digitalWrite(chargePin, LOW);  

  Serial.begin(9600);             // initialize serial transmission for debugging
}

void loop(){
 
  digitalWrite(chargePin, HIGH);  // set chargePin HIGH and capacitor charging
  startTime = millis();

  while(analogRead(analogPin) < 648){  // just wait and do nothing till 648 
                                       // 647 is 63.2% of 1023,
                                       // which corresponds to full-scale voltage 
  }

  elapsedTime= millis() - startTime;
 // convert milliseconds to seconds ( 10^-3 ) 
 // and Farads to microFarads ( 10^6 ),  net 10^3 (1000)  

  microFarads = ((float)elapsedTime / resistorValue) * 1000;  
  // (float) converts "unsigned long" elapsed time to float

  Serial.print(elapsedTime);       // print the value to serial port
  Serial.print(" mS    ");         // print units


  if (microFarads > 1){
    Serial.print((long)microFarads);       // print the value to serial port
    Serial.println(" microFarads");         // print units
  }
  else
  {
    // if value is smaller than one microFarad, convert to nanoFarads (10^-9 Farad). 

    nanoFarads = microFarads * 1000.0; // multiply by 1000 to convert to nanoFarads (10^-9 Farads)
    Serial.print((long)nanoFarads);    // print the value to serial port
    Serial.println(" nanoFarads");     // print units
  }

  /* dicharge the capacitor  */
  digitalWrite(chargePin, LOW);           // set charge pin to  LOW 
  pinMode(dischargePin, OUTPUT);          // set discharge pin to output 
  digitalWrite(dischargePin, LOW);        // set discharge pin LOW 
  while(analogRead(analogPin) > 0){       // wait until capacitor is completely discharged
  }

  pinMode(dischargePin, INPUT);           // set discharge pin back to input
}

Step 4: Diode Test

The analog pin is pulled up to 5V with the 10k Ohm resistor. So analog pin reads 1023 when nothing is connected. D12 is set to OUTPUT, LOW.

When a diode is forward biased between analog pin (5V) and D12 (GND), analog pin reads 100-400.

When it is reverse biased, practically a very small current flows and analog pin reads 900-1023.

In this way we can simply find out the p and n side of any diode. This can be used for quick checking LEDs and diodes.

Code


String state = "null"; //prints "null" for reverse bias or nothing connected

int checkPin1 = 12;
int checkPin2 = 6;


void setup() {
  Serial.begin(9600);

}

void loop() {

pinMode(checkPin1, OUTPUT); 
digitalWrite(checkPin1, LOW); //pin 11 is set to low

//analog read is normally pulled up by the 10k resistor, so null reading is 1023
//In forward bias, the analog pin gets connected to checkPin1, which is LOW. So reading less than 1023
//Practically a small current flows in reverse bias as well, so we take 700 to differentiate

  if(analogRead(checkPin2)<700){ 
    state="forward";
   
  }
 

 Serial.println(state);
 Serial.println(analogRead(checkPin2));
 state = "null";
 delay(500);


}

Step 5: The Real Time Clock (RTC)

The RTC maintains seconds, minutes, hours, day, date, month, and year information. It continues counting even when external power is removed thanks to the small coin cell in it. The date at the end of the month is automatically adjusted for months with fewer than 31 days, including corrections for leap year.

Whatever module you have we'll be using 4 pins: Vcc, GND, SDA and SCL. The SDA and SCL pins on the arduino nano and uno are A4 and A5 respectively. For other arduinos google it up!

We will be using the "RTClib" library, which makes setting and accessing time super easy! The library can be downloaded here (Click on "Download ZIP", and extract the "RTClib-master" in your Arduino libraries folder. More on installing libraries.)

To set time, download the "RTC_set_time.ino" attached to this step and uncomment the lines,

rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

If you want to use the time set on your computer while compiling. Or

rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0)); //year, month, date, hour, minute, seconds

To set a custom time.

Connect as shown and upload. Open Serial monitor at 9600 baud to see the current time. Check again after some hours to see how the RTC is catching up.

Make sure you recomment these lines and upload again after setting the time once. Or else you will keep resetting it each time Arduino resets!

Code


// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include 
#include 


RTC_DS1307 rtc;//creating "rtc" object of RTC_DS1307, objects are used to access functions
                //more on objects and classes: https://www.youtube.com/watch?v=ABRP_5RYhqU

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

void setup () {

  Serial.begin(9600);
  rtc.begin();
   

    // following line sets the RTC to the date & time this sketch was compiled
    // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // 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);
}

Step 6: Final Setup

So that's the final circuit after combining all the elements. The main code and fritzing files are attached to this step. Everything can also be found here on GitHub.

Download fritzing from fritzing.org if you haven't already.

Extract the Main_code.rar file and open Main_file_rtc.ino. I have included all the variable declarations in a separate definations.h header file, it will be added automatically when you open the main code.

The different parts are made into functions: Clock(), findResistance(), findCapcitance() and diodeTest(). These are written in separate tabs, making reading easy and changes are easy to implement. The main file just checks the state of "mode button" and calls the appropriate functions.

Other details are properly explained in the code itself.

After a test run on a breadboard, we are ready to start making the IC!

Note: Buzzer if not utilized yet, can be utilized when necessary, for example, a continuity function.

Step 7: Preparing the Switches

Take the 3 slide switches along with 3 pairs of wire, about 10cm long. I split the ribbon cabble for this.

Strip a small part of insulation(not more than 5mm) and twist the strands.

Apply some solder to 2 adjacent pins of each of the switches. Use something to hold it In place while you solder, I used a heavy plier.

If you haven't soldered before, now is a good time to start. Youtube has tons of videos on teching you how to solder properly. Lessons from PACE is very informative, please watch it.

Next we have to 'tin' the wires. Touch the tip of the soldering iron to the wire to be tinned. Apply a tiny bit of solder in between the tip and wire, this creates a bridge which conducts heat from the tip to the wire. Then you apply solder directly to the wire, on the opposite side of the soldering iron tip. Remove the solder. Remove the tip. A video on this.

After that, hold the switch in place, bring one of the tinnned wire to the pin and reflow the solder by touching soldering iron. Do the same with the second wire. Notice that I put the dark coloured wires to one side of the switches.

Now repeat the procedure and attach two wires to a pushbutton(this will the reset button). Make sure you dont put wires to the normally connected ends of the button.

Step 8: Making the Case - Cutting the Layout

Download "Layout_Final_A3.pdf" or ""Layout_Final_ANSI_B.pdf", based of paper size available in your region. attached at the end of this step.

Print it on an A3 size paper (29.7 x 42.0cm or 11.69 x 16.53 inches) or the US-alternative ANSI B(11 x 17inches or 279 × 432mm). Make sure that while printing you select the proper paper size, orientation, and select the "Actual Size" option. Confirm that the print is accurate by measuring the small right angle at the bottom right corner, it should be 2cm x 2cm.

Cut a piece of the cardboard roughly more than the layout. Tear a small piece of tape, form a 'double side sticky' roll, and attach it at the places shown. Then stick the sheet on the cardboard.

Use sharp scissors or box cutter with a ruler to cut the outer boundary of the case layout. I found box cutters much better than scissors. Most cutters will have blades which can be broken in stages to get a fresh and sharp tip, so doing that is recommended. Keep another piece of cardboard or wood underneath the part you are cutting, this helps in getting cleaner cuts.

Also, not keeping the ruler properly on the line while cutting is a common error. Dont do this in a hurry.

Step 9: Making the Case - Creasing and Folding

Using the cutter with the scale, carefully make creases along all the folding lines, except the middle line in the LCD Area. Bend and fold all the foldable parts and rectify any incomplete creases.

For the Bottom half or base:

Using the sandpaper sand the first four edge at an incline, apply hot glue with a glue gun (one side at a time), join and hold 30-60 seconds as the glue cools down.

Make two holes with a thumbpin as shown and enlarge it with a pencil just enough to fit the bolt in. Tighten the nut on the inside, apply hot glue (just on the nut!), let it cool. Remove the bolt with a scredriver.

Next, fold the two side flaps inward and stick it. The outer part of the flap should be slightly inclined and the middle part flat.

Step 10: Making the Case - Adding the Switches

Take the 3 sliding switches with wires we soldered earlier, measure the approximate dimension of rectangle needed. Mark it on the left side of the box(left from the outside). Cut it with a cutter, sand it a bit on the inside to remove any material sticking out.

Keep the first switch in position and while holding it add glue on one side. Let it cool. Repeat with the other two as well, and then add glue on the remaining sides. Note: The wired pins of the switches should be on the same side.

Make another hole on the other side for the reset pushbutton. Hold the button in place and add glue. Fold the lower flap inwards and stick it.

Step 11: Making the Case - Top Half or Cover

Sand the edges and stick the side flaps inwards(just like the base) for the top half

Step 12: Making the Case - Adding the LCD

Crease the middle line. (Didn't do it earlier as it is delicate and gets loose soon).

Fold the cover over to the base and check whether everything looks alright, sufficient spacing should be left for the IC pins. (See photo)

Cut the covering flaps as shown in the images.

Keep the LCD at the center of the LCD Area, mark it with a pencil. Using a ruler, make the rectangle properly and cut it carefully using a cutter. Fold the LCD window and apply glue to the hinges to keep them at their correct position. Insert the LCD and make any modifications if required.

Finally, apply glue to the four corners(don't put excess) of the LCD and place it in position.

Step 13: Making the Case - Final Flaps

Sand, trim and close the tringular flap.

Make a small piece as shown and stick it to the cover. Make two holes, widen them with a pencil for inserting the bolt and locking the cover to the base.

Step 14: The Circuit Board -- Making It Fit

Cut the General purpose PCB to the right size such that it fits properly in the case. Mine is 2x4inches. To cut it, use the ruler and cutter and swipe it multiple times on both sides and it breaks off easily then.

Place it inside. If the glue from the side flap lifts the PCB up, reheat the glue to flatten it or lessen the size of PCB a bit.

Cut a small part so that the 3 switches fit in and PCB goes entirely inside.

Step 15: The Circuit Board -- Arduino Nano

Cut female header pins of the right size for the Arduino.

Place it at the center edge of the PCB and solder all the pins.

Step 16: The Circuit Board -- Ohmmeter

Before making any connections on the PCB please double check from the final Circuit Design.

For the ohmmeter start by adding a 1k Ohm resistor to pin D2 of arduino. Place the arduino and carefully mark the pin. On the reverse side, bend as shown and solder it.

Do the same with the other 4 resistors, 4.7k, 10k, 47k and 100k Ohm.

Note: keeping all the tolerance bands(gold band) on one side is a good practice, eg UP and RIGHT.

Combine the second ends of resistors and solder it to A7.

Step 17: The Circuit Board -- Capacitance Meter and Diode Test

Capacitance Meter:

Solder a 220 Ohm resistor from D12 to A0. And a 10k Ohm resistor from A0 to D7.

Note: D7 (digital pin) is also used for LCD data pin D4.


Diode Test:

Solder the 10k Ohm pullup resistor from A6 to +5V.


Step 18: Making Connectors for LCD

We just use the first 6 and last 6 pins on the LCD. Pins D0-D3 are unused. So we will be making connectors for only the used pins. It is recommended that you do the same because plugging/unplugging a 16pin connector becomes very tough once the build is complete.

Cut 2x 6pin female and male header pins. Also take 6 wire ribbon cable, around 2-2.5 inches long.

Strip the insulation and tin the leads. Also tin the header pins. Join them one by one just like the slide switches.

Apply hot glue to secure the wires.

Step 19: The Circuit Board -- LCD Connections

Place the PCB inside the case. Plug the connector to LCD and see where the female port should be on the PCB, solder it.

Make sure you leave 4-5 dot rows behind the LCD port. The Power switch will be added here later.

Measure the length of single stranded wire needed to connect data pins (D4, D5, D6 and D7) on the LCD to digital pins( D7, D8, D9 and D10) on the Arduino, respectively.

Add the 10k ohm potentiometer such that the side ends go to Vcc, GND and the middle pin to V0.

Connect Vss(GND) on the LCD to GND, and Vdd to +5V. Also connect R/W to GND.

Arduino PinLCD
D7D4
D8D5
D9D6
D10D7
GNDVss(GND)
+5VVdd

Step 20: The Circuit Board -- RTC Module

I desoldered the default 90 degree header pins on the module and added straight ones so that it fits flat on the PCB.

Solder 4pin female header pin and make connections to Vcc, GND, SDA to A4 and SCL to A5.

Step 21: Making the Case -- the Mode Button

Mark a circle of about 1cm diameter at the pin1 corner of the IC case. mark the center with a pin, use a pencil to expand it. After that use some appropriate tool to increase the diameter to 1cm. Sand it on the inside and use hot glue to secure the hole.

Cut a piece of General purpose PCB (10-11)dots x 5dots. Plug in and solder the pushbutton, 220 and 10k Ohm resistors as shown.

Take 3wire ribbon cable about 15cm long. Tin the ends and solder it as shown. Note down which colour wire goes to where, this will be helpful later on.

Cut 2 small pieces of eraser and place it on the ends on the board. The height of the eraser should be such that the button is below the cardboard inner level as viewed from outside. I used 4mm.

Secure it with hot glue as shown

Step 22: Making the Case -- Testing Points

Cut 6x 6pin female header pins. Sand the sides to make it smooth.

Mark the positions and cut slots for the header pins. Insert it in place and glue it from the inside.

Apply small amounts of solder to all the pins and use a stripped jumper to get it all together. Make sure all of them are connected. Dont keep on heating it to make it perfect. Heating a pin also heats the neighbouring ones.

Take 6 stranded ribbon cable, tin it and attach it to each slot. Note that I put dark colours to the negative side. Apply hot glue to fix them in place.

Step 23: The Legs

Download "Legs_A4.pdf" or ""Legs_ANSI_A.pdf", based of paper size available in your region. attached at the end of this step.

Print it on an A4 size paper (21 x 29.7cm or 8.27 x 11.69 inches) or the US-alternative ANSI A(8.5 x 11inches or 21.6 × 27.9cm). Make sure that while printing you select the proper paper size, orientation, and select the "Actual Size" option. Confirm that the print is accurate by measuring the rectangle. It should be 8.4 x 11.8cm

Cut crease and glue it just like the main case, see the images.

Step 24: Making It Shiny!

Cut a piece of foil 1x2inches and stick it carefully, fold by fold to the leg ends with some metal-cardboard sticking glue. I used Fevibond.

Next stick a patch that covers all the leg tops(as shown), make cuts slowly with a cutter. Do this carefully. The foil tends to tear to the sides. Use something flat to stick the foil in between the legs and give it a good finish.

Now cover it with transparent cello tape, just like you applied the foil, to protect it from sharp objects.

Step 25: The Power Switch

Measure and cut the power switch leg by properly keeping it in place. Temporarily stick the other pins with tape to get the pin1 position right.

Mix the m-seal(epoxy putty sealant, gets very hard when it dries) well. Put it as shown in the images and use powder+flat surface to shape it. Let it dry.

Also fill any gaps left in your case.

Note: We cant use hot glue here as it is rubbery and the switch needs to be stuck with some strong brittle material.

Step 26: Power Switch to PCB

After The m-seal dries, place it in to check if everythings alright.

Cut 3pins of female and male headers place it on the PCB such that it aligns with the switch pins. Solder the female part.

Tin the switch leads and the male header pins, join them. See if it fits at the right place.

Try pushing the switch on and off after placing a finger behind the switch for support. We will add a support rod later on.

Connect a side pin of female header(power switch) to Vin. I realised this late and had to undergo lots of trouble.

Secure the header Pin with hot glue.

Step 27: Making the USB Port

Put the PCB properly in (with Arduino) and cut a rectangle for the mini USB port.

Remove some plastic from the USB cable so that it fits the Arduino properly. Test whether connection is proper.

Step 28: Some Other Things...

I removed all the LEDs from the Arduino Nano and also the power LED on my RTC module. These consume unnecessary power, which matters if you are operating on a battery.

Sand the dried m-seal so that it mixes smoothly with the cardboard. Clean the powder with a wet paper napkin before painting.

I also added a buzzer which may be used for some functions. Buzzers are sensitive, don't use too much heat while soldering!

Step 29: Time to Paint!

Dont use direct thick paint while painting, this cases brush patterns to appear. Use sufficient water.

Make sure no tiny bubbles are formed. These form when you dab the brush too much.

Dont paint the cover hinge, the paint will restrict it.

This is just a base coat. Another layer of paint will be added while finishing up.

Step 30: Soldering All the Wires

Make sure you refer the circuit design before making any connections.

First connect the reset switch, one end to RST and one end to GND.

Then, the backlight switch. One end to +5V and other end to 'A' or Anode of the backlight LED. Also connect 'K', Cathode to GND.

Next is the RS switch, connect one end to RS and other to pin D1(TX).

And finally the Enable switch. Connect one end to 'E' or Enable and other end to pin D0(RX).


SwitchesWhere to?
Reset - pushbuttonRST and GND
Backlight - slide+5V and A
RS - slideD1 (TX) and RS
Enable - slideD0 (RX) and E

Note: Pins D0 and D1 are connected through switches as keeping them connected sometimes causes problems while using Serial(for debugging).

This completes the base wiring. Apply hot glue after double checking the connections.

Then connect the 3 wires of mode change button: The 10k pulldown resistor to GND. 220 Ohm resistor to pin D11 and input pin to +5V or VCC

Finally connect the 6 wires from the test slots to their appropriate places(shown in images).


PositiveNegative
Resistance TestA7GND
Capacitance TestA0GND
Diode TestA6D12

Note: All the +5Vs and GNDs are same and hence connect to most convinient spot.

Step 31: Adding the Battery Case

Place the battery case at the top cover, make cuts to place it inside such that the cover can be closed properly.

Solder Wires to the case, strip and tin them. Solder the positive end to the middle pin of power switch and negative end to ground.

Glue the PCB to the base after making all the connections.

Twist the wires and place them in position. Insert batteries(the case expands a bit on inserting batteries) and glue the case to the cover.

Step 32: Adding the Legs

Cut the inner part of legs so that it fits in properly. Stick it it place.

Put the power switch pin in to check if it fits in perfectly. Remove it, add a metal rod, piece of wood or anything strong of proper length that will prevent the switch from moving back. Glue it in place.

Check the switch, it should be turning on/off smoothly.

Switch on the IC and test all the functions. If its not working skip to the troubleshooting section.

Step 33: Finishing Up!

Use M-seal (or equivalent) to fill any small gaps around the testing area and the mode change button. After drying, sand it well and apply a second layer of paint.

Make the button with a small piece of cardboard, paint it black and cover it with tape(gives a shiny finish). Apply a tiny drop of glue and stick the button in place.

Step 34: Problems and Troubleshooting

Do everything correctly. This is the most boring most of any project and you dont wanna get here just because you soldered the wrong pins!

  • Recheck every soldered joint and ensure that it isnt touching the adjacent one. Use the multimeter continuity test for help.
  • After cutting component/jumper leads make sure the cut lead doesnt fall underneath the PCB. This may lead to unwanted shorting soldered joints.
  • Write down anything you need to remember in a book, don't trust your memory.
  • If LCD is not displaying, make sure the contrast is adjusted properly. Also make sure the pin0 and 1 switches are turned ON. Check all the pin connections from LCD to Arduino with continuity test. Use breadboard jumpers wherever your mutimeter cant reach.
  • Upload the hello world LCD program to see if the problem is in the code.
  • If a particular function is not working, check its connections and tally it with the code.
  • And most importantly, keep your curious pets with their evil minds away from your workspace! :p

Step 35: Things I Did, Some Mistakes I Made

While testing the various circuits and when I had the rough idea of what I want to make, I decided to go with the IC design. I measured actual ICs, took ratios of their lengths, got the angle with some trignometry to be around 80 degrees. Then I decided the inner box length and breadth and built upon it(shown in image). Once the layout was planned, I initially started to draw it accurately on a large size paper. After a bit of a struggle of drawing accurate lines, I realised that this kind of work should be done on a computer! So I learnt CAD basics and succesfully made the layout on it. :) But this layout didnt work out and I had to redo the entire cutting and making of the case.(See images)

While removing the LEDs on the Arduino Nano I used excess pressure to remove a stubborn LED, and ended up removing a PCB pad. Always desolder without forcing/applying pressure on the joints, the pads are delicate and easily come off if you dont stay calm.

When all the solder joints were made and project was about to get finished, in excitement and eagerness, I glued the PCB inside the case before adding the battery case. Had to re-melt the hot glue with a soldering iron(carefully not to melt any wire insulation) and remove the PCB out to solder the battery case wires in. The soldering iron can be cleaned afterwards.

The RTC module battery was coming in way of the batteries while closing and so I separated the battery holder(Warning: desolder only with the battery removed) and added extension wires so that the battery can be placed at the sides where there is space.

That's all folks! Thanks for reading, please vote for this at the "Arduino - All the things" contest if you like this. Have a wonderful day! : )

Arduino All The Things! Contest

Second Prize in the
Arduino All The Things! Contest