Introduction: Kidkraft Uptown Kitchen Light Up Conversion


We were storing an Uptown Kitchen set for the granddaughter. I was looking at it one day, just sitting there, and mentioned that I could make it light up. Word of warning, never toss out an offhand comment if someone is there to hold you to it!

Out came the notepad and I started sketching what it would need and a couple of different ways I could get the desired results.

In the end I 3D printed some parts, used some old leftover electronic components, ordered some new bits and definitely used up some scrap RJ45 that was just laying around.

I wanted to add lights to each compartment that would turn on when the door was opened and off when closed. No issue there, I just added some rocker arm switches to each door frame. I believe there were five compartments with switch's and white LEDs

I also wanted to add some "realism" so I used RED LEDs to simulate heating elements for both the stove and oven (I used a different "white" LEF for the microwave operation). This created some additional issues that I'll address in detail later but long story short I needed to print some replacement stovetop pieces and add some logic control to their operation.

Lastly, I needed everything to be low voltage for safety and secure enough that everything couldn't be easily damaged.

Supplies

PARTS/PIECES

* PUSH BUTTONS - Normally Open

* MOSFETs - IRLZ34N (N-Channel)

Note: N-Channel switches ground and P-channel switches positive

* DOOR SWITCHES w/ ROLLER ARM - Normally Open / Closed

* RED 12V LEDs

* WHITE 12V LEDs

* ARDUINO LEONARDO

* PROJECT BOX

* LOTS OF SPARE RJ45 WIRE

* 12V POWER SUPPLY - Old Laptop Power Supply

* 2 WIRE BREADBOARD QUICK CONNECTS

* BREADBOARD

* 320Ohm RESISTORS

TOOLS

* Wire Cutters / Strippers

* Soldering Station

* Hot Glue Gun

* 3D Printer

* Multi Meter

* Drill

* Cable Management Wraps

Step 1: Replace "electric" Burners With New "LED Gas" Burners

The first task was to replace the existing stovetop elements. The originals looked like "electric" elements and I couldn't easily attach the LEDs. I knocked out a "gas" burner design in Tinkercad and printed out four new elements. I wrapped a strip of red LEDs around each element core and ran some wires back to the control box.

The printed elements fit into the existing mounts and were attached with the original screws. I just needed to drill a small hole in the center of the mount to run the wires.

I used a bit of hot glue to secure the LED tap (self adhesive doesn't always adhere). I also used the hot glue to make sure the wires couldn't be pulled out (IMPORTANT)

Step 2: Bits and Bobs!

I already had a lot of the pieces needed to put this together but I ended up ordering some new buttons and switches because they just fit better.

I ordered the buttons because they fit into the holes left when I removed the plastic stovetop "dials"

The buttons were hot glued into their holes. There was no different on which wire was attached to which post on the buttons so they went in easy.

I grabbed new stiches because they came with a little roller on the end and worked better with the doors.

Besides having the roller ball on the end of the switch arm, I liked these switches because they could be normally open or normally closed - all depending upon which leads where used. I didn't mess that up a all when I was soldering them together. Nope, not even once! Perhaps twice though...

MOSFETs, what else can I say? I needed to turn the LEDs on and off and didn't want to use relays so I figured I'd try using MOSFETs and I wasn't disappointed. The worked GREAT switching the lights on and off.

The MOSFETS switched the ground to the "heat" LEDs and as such didn't really generate any heat so I opted to leave out the aluminum sync I was going to attach to them.

Step 3: Mmmmm, Solder Smoke!

This was the hardest part, laying out the components onto the protoboard.

To start I photocopied the protoboard and then started drawing on the components and tried figuring out how to connect everything. Ground this way, voltage that way, quick connects, power input, etc... I went through several iterations until I came across one that allowed me to incorporate all components and functions.

The board is broken down into four rows of components.

ROW1: Switch Inputs

Easy connects allowed common grounds and then a direct wire to the Arduino input pins.

ROW2: Door Lights

12vdc connection through the door switches directly to the white LEDs, no Arduino connections, just power.

ROW3: Heater Lights

Working in connection with row 4's MOSFETs, these quick connects provide power directly to the "heat" LEDs

ROW4: MOSFET switching

The MOSFETs connect to corresponding Arduino pins and control the ground state to the "heat" LEDs.
Wiring of the N-MOSFT: Three pins, Gate, Drain and Source. Gate is connected to the Arduino pin with the resistor to ground. Drain connects to the negative of the burner LED and Source is to the common ground. Once the Mosfet is "on" I found it wouldn't turn off unless I used the resistor to dump to ground.

PROTOBOARD

I soldered all the quick connects, MOSFETS and resistors onto the protoboard and then the fun began. I tried making lines of solder to connect everything but the flux kept everything separated - of course. I then stripped off the insulation of some wire and ended up soldering lines of copper wire to connect each component and run the positive and negative buses.

TESTING

With all the soldering it's extremely important to test everything before you try running any voltage through it. I tested all solder points and made sure there were no cross connects and that everything that was supposed to connect did connect.

ARDUINO CONNECTION

I used spare cabling to connect the protoboard to the Arduino's pins and used some hot glue to make sure they stayed put.

Step 4: ARDUINO

The code... the code... Although I started years ago with the Arduino I've been working almost exclusively with Raspberry Pi's since so going back to the Arduino was actually a bit of fun - until it wouldn't work, and then it did, and then it didn't again..

I could have just wired up the buttons and the switches and done without the Arduino but I wanted a bit more "realism". I also didn't want the LED's to continue to burn if they didn't turn something off. To that end I used the Arduino to control how long each "burner" element would remain on. It would also allow elements to be turned off once on and when the Microwave or Oven "finished", it would play a tune similar to their real oven and microwave. And so I decided an Arduino would be best for all of that.

Here's how I worked it out. I started with my Arduino plugged into a prototyping board and a box full of different components. I'd add a component and then write some code so it would work as I wanted. Then I'd swap parts and write different code. Once I had the individual switches, mosfets and LEDs all working as intended I put all the code together and made changes until all was good.

Is there a better way to code this to get the same or better results? Oh, most assuredly. Please take this code with a grain of salt, your mileage may vary, do not feed this code after midnight...

The biggest issue I have with this code is the delay for the buttons to register on and off but otherwise it all works. There was a time frame involved with finishing this project so "working" was where I had to stop. With more time I'll update the code to "working well"...

// SPEAKER

int speakerPin = A0;
int numTones1 = 3;
int tones1[] = {1915, 1915, 1915, 1915};
int numTones2 = 3;
int tones2[] = {1915, 1915, 1915, 1915};

// BUTTONS

int inPin1 = 3; // Burner 1
int inPin2 = 5; // Burner 2
int inPin3 = 7; // Burner 3
int inPin4 = 9; // Burner 4
int inPin5 = 11; // Oven
int inPin6 = 13; // Microwave

// HEATERS

int outPin1 = 2; // Burner 1
int outPin2 = 4; // Burner 2
int outPin3 = 6; // Burner 3
int outPin4 = 8; // Burner 4
int outPin5 = 10; // Oven
int outPin6 = 12; // Microwave

// VARIABLES

int state1 = LOW; // the current state of the burner 1 pin
int state2 = LOW; // the current state of the burner 2 pin
int state3 = LOW; // the current state of the burner 3 pin
int state4 = LOW; // the current state of the burner 4 pin
int state5 = LOW; // the current state of the oven pin
int state6 = LOW; // the current state of the microwave pin

int reading1; // the current reading from the burner 1 input pin
int reading2; // the current reading from the burner 2 input pin
int reading3; // the current reading from the burner 3 input pin
int reading4; // the current reading from the burner 4 input pin
int reading5; // the current reading from the oven input pin
int reading6; // the current reading from the microwave input pin

int previous1 = LOW; // the previous reading from the burner 1 input pin
int previous2 = LOW; // the previous reading from the burner 2 input pin
int previous3 = LOW; // the previous reading from the burner 3 input pin
int previous4 = LOW; // the previous reading from the burner 4 input pin
int previous5 = LOW; // the previous reading from the oven input pin
int previous6 = LOW; // the previous reading from the microwave input pin

// the follow variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.

long time1 = 0; // the last time the output pin was toggled
long time2 = 0; // the last time the output pin was toggled
long time3 = 0; // the last time the output pin was toggled
long time4 = 0; // the last time the output pin was toggled
long time5 = 0; // the last time the output pin was toggled
long time6 = 0; // the last time the output pin was toggled

long debounce1 = 200; // the debounce time, increase if the output flickers
long debounce2 = 200; // the debounce time, increase if the output flickers
long debounce3 = 200; // the debounce time, increase if the output flickers
long debounce4 = 200; // the debounce time, increase if the output flickers
long debounce5 = 200; // the debounce time, increase if the output flickers
long debounce6 = 200; // the debounce time, increase if the output flickers

int count1 = 0;
int count2 = 0;
int count3 = 0;
int count4 = 0;
int count5 = 0;
int count6 = 0;

void setup()
{
pinMode(inPin1, INPUT_PULLUP);
pinMode(outPin1, OUTPUT);

pinMode(inPin2, INPUT_PULLUP);
pinMode(outPin2, OUTPUT);


pinMode(inPin3, INPUT_PULLUP);
pinMode(outPin3, OUTPUT);


pinMode(inPin4, INPUT_PULLUP);
pinMode(outPin4, OUTPUT);


pinMode(inPin5, INPUT_PULLUP);
pinMode(outPin5, OUTPUT);


pinMode(inPin6, INPUT_PULLUP);
pinMode(outPin6, OUTPUT);

pinMode(speakerPin, OUTPUT);
}

void loop()
{
reading1 = digitalRead(inPin1); // Burner 1
reading2 = digitalRead(inPin2); // Burner 2
reading3 = digitalRead(inPin3); // Burner 3
reading4 = digitalRead(inPin4); // Burner 4
reading5 = digitalRead(inPin5); // Oven
reading6 = digitalRead(inPin6); // Microwave

// if the input just went from LOW and HIGH and we've waited long enough

// to ignore any noise on the circuit, toggle the output pin and remember
// the time

// Burner 1
if (reading1 == HIGH && previous1 == LOW && millis() - time1 > debounce1) {
if (state1 == HIGH)
state1 = LOW;
else
state1 = HIGH;

time1 = millis(); }

// Burner 2
if (reading2 == HIGH && previous2 == LOW && millis() - time2 > debounce2) {
if (state2 == HIGH)
state2 = LOW;
else
state2 = HIGH;

time2 = millis();
}

// Burner 3
if (reading3 == HIGH && previous3 == LOW && millis() - time3 > debounce3) {
if (state3 == HIGH)
state3 = LOW;
else
state3 = HIGH;

time3 = millis();
}

// Burner 4
if (reading4 == HIGH && previous4 == LOW && millis() - time4 > debounce4) {
if (state4 == HIGH)
state4 = LOW;
else
state4 = HIGH;

time4 = millis();
}

// Oven if (reading5 == HIGH && previous5 == LOW && millis() - time5 > debounce5) {
if (state5 == HIGH)
state5 = LOW;
else
state5 = HIGH;

time5 = millis();
}

// Microwave if (reading6 == HIGH && previous6 == LOW && millis() - time6 > debounce6) {
if (state6 == HIGH)
state6 = LOW;
else
state6 = HIGH;

time6 = millis();
}

delay(1000) ; // pause 1 second

// BURNER 1
if (state1 == HIGH) count1 = (count1 + 1);
if (count1 == 15) state1 = LOW;
if (count1 == 15) count1 = 0;
if (state1 == LOW) count1 = 0;

// BURNER 2
if (state2 == HIGH) count2 = (count2 + 1);
if (count2 == 15) state2 = LOW;
if (count2 == 15) count2 = 0;
if (state2 == LOW) count2 = 0;

// BURNER 3
if (state3 == HIGH) count3 = (count3 + 1);
if (count3 == 15) state3 = LOW;
if (count3 == 15) count3 = 0;
if (state3 == LOW) count3 = 0;

// BURNER 4
if (state4 == HIGH) count4 = (count4 + 1);
if (count4 == 15) state4 = LOW;
if (count4 == 15) count4 = 0;
if (state4 == LOW) count4 = 0;

// OVEN
if (state5 == HIGH) count5 = (count5 + 1);
if (count5 == 20) state5 = LOW;

// SOUND WHEN FINISHED

if (count5 == 20)
for (int i = 0; i < numTones1; i++)
{
tone(speakerPin, tones1[i]);
}
noTone(speakerPin);

if (count5 == 20) count5 = 0;
if (state5 == LOW) count5 = 0;

// MICROWAVE

if (state6 == HIGH) count6 = (count6 + 1);
if (count6 == 10) state6 = LOW;

// SOUND WHEN FINISHED

if (count6 == 10)
for (int i = 0; i < numTones2; i++)
{
tone(speakerPin, tones2[i]);
delay(1000);
noTone(speakerPin);
delay(1000);
}
noTone(speakerPin);

if (count6 == 10) count6 = 0;
if (state6 == LOW) count6 = 0;

// DIAGNOSTICS ONLY

Serial.println(millis());
Serial.println(count1); // FIRST COUNTER
Serial.println(count2); // SECOND COUNTER
Serial.println(state1);
Serial.println(state2);

digitalWrite(outPin1, state1); // Burner 1
digitalWrite(outPin2, state2); // Burner 2
digitalWrite(outPin3, state3); // Burner 3
digitalWrite(outPin4, state4); // Burner 4
digitalWrite(outPin5, state5); // Oven
digitalWrite(outPin6, state6); // Microwave

previous1 = reading1; // Burner 1
previous2 = reading2; // Burner 2
previous3 = reading3; // Burner 3
previous4 = reading4; // burner 4
previous5 = reading5; // Oven
previous6 = reading6; // Microwave

}

Step 5: Wiring It All Up!

WIRES, WIRES EVERYWHERE!

Every door had a switch (wire pair) that controlled the compartment light (wire pair). There where also buttons (wire pair) that turned on and off the "heating elements" (wire pair) as well as a speaker (wire pair). There were a LOT of wires.

LABEL THE WIRES!

Because I used left over RJ45 scrap there were a lot of duplicated wire colors. I used some painters tape to mark all the pairs and it was a immensely helpful. I had to un-tag and retag some of the wires as I ran them through the drilled holes but there was no other way and it worked out great.

TEST ALL COMPONENTS FIRST!

Although I already knew this I didn't put that knowledge into practice and it "bit me right in the buttocks" (Did you read that in Gump's voice?) Seriously, test all the buttons and switches. I had to rip out the already secured wiring to replace a button and a door switch. Very much not happy with myself about that.

QUICK CONNECTS

I've done other projects with wires and have always soldered them into the board. What a pain the posterior. This time I used a bunch of the screw down quick connects which were in turn already soldered tot he board. Not only did it save me a ton of time, it allowed easier assembly, testing and repair. I'll absolutely use quick screw connects from here on out.

WIRE MANAGEMENT

I had some wire wrap left over so I made sure that all the wire in the back of the piece was securely coil wrapped and then screwed down with zip-ties and/or hot glued in place. All internal wires were hot glued in place to make sure that little hands couldn't pull them out. If I did this again I'd even secure some flat foam sheets to cover all the wiring for some extra protection.

PROJECT BOX

I had this old plastic, rectangular project box just hanging around for a decade or so and I finally found the PERFECT project to use it. I 3D printed up some mounts for the Arduino and project board and then routed in all the wires. Screwed on the cover and everything was secured and looking professional..

POWER

The last addition to all the control wires was the addition of the single 12V AC/DC adapter. I hot glued the adapter to the back of the piece, next to the project box and then routed in the power feed. The 12v feeds both the Arduino (barrel connector) and the 12v feed on the project board (for the LEDs).

Step 6: It Works! Yeah, Wouldn't Have Believed It Either!!

I may have mentioned that this was a project on a time table so I can't tell you the relief when I powered it up for the first time and everything worked (except for that stupid button and door switch, #$%^#@&). The lights lit, the burners turned on and the speaker played different tunes when either ether the oven or the microwave finished the time cycle.

As in all projects there are a few things I'd do different but all in all I'm really happy with the way the project turned out.

THE UNVEILING!

When we delivered the unit everyone was ecstatic! Yay!! After a few minutes the younglings moved onto something else (of course) and I spent the next few hours discussing the project with the adults

So, in retrospect, I'm not sure if this was a project for "me" or for "them" but I enjoyed doing it for them and they enjoy playing with the unit even if they don't always plug it in.