3D printing – In color!

Category: 3D Printingdaid @ 12:16 March 29, 2012

This 3D printer is fun. It’s loads of fun. It’s a great machine, which can produce whatever you can think off. Or, whatever other people think off. I used to only have black plastic. And some red. So I printed quite a bit of black objects.

But now, I have 15 different colors of plastic now! And some of these colors are really awesome. Taking photos of prints is always hard, as the plastics are shiny. But I tried anyhow.

Want a unicorn? How about a pink one? From: http://www.thingiverse.com/thing:9084 sadly, it’s no longer a unicorn. Because it’s horn broke off. But on the good side. It has made a friend happy. (He has a crush on pink ponies)

Or how about a red dragon, protecting your heart. On a black base. Very nice print, but a bit of black got into the heart, and the final part got a bit burned…

Red yoda he be. Bad photo, and might look not very high quality, but it’s a tiny print.

Or a cute little red companion cube (it won’t stab you, or, it hasn’t stabbed me so far)

Or what about this. A green dragon. On a blue base. With a chest, which looks white. But in reality is the most awesome color ever made. It’s “glow in the dark”.

A dark green top of a tank. I still need to print the other tank parts. And I have the same tank in black. Which kinda shows how my printing quality has improved: http://daid2.mine.nu/~daid/IMG_20111007_010722.small.jpeg

These are just some of the colors I have now. And I still have more colors to play with:

So expect more colored prints from me!


A is for awesomely simple time sink!

Category: Uncategorizeddaid @ 18:07 January 20, 2012

The other day, I was browsing on the forums from Tigsource. Which is a forum for indie game developers. It’s full of professionals and hobbyists that share a love for creating/playing games.

I was looking for inspiration and examples of pixel art. And they have a whole dedicated topic for that: http://forums.tigsource.com/index.php?topic=167.16560 It’s well over 1100 pages long, with 15 posts per page. That’s one huge topic.

Now I was looking for some specific art that I knew was in that topic, but I had no idea where it was hiding. So I came up with the idea to build a small tool to get all the images out of the topic and list those. Less then an hour later I had a page trying to show me 8000+ images. Which crashes firefox, and chrome aborts saying the page has an error. Some quick hacking later I had 1000 images per page. Which worked for firefox, but not for chrome, so I reduced that to 500 later on.

Thinking, this must have been done before, and it’s not that special. I posted it on the forums. And I got a whole bunch of awesome reactions. There where a few requests, and a few problems with the tool. So I did a new version to solve the issues and to add features like viewing a few other topics, and linking back to the forum.

In the end, I created a tool which is a HUGE time sync. So be warned before you click this link: http://daid2.mine.nu/~daid/tigsource_pics/

And have fun.

Oh, and I did manage to draw this bald walking dude template like sprite:


Projects, projects, projects…

Category: Uncategorizeddaid @ 16:10 January 11, 2012

Ever have that feeling that you got to many projects ideas, and projects you are working on? I have this all the time. Sometimes I even forget projects I have laying around. Let me name and explain a few active projects of mine.

Printable Lathe

This is actually a “redesign” of someone else. It’s a mini lathe which is printable on a 3D printer. The design files can be found at http://www.thingiverse.com/thing:12472 I’ve printed a few parts of it, and I have most extra mechanical parts that are needed. But I ran into a problem with my printer which made me forget about this project.

Status: 20%-30% printed, 80% of the other parts acquired.

Printable Mini Eggbot

An Eggbot is a simple plotter that can write on sphere shaped objects. Like eggs (100$ question is where the name Eggbot came frome!) There are a few Eggbot designs on Thingiverse: http://www.thingiverse.com/tag:Eggbot

However, I made my own design. Which doesn’t use laser cut parts, and as few other parts as possible. I also added the cheapest step motors I could find… and I shouldn’t have done that. Those motors have a lot of play in them. I think an elastic band might get around that. However, this project is currently in the “electronics” phase. The 3D parts are printed, and I just need to wire up the motors to a controller.

Status: Design untested. Bad motors. Electronics in the work.

Remote controllable thermostat

Ever got into your bed only to discover you forgot to turn down the thermostat? Or left home and forgot to turn it down? Or it’s cold outside and you want your house to be warm before you get home. Happens to me quite often. The solution is simple, make your thermostat remote controllable.

However, this isn’t is simple as it sounds. There is a standard protocol called “OpenTERM” which is used by thermostats. EXCEPT if you have a Nefit branded central heater. This manufacturer decided they do their own stuff. So I’m going to hack the thermostat itself, instead of sniffing the protocol.

Thankfully someone already did some heavy lifting: http://www.picbasic.nl/frameload.htm?http://www.picbasic.nl/thermostaat_nefit.htm

However, I do not like his implementation. It stops the normal control from working (as the potmeter is removed), and it uses a PIC. I would like the normal control also to work, and I want to use an AVR. This project is more of a components/space/wiring problem. As I need some way to get data to my thermostat, which is on the other side of the room compared to my other equipment. I also need to get some of the parts I need.

Status: Ordering parts.

Freaking Laser Beams!

In the land of the blind, the one eyed man….. …is most likely holding the laser.

Let me first point out that lasers are dangerous. And stuff I’ve been reading is really scary. Simply, I figured it might be cool to see if I could add a laser engrave/cut attachment to my 3D printer. So I started to read into lasers.

After a while I found http://www.repairfaq.org/sam/lasersam.htm which is a full guide into just about anything to do with lasers. On a technical level. And there is http://laserpointerforums.com/ for any questions. And that’s where I read the horror stories. There are 3 kinds of stories that keep poping up, first is “home build lasers without a regard of safety”. Yes a home build handheld laser from a DVD burner is cool, hoever, it’s powerful enough to blind someone.

Against blinding you should use safety glasses, which brings me to the next horror story. Suppliers of safety glasses that lie. People tested different brands of glasses, some supplied with the lasers they should protect against, and some of those glasses don’t work AT ALL. This is bad for safety equipment.

The last is the horror of sellers selling strong lasers under “safe” labels. “Safe” lasers are below 5mW. Anything over 5mW is not allowed on eBay for example. So sellers are selling 200mW lasers as 5mW. This means you could think you have a reasonable safe 5mW laser, but it really can burn your eyes out in a blink.

So I’m not sure about this project yet. Lasers are cool, but eye damage is very uncool.

Status: Planning.

DIY double switch dimmer

I have two main lights in my living room. But they are both a bit too bright in my opinion. So I want to dim them. However, all the dimmers I can find are not in the same color as my light switches, or are only a single connection instead of two. So the quest for the DIY dimmer is started. I have found some circuits to build a dimmer, so I need to get the parts and figure out how to get it all wired up in the tight space I have.

Status: Ordering parts, drawing schematics.


3D Printing – The Software – Modeling

Category: 3D Printingdaid @ 17:09 November 24, 2011

So, here we are again. This time to tell you something about the software involved in 3D printing. The idea behind 3D printers is quite simple: You get an idea, imagine the object that you want, and print it.

In practice however, there are quite a few steps. You cannot simply think up a object, plug in the printer to your head, and print it. (And if you could most men would print a constant stream of female bodies…) The process from idea to object contains 3 major steps.

Below I’ll start with explaining some of the options in the first step. Namely “Modeling”

Continue reading “3D Printing – The Software – Modeling”


3D Printing – The beginning.

Category: 3D Printingdaid @ 17:50 November 16, 2011

So, here we are again. And I wanted to tell you about a piece of software I’ve been working on.

I’ve done some very technical stuff about Skeinforge a few posts back. And I’m working on a faster (better?) replacement. But let me take a step back. A step back all the way, and explain a few other things first. Lets begin at the beginning.

Personal 3D Printing – How it started.

Personal 3D printers. It sounds like magic, or sci-fi. However, it started somewhere in 2007. With a machine called the “RepRap Darwin”. It took 2 years to develop this 3D printer, which had as goal to print it’s own parts as much as possible. So a RepRap could build another RepRap. A simple plan, but a difficult execution. It took 2 years to develop this printer into a working state. But once they had it figured out, it started to move forward.

This “RepRap Darwin” was the first machine. It’s bulky, slow, and (in my opinion: ugly). But it worked, and from this design the future was made. A future with better RepRaps. And so they developed the next generation of RepRaps.

Which all became better, faster, more accurate. The next generation was called the “Mendel”, which was cheaper to build, smaller, and generally better. And for about $400 in parts next to the printed parts you could own your own 3D printer now.

Still, there are issues. You need to source those parts yourself, look for suppliers, and buy the parts you need. Suppliers are not easy to find, and for some of the rare parts they are all based in the US. And shipping costs from the US to Europe are pretty high. After you got all the parts, you still had to assemble and figure out a lot yourself. There are a lot of options to figure out.

Personal 3D Printing – For the common man

And where there is difficulty, there are people working on sollutions. So some of the people that worked on the RepRap formed a company called MakerBot Industries. MakerBot Industries designed and started to sell a kit called the Cupcake CNC and later the Thing-O-Matic. This machine could print 3D objects, just like the RepRap. But was build using lasercut wooden parts instead of printed parts, so it could not replicate itself.

However, as a kit form you had everything you need for your own printer. No longer you needed to find parts from all over the world. No longer you had to construct some of the trickiest parts. You could just buy a kit and have your own 3D printer assembled soon.

The kit is sold from the US, so you still pay high shipping costs. And it has a build area of only 10x10x10cm for a large machine of 30x30x40cm. So interesting, but it can be done better. And (not to praise the Dutch or anything, really!) some guy from the Netherlands did.

Bring in the Ultimaker. A personal 3D printer for about the same price of a Thing-O-Matic, but with a 20x20x20cm build area for a 30x30x30cm machine. That’s the same size machine, with 8x the build volume. It’s also the fastest machine out there right now.

But best of all: It’s sold from the Netherlands. Bye bye expensive shipping costs! It’s still an expensive machine, but a guy needs a hobby. So I ordered one. And waited… waited… waited a bit more. And finally got the kit, it took 5 weeks from order to shipping. Which is about what they promise on the webshop.

Personal 3D Printing – Really?

It took me, solo, 1 man job, 8 hours to assemble the kit. From unpacking to first print. And it worked! Seeing a machine you build move for the first time is a rush I can tell you. Seeing the machine produce something is even a bigger rush.

These where my first 2 prints. They are far from perfect, because I didn’t follow one of the instructions correctly, but they where prints!

I didn’t want to figure out what was wrong, it was 01:00 already at that point. So I went to bed.

Now, the world is not as pretty as it always looks. I’ve had my share of problems from this point on. Both software and hardware related, being an Engineer by hearth this wasn’t a real issue for me. But it might cause a lot of frustration with other people.

So, really? Yes. Really, personal 3D printing is here. But not yet for the masses I think. I still get failed prints. But it’s really fun to do. Designing something and printing it in your own living room is a small wonder. I was talking to a friend of mine, who was visiting. And he said “So you could print the cube from Hellraiser?”, only a hour later we had 1 half of the cube in our hands. That’s the magic. Idea -> Design -> Print in a very short cycle.

So, and that was the beginning of 3D printing for me. Next, I’ll explain a bit more about the whole design and print process. In which I will show some software which is currently used. But that’s it for now. Goodnight.


KiCad, alternative for Eagle?…

Category: Uncategorizeddaid @ 13:37 November 10, 2011

EAGLE from Cadsoft, is about the standard for PCB design. (PCB design is where you design a circuit board, you know, those boards that contain electrical components)

It’s not the friendliest tool, and it’s not free, unless you are limited to 100x80mm and none-commercial. Fine for most hobby uses really.

But let’s look at KiCad, an upcoming open source project, trying to be better then EAGLE. It looks good:

Everything you need right there, a bit schematic to edit, lots of tiny buttons. So I went ahead and tried it. The basics look about the same as EAGLE, you start and get a project manager. There you create a project and start the schematic editor. All fine there, next, adding a component to your schema…

This took me about 15 minutes, YES, 15 minutes to add my first component. I opened the component library browser, it’s one of the top icons. I could browser all the lovely components there. I wanted an ATTiny45, which I could find with ease. But there are 3 versions, with different packaging types. And I don’t know the packaging types by hearth, so I had to look those up. I found the package I wanted, and I also noticed a nice button with a PDF icon. This button is awesome! It opens the datasheet of the component you are viewing.

That’s where the joy stopped, I wanted to add this component… double clicking? does nothing, all the top row buttons? Nothing. Damn, I must have had the wrong window or something.

Back to the first window, on the right there is a button called “place component”, sounds like what I want. So clicking on it brings me with a nice cursor, clicking in the schematic gives me the following screen:

So I enter “ATTiny45″ press, “search by keyword”, and an error pops up that I cannot find ATTiny45. Also, the dialog closes, so I have to try again. Guess “search by keyword” does not do what it suggests or something. So I use “select by browser”, which pops up the exact same window as before:

Finding the same component, I double click. Nothing, I close the window, the component name is not filled in the previous dialog… Do I have to type each name manually? Nope, it took me another good look, but take a good look at the top bars of these window, and the library browser shown earlier. There is 1 extra button, this button selects the component.

I place 2 different components, just to test, wired them up (which was easy), and then, let’s make a PCB! Going from schematic to PCB is 1 button in EAGLE. In KiCad however, you need to:

  1. Run Cvpcb to select packages to each component (the ATTiny45 had the package already selected, my other component not)
  2. Annotate the schematic (Adds names to each component, why is this a manual action?)
  3. Generate a netlist
  4. Start pcbnew
  5. Import the netlist

A this point… I gave up. KiCad is not workable for me, why? Multiple reasons.

  • One of them is because the ATTiny45, which had the package type preselected, was not known by pcbnew. This was not some special package, but just a SOIC-8. So, the defaults don’t work.
  • Going from schematic->PCB is a lot of work.
  • I have no idea if ‘back annotation’ works (edit the schematic and the PCB gets updates) but I guess that’s another set of manual actions.
  • Selecting packaging types in Cvpcb was horrible (I could select 1 pin packages for a 4 pin device)

Back to EAGLE, which has a few strange UI things, but works, you can see if a component has a working package when selecting the component. Not in the final step of setting up your PCB.

So: KiCad, alternative for Eagle? Nope. Not yet.


Speeding up Skeinforge

Category: 3D Printingdaid @ 11:08 September 27, 2011

A bit of back information. I have a 3D printer. Yes, I have one. I got myself an Ultimaker: http://blog.ultimaker.com/
Which is a cool machine. And I’ll do a write up one day. But for now, I’m tackling 1 piece of software.

Skeinforge.

Skeinforge is the tool which turns a 3D model into GCode, which are instructions for your 3D printer or CNC mill. And it has 2 major problems, one it’s slow, and secondly it’s DOG SLOW. Turning the gears1.stl from http://www.thingiverse.com/thing:10483 into GCode takes 6:52 minutes on a Core 2 2.33GHz machine. And it’s not the most complex model out there. People have reported convert times of 11 hours!

So, it needs to be faster. And it can be. First, install Psyco: http://psyco.sourceforge.net/ just do it. Skeinforge uses it, and it speeds it up. A LOT, time went down to 1:47. Pysco compiles python code with some JIT compiler. I don’t know the details, but it works. And it’s faster, so that’s good.

Now, bring in the profiler:

python -m cProfile –sort time skeinforge_application/skeinforge.py gear1.stl

Runs python with the profile, sorting on total time spend in a function.

I also noticed, Psyco messes with the profiler. With Pysco the profiler reports all time has been spend in the writeExport function. To which only a single call was made. I think pysco takes over from there and the profiler loses track of it. So profiling runs are done without pysco installed.

If we do this we spot 2 offenders. There are 50898067 of calls made “getStepKey”. And what does this function do… it returns it 2 parameters. As every call takes time, this is just a waste. The only place this function is used is in the same file. Removing all the calls to “getStepKey” and just replacing them with the result saves almost a minute! Bringing the export without Pysco down to 5:58 minutes. That’s a 15% improvement with just a minor code tweak!

Next up, “addPixelToPixelTableWithSteepness”, this function is called 34524828 times, and it spends 34 seconds in it. And calls “addPixelToPixelTable” with (x,y) or (y, x) depending on it’s parameter “isSteep”. Now, this all looks an awful lot like parts of the Bresenham’s_line_algorithm which is good, as that’s a fast line algorithm, but it’s bad to split it into functions! The addPixelToPixelTable is only called from addPixelToPixelTableWithSteepness. So that’s 2 calls overhead for every “pixel”. Also, the “isSteep” is checked for every pixel, while it’s static during the whole line draw. So the test for isSteep can be moved before the looping and just make 2 special cases.

And with those adjustments we are down to 4:54 minutes. That’s a 30% improvement. Now let’s see what psyco does with it. With the code changes and psyco installed we run in 1:36 minute. Which is a 11% improvement. Not as good as without psyco. But maybe with more complex models the time saved will improve.

 

I did the following patch on the code, which should apply on any version of Skeinforge: A pre-patched file can be find here (from SF35, other SF engines might not work with this file!)

--- skeinforge-35/fabmetheus_utilities/euclidean.py    2011-09-27 10:39:35.000000000 +0200
+++ skeinforge-35-org/fabmetheus_utilities/euclidean.py    2011-09-26 17:34:36.000000000 +0200
@@ -63,7 +63,7 @@
 
 def addElementToPixelList( element, pixelDictionary, x, y ):
     'Add an element to the pixel list.'
-    stepKey = (x, y)
+    stepKey = getStepKey(x, y)
     addElementToListTable( element, stepKey, pixelDictionary )
 
 def addElementToPixelListFromPoint( element, pixelDictionary, point ):
@@ -115,7 +115,7 @@
 
 def addPixelToPixelTable( pixelDictionary, value, x, y ):
     'Add pixel to the pixel table.'
-    pixelDictionary[(x, y)] = value
+    pixelDictionary[getStepKey(x, y)] = value
 
 def addPixelToPixelTableWithSteepness( isSteep, pixelDictionary, value, x, y ):
     'Add pixels to the pixel table with steepness.'
@@ -173,20 +173,12 @@
     xBegin = int(round(beginComplex.real))
     xEnd = int(round(endComplex.real))
     yIntersection = beginComplex.imag - beginComplex.real * gradient
-    if isSteep:
-        pixelDictionary[( int( round( beginComplex.imag ) ), xBegin)] = None
-        pixelDictionary[( int( round( endComplex.imag ) ), xEnd )] = None
-        for x in xrange( xBegin + 1, xEnd ):
-            y = int( math.floor( yIntersection + x * gradient ) )
-            pixelDictionary[(y, x)] = None
-            pixelDictionary[(y + 1, x)] = None
-    else:
-        pixelDictionary[(xBegin, int( round( beginComplex.imag ) ) )] = None
-        pixelDictionary[(xEnd, int( round( endComplex.imag ) ) )] = None
-        for x in xrange( xBegin + 1, xEnd ):
-            y = int( math.floor( yIntersection + x * gradient ) )
-            pixelDictionary[(x, y)] = None
-            pixelDictionary[(x, y + 1)] = None
+    addPixelToPixelTableWithSteepness( isSteep, pixelDictionary, None, xBegin, int( round( beginComplex.imag ) ) )
+    addPixelToPixelTableWithSteepness( isSteep, pixelDictionary, None, xEnd, int( round( endComplex.imag ) ) )
+    for x in xrange( xBegin + 1, xEnd ):
+        y = int( math.floor( yIntersection + x * gradient ) )
+        addPixelToPixelTableWithSteepness( isSteep, pixelDictionary, None, x, y )
+        addPixelToPixelTableWithSteepness( isSteep, pixelDictionary, None, x, y + 1 )
 
 def addSquareTwoToPixelDictionary(pixelDictionary, point, value, width):
     'Add square with two pixels around the center to pixel dictionary.'
@@ -195,7 +187,7 @@
     y = int(round(point.imag))
     for xStep in xrange(x - 2, x + 3):
         for yStep in xrange(y - 2, y + 3):
-            pixelDictionary[(xStep, yStep)] = value
+            pixelDictionary[getStepKey(xStep, yStep)] = value
 
 def addSurroundingLoopBeginning( distanceFeedRate, loop, z ):
     'Add surrounding loop beginning to gcode output.'
@@ -253,20 +245,12 @@
     xBegin = int(round(beginComplex.real))
     xEnd = int(round(endComplex.real))
     yIntersection = beginComplex.imag - beginComplex.real * gradient
-    if isSteep:
-        pixelDictionary[(int( round( beginComplex.imag ) ), xBegin)] = value
-        pixelDictionary[(int( round( endComplex.imag ) ), xEnd)] = value
-        for x in xrange( xBegin + 1, xEnd ):
-            y = int( math.floor( yIntersection + x * gradient ) )
-            pixelDictionary[(y, x)] = value
-            pixelDictionary[(y + 1, x)] = value
-    else:
-        pixelDictionary[(xBegin, int( round( beginComplex.imag ) ))] = value
-        pixelDictionary[(xEnd, int( round( endComplex.imag ) ))] = value
-        for x in xrange( xBegin + 1, xEnd ):
-            y = int( math.floor( yIntersection + x * gradient ) )
-            pixelDictionary[(x, y)] = value
-            pixelDictionary[(x, y + 1)] = value
+    addPixelToPixelTableWithSteepness( isSteep, pixelDictionary, value, xBegin, int( round( beginComplex.imag ) ) )
+    addPixelToPixelTableWithSteepness( isSteep, pixelDictionary, value, xEnd, int( round( endComplex.imag ) ) )
+    for x in xrange( xBegin + 1, xEnd ):
+        y = int( math.floor( yIntersection + x * gradient ) )
+        addPixelToPixelTableWithSteepness( isSteep, pixelDictionary, value, x, y )
+        addPixelToPixelTableWithSteepness( isSteep, pixelDictionary, value, x, y + 1 )
 
 def addXIntersectionIndexesFromLoop( frontOverWidth, loop, solidIndex, xIntersectionIndexLists, width, yList ):
     'Add the x intersection indexes for a loop.'
@@ -459,7 +443,7 @@
         y = int( point.imag * oneOverOverlapDistance )
         if not getSquareIsOccupied( pixelDictionary, x, y ):
             away.append(point)
-            stepKey = (x, y)
+            stepKey = getStepKey(x, y)
             pixelDictionary[ stepKey ] = None
     return away
 
@@ -1499,7 +1483,7 @@
     squareValues = []
     for xStep in xrange(x - 1, x + 2):
         for yStep in xrange(y - 1, y + 2):
-            stepKey = (xStep, yStep)
+            stepKey = getStepKey(xStep, yStep)
             if stepKey in pixelDictionary:
                 return True
     return False
@@ -1515,7 +1499,7 @@
     squareValues = []
     for xStep in xrange(x - 1, x + 2):
         for yStep in xrange(y - 1, y + 2):
-            stepKey = (xStep, yStep)
+            stepKey = getStepKey(xStep, yStep)
             if stepKey in pixelDictionary:
                 squareValues += pixelDictionary[ stepKey ]
     return squareValues

EDIT

And there is even more, this is just to stupid… for every ‘plugin’ run it checks if other plugins already ran on the GCode. All fine and great, but it does so by splitting the code in lines, for each line replacing text, and then split the string and check it if it contains a certain tag. I replaced the whole function by 6 lines of code. Shaving 40 seconds of the 4:54.

--- skeinforge-35-org/fabmetheus_utilities/gcodec.py    2011-09-20 11:17:43.000000000 +0200
+++ skeinforge-35/fabmetheus_utilities/gcodec.py    2011-09-27 15:09:43.000000000 +0200
@@ -166,24 +166,10 @@
     'Determine if the procedure has been done on the gcode text.'
     if gcodeText == '':
         return False
-    lines = archive.getTextLines(gcodeText)
-    for line in lines:
-        withoutBracketsEqualTabQuotes = getWithoutBracketsEqualTab(line).replace('"', '').replace("'", '')
-        splitLine = getWithoutBracketsEqualTab( withoutBracketsEqualTabQuotes ).split()
-        firstWord = getFirstWord(splitLine)
-        if firstWord == 'procedureDone':
-            if splitLine[1].find(procedure) != -1:
-                return True
-        elif firstWord == 'extrusionStart':
-            return False
-        procedureIndex = line.find(procedure)
-        if procedureIndex != -1:
-            if 'procedureDone' in splitLine:
-                nextIndex = splitLine.index('procedureDone') + 1
-                if nextIndex < len(splitLine):
-                    nextWordSplit = splitLine[nextIndex].split(',')
-                    if procedure in nextWordSplit:
-                        return True
+    if 'procedureDone="'+procedure+'"' in procedure:
+        return True
+    if '(<procedureDone> '+procedure+' </procedureDone>)' in procedure:
+        return True
     return False


Hardware – Electronic dice

Category: Hardwaredaid @ 23:43 April 8, 2011

In January I complained on HackADay about an electronic dice. It was overkill on the hardware, and said I could do better. And I just did, the 7segment displays I had back then where broken. But I salvaged new ones last week.

Hardware wise it’s an ATTiny2313, 4x 7segment displays, 4 resistors and an USB cable for power. And a single button. All packed into a very tight space, with a lot of wires.

Software wise it runs on the ATTiny2313, which has 2K of flash. I’m using 1.3K of it, in which I have a configurable number of dice, configurable dice type. Long presses on the button switch between configuration and throw dice, while a single press throws the dice or increases the number/changes type.

The old 4x 7segment display was just 1 thing, with 12 connections (8x anode, 4x cathode) and I was planning to put the ATTiny2313 behind it. The new 7 segment displays are single 7segment displays, and so I had to connect all the anodes together myself.

The button is connected to the ground on one side, and other other side is connected to an input pin configured with pull-up.

I used 270Ohm resistors, and I shouldn’t have, the display isn’t that bright. But I had those resistors laying around. I’ll think I’ll update those when I change the power for this thing. The USB connection is only to test it. I want to run the power from a single AA battery, which I found some tricks online to make it work.

Pictures!

My soldering hell. It works!

A dice roll total of 33.

Configured as 2d6


The Prophecy – Second Demo Out NOW!

Category: The Prophecydaid @ 21:05 February 16, 2011

We finally finished our second demo of The Prophecy. It contains two stages, the first stage has been updated. We’ve added customizable controllers, a whole new set of enemies. We’ve adjusted the difficulty of many enemies, and to give you more possibilities to defend yourself you can attack upwards now. There are a few cutscenes now to give a story feel. And many more things… but you better find out yourself.

But let me show you this artwork first:

It’s a poster of the main character, Mirenia. We’ll also be selling an official soundtrack to the game, more details about that later.

Download the second demo for the PC

Download the second demo for the Wii

This game was made together with Ezekiel Rage, who did all the artwork, music and sounds. He is great!


Bookshelf

Category: Uncategorizeddaid @ 21:46 January 8, 2011

I’ve build myself this nice bookshelf in my toilet:

That’s how it looks…

if you are hanging upside down.

I got the idea from this instructable (yes, that’s a hammer on my toilet, don’t ask :P )


Next Page »