For this project, we decided to make a version of the child's game “Crocodile Dentist” Essentially, the idea of the game is to press down on the teeth of a plastic crocodile. One of these teeth will randomly cause the crocodile to snap its jaw shut. We ended up making an electromechanical version of this, but instead of a crocodile, we designed a low-poly style dinosaur.
We wanted our design to have more dramatic tension and strategic thinking than the purely mechanical toy. Since the jaw opens a bit more every time you press the button, you know when you're close to being "bitten". And we intended to have each tooth glow a different brightness, indicating roughly how far the jaw will advance when you press it.
Our design is controlled by an Arduino Uno which actuates a standard hobby servo. A custom-milled circuit board contains buttons and LEDs, and sits under the teeth.
Our design achieves:
mechanism: the jaw opens and closes. Also, we use complaint mechanisms to hold the teeth while allowing them to move, so the lower teeth can act as buttons and the upper ones are springy so they they don't hurt when they hit your hand
actuation: the jaw is operated by a servo. A one-way pawl system allows the microcontroller to "reset" the game after the jaw has dropped.
automation: the microcontroller manages the position of the jaw, and responds to someone pressing the teeth only once. It also provides user feedback by turning the tooth lights off once they've been pressed.
application: well, it's not going to change the world, but it's a fun toy.
A key idea with our design is that the servo horn pushes against a pawl attached to the upper jaw, holding it open. When the jaw has opened wide enough, the servo arm slips under the pawl, so the jaw falls shut suddenly. The pawl acts as a "one way gate", allowing for the servo to push the pawl to open the jaw, but when the servo needs to move back to reset its position, the pawl swings out of the way.
The head is designed using Blender, which is ideal for this sort of organic low-poly design. Once the polygon-wrangling was done, we imported the Blender surface into Fusion 360 to give it thickness and add mechanical components.
Since we have to manage 8 buttons and 8 LEDs, and since the buttons have to be securely mounted beneath the teeth, we milled a custom circuit board to carry these parts. (We didn't mill our own microcontroller: we used an Arduino Uno. The Xiao boards have too few pins, and we didn't have time to solve that problem in a clever way.)
First, we didn't think carefully enough about the structural strength of the outer shell: the thin "cheeks" weren't strong enough to support the jaw hinge, and the servo mount couldn't withstand the torque placed on it.
Our lab has had tons of problems with our printers lately, and we had very poor layer adhesion when printing our design, which made the model even weaker than we designed it.
We solved these first two problems by building several reinforcing pieces, which we glued on to the frame to make it more rigid.
The weak frame meant that the servo horn didn't always engage with the opening pawl every time, and sometimes slipped when we didn't want it to. Strengthening the overall design improved this problem, but some fine adjustment is needed.
To really fix these problems, we need to print another lower jaw, but we ran out of time.
Another minor problem was that we didn't include the circuit board as a modeled component in our CAD design. As a result, it didn't quite fit into the mouth piece, and the header wires bumped into the servo. We solved the first roblem with a Dremel, and solved the second problem by soldering the header directly to the traces rather than the solder pads.
There were also a few elements of our intended design that we didn't get to complete before time ran out. In particular, we wanted the buttons to advance the servo by a random amount: teeth that would move the servo farther would glow brighter. You'd think this would be an easy modification to the code, but since an Arduino Uno only has 6 PWM pins, varying the brightness of 8 LEDs was a tricky problem we didn't have time to solve.