Attiny85 Decision Box V2.0

43K44052

Intro: Attiny85 Decision Box V2.0

After seeing my first Attiny85 based "Decision box" had become quite popular I decided to make a second version with more improvements using common materials so everyone can build it.

The main difference between the first and second version are the materials they're made of, while the first box was made out of wood, this version has two perforated boards stacked together with hex spacers and screws, and connected by pin headers and connectors. This makes it more modular, robust and easy to assemble. Another difference are the LED's, in this version I used three LEDs instead of a single common cathode red-green LED, not just because I had more space to put them, but also because it has allowed me to be more creative when making the program.

STEP 1: Materials:

  • Attiny85
  • 8pin chip socket
  • Coin battery holder
  • CR2032 Coin battery
  • Perforated board
  • Pushbutton
  • Hex spacers (around 2cm, 3/4 inch)
  • 8 screws for the spacers
  • Long pin headers
  • Connectors for the pin headers
  • Red, green and yellow LEDs
  • Copper wire
  • 120Ohm resistor
  • 10kOhm resistor

You'll also need a soldering iron.

STEP 2: The Circuit:

The circuit is quite simple, but assembling it together in two different planes can be a bit tricky.

This circuit runs on 1mA when in idle and around 5-6mA when using the LEDs, so assuming the coin battery has a capacity of 200mAh, it should run for a week before draining the battery in case its left on.

STEP 3: Assembling the Cube.

Start by cutting two squares of 11x11 pads, we need an odd number of pads because components like the button occupy an odd number of them, and by making this we make sure they are symmetrical respect to the center line.I also bent the pins of the chip socket so it could fit in a 4x3 group, instead of the usual 4x4, this way it's properly aligned and vertical. You can also connect it in an horizontal way, but making the connections could be harder. If you find hard to do this you can always use a 13x13 boards, or 12x12, if your button occupies 4x4 pads.

Make a hole at the center of the 2x2 pad groups located at the edges, the hex spacers will be placed there, the holes need to be big enough for the screws to fit in. Use a precision tool for better accuracy.

Once the holes are made put the components on the board. I've traced the circuit with colors according to the schematic so you don't get lost when soldering it.

Notice that there is solder under the blue resistor (10kOhms) connecting the LEDs and the chip to ground.

For the main switch I used a a pair of pin headers and a bridge connector from a computer, you can use a small though-hole switch or even a tilt switch.

STEP 4: Connectors

To assemble the pin headers and connectors that will join the two boards, solder a 5 connector row between two hex spacers, using the pads at the edge, remember to separate them into positive and negative. Once the connector is soldered, cut the long pin headers to an appropriate length so they can be fully inserted leaving just a small gap between the plastic holding the pins together and the upper board, then solder them as shown in the picture. It's quite tricky, but I haven't found any other way to overcome this.

STEP 5: Uploading the Code

As always remember that to upload the code to your Attiny85 you must go to >Tools>Programmer>Arduino as ISP and Tools>Boards>Attiny85 1MHz clock.

You can check other instructables on how to program an attiny85 if you haven't worked with them yet.

I strongly recommend you to visit nqtronix's instructable, since he offered to re-do the program with power saving modes and it also contains many and very useful information like program optimization.

You can also check gmiller6's program, he changed the display mode of the random function.

STEP 6: Customization and Probabilities

The yellow LED, which wasn't enabled in the previous version, can now be used, and interpreted as a "maybe". This can be undone changing the program and removing the LED, you could even add a button pattern recognition function or an extra button to disable and enable it.

You can also change the probabilities, for example, you can set red and green (no and yes) to 40%, and keep the yellow (maybe) at 20%. To do this, simply expand the range of the elements in the random function and include them in the statements as shown as shown in the picture.

The random function will output anything from 0 to the second variable minus 1, meaning that if we introduce 3, the results can be 0, 1, or 2 (red, yellow, green). By introducing 5 as the second variable we can get 0, 1, 2, 3 or 4. We can use an "if" function so 0 or 1 are recognized as red (40% chance), 2 yellow (20% chance) and 3 or 4 green (40% chance).

To compare two variables at a time you can use " || " (Alt+124), this is OR, and means that if one OR the other occurs, the statements will be executed.

STEP 7: ???

Since easter is just around the corner I've added an easter egg to the program. And of course I won't reveal what it is or does, if you want to find out you'll have to build the circuit, you could also analyze the program, but that would be cheating. I'll just say this easter egg is quite more elaborated than the random part itself, and you'll probably end using it more too.

STEP 8: Thanks for Watching!

40 Comments

whats the easter egg please tell me

After some time has passed I think it isn't worth to keep it secret anymore. If you keep the button pressed for 3 seconds you enter a mini game, kind of like stacker, but with just one row obviously. You have to push the button when the yellow LED is lit, if you do this, you advance one level, and the difficulty increased by reducing the time between shifts. If you fail to do so you stay on the same level, the red LED will flash indicating the remaining lives, if you run out of lives you're thrown out of the game. (I just lost it btw)

Hey, i made one! I used an RGBLed and added sound. My first piece of soldering! It's a bit dodgy and buggy, but works most of the time. The only thing is the coincell drains very quickly. I skipped the resistors altogether just to find out if that would work...

Nice, I like the sound and light effects. The CR2032 can only deliver 200mAh, and although they have a high internal resistance, they quickly drain if the LEDs are set to work at their max current.

In my case they're quite underpowered just to save battery time.

looks great. where did you find the black perfboard? I start to get bored by the yellowish brown that I have

I painted it black, it was some kind of yellow or faint green before, maybe someone should sell one that it's actually black, since I've been asked about it a lot of times.

It is nicely done, but you should not call it an Arduino decision box. It has got very little to do with Arduino, which is also a protected trademark. Attiny85 based decision box was more appropriate.

Well, I used an Arduino board and the Arduino IDE to program it. But I guess the final thing has not to much to do with Arduino as you said and could be made without the things mentioned above.

Technically, you can install an Arduino-compatible bootloader onto the 'tiny85, and still have room for your code, so it _could_ be an Arduino.

The trademark should be respected, of course, but Arduino do not use it as a weapon against the community... tons of projects use "Arduino" in their name.

Nice! Where'd you source the black perf board?

It is normal perf board, you can notice the typical faint green color underneath. I just painted the top with permanent black marker because I didn't like that color.

Good! =D

Just love AtTiny85!

This is actually a really nice remake of the old version. The barebone construction was a good idea.

I'm not sure if the arduino libary supports that, but the attiny85 supports different sleep modes to reduce the current consumption to just about 2 uA. This results in a standby battery time of mor than 11 years from a CR2032 eliminating the need of an on/off switch. The device can then simply be woken up by any pin change interupt such as pressing the button.

If you want to I can write the program in native C, it shouldn't take too long. :)

Yes, I've heard about the power saving modes of the Attiny, however I haven't been able to implement it because I haven't done enough research. I'll try to update the program as soon as I can If I can come up with it.

Thanks for your suggestion, I don't want to bother you, although if you are going to write and improve the program anyway I would be very grateful if you posted it here.

More Comments