Pulp therapy instruments
As a dentist, I face many challenges in my clinic , one of which is keeping my instruments well organized and easily accessible which in turn will help me save time and money, make work more convenient for me and my patients and above all will help maintain perfect infection control.
so I had this idea of making a device for pulp therapy instruments organization which will summon any instrument of my choosing with only a push of a button.
Traditional file organizers:
The software system I used for the CAD process is Autodesk Fusion 360:
Here's how the design process will go like:
Open Fusion 360, Save file and name it
I named it Final Project.
Create New component for the base and name it then create a sketch in it
This is the sketch for my first component "key"
After it is fully defined, finish sketch and extrude
This is the sketch for my second component "wheel"
After it is fully defined, finish sketch and extrude
This is the sketch for my Third component "file holder"
After it is fully defined, finish sketch and extrude
Enclosure parts design goes as follows:
The enclosure base
The enclosure front
The enclosure back
The enclosure right side
The enclosure left side
And the enclosure top
Then I inserted these electric components to project them into my components.
I finally made this component "motor holder" so that my motor and solenoid could be pinned to it
This is how the design process went
After rendering here's what it looks like :
The software systems I used for the fabrication process are LaserWorksV6 and Ultimaker cura:
The machines I used were:
The materials I used were:
Generic PLA
Let's start with the 3D printing process:
We can save the parts to be 3D printed by selecting the body we want to save, right click on it and choose save as mesh.
Then save them as stl files.
Now, let's import the stl files
I imported the key, the wheel, 10 of the file holders and the wheel lid
From the top right toolbar adjust the parameters to:
Resolution = 0.2 mm
Infill = 10%
Fan speed = 20
set the bed temperature to 60C & nozzle to 215C
Slice the design
It will take 8 hours and 44 minutes to print and 85 grams of PLA material
Now it's time to save the file as gcode to be ready for 3D printing
the file name has to be like this:
name_ color_resolutuin_whight_time
Final Project_ White_0.2_85gm_ 8hours and 44min
Choose print from the printer panel and from media choose the file, then press OK.
Bed and nozzle temperatures are set to 60, and 215 C
The 3D printing process:
I printed the wheel first overnight at the fab lab then the rest of the components.
The 3D printed parts
Now let's get to the laser cutting process:
We can save the parts to be laser-cut by selecting the face we want to save and from create toolbar, choose save dxf for laser cutting
Next you need to open LaserWorks software, import your files and adjust the cut parameters. I set the speed to 30 and the power to 50
I then engraved the name of my project and my own name on it.
Now press the download button, from the machine, press file, choose the file, set the origin point then press start
Here is the final parts to be laser cut.
Here are all the fabricated parts:
Electric circuit components I used were:
Jumper wires
crocodile wires
Arduino UNO
12V adaptor
breadboard
push button
Keypad
LCD screen
Stepper motor
Stepper motor driver
Solenoid
DC Jack to terminal block converter
On/Off switch
The input components are keypad and push button
The action components are I2C LCD screen, buzzer, stepper motor and solenoid.
I will power my circuit using 12V adaptor.
Here's how to wire the circuit:
Wiring diagram for my circuit:
Ps: Tinkercad doesn't contain the DRV8825 motor driver I used, so I used the driver in the diagram as a replacement to it which is connected like this
2 slots for 9v or higher current and GND.
Another 2 slots for 5v and GND.
3 pins S,D&E are connected to Arduino pins 10,11,12
Powering:
I will have 3 different power rails: 9V powered by the 9V adaptor, then I will take 2 wires and connect them to the Arduino VIN and GND pins.
From the Arduino I will power the 5V rail
The solenoid will be connected to the push button and powered seperately using the 12V adaptor
keypad is connected to Arduino pins 2,3,4,5,6,7,8,9
LCD screen is connected to Arduino pins A4, A5 and breadboard's 5V and GND
Stepper motor is connected to its driver then the diver pins S,D and E are connected to Arduino pins 10,11,12 and to 5Vand 9V of breadboard
Solenoid is connected with the push button to the 12V rail on breadboard
The buzzer is connected to Arduino analog pin A0
Here's the whole circuit:
I used Arduino IDE software to write and upload my code on the Arduino board:
I followed "divide and conquer" principle.
First of all, I wrote the code for the stepper motor:
There are two challenges we have for controlling the stepper motor:
Setting the stepper to a fixed position every time we power the device and call that position step 0 . This is called "Homing".
And for this function to work we have to add a limiting switch to Arduino pin 13 and GND
Making the stepper motor revolve around 360 degrees into 10 fixed positions we can summon any of.
The Homing code
The limit switch fixed to the desired position
Another wider angle showing the limit switch
Fixing this step to our wheel in a position that it hits the limit switch once when in action.
First we have to include the library for the DRV8825
Then define the pins that the stepper motor are connected to" 10, 11, 12" and the limit switch"13"
In the void setup we identify the step, direction and enable pins as outputs and limit switch as input_pullup
In the void loop we write this code to make it stop when it hits the limit switch. this will be our home position.
Here it works perfectly:
Stepper positioning code
First , we include the stepper motor library ,then put int for steps per revolution, and defined the Arduino pins which the S&D of stepper were connected to 10,11
In the void setup section, I set the speed which I want my stepper to move according to
In void loop section, we tell the stepper to go to a certain step ,for example step number 180
Here's how I wrote my entire code:
First, I included the libraries for components I used which are keypad, wire library" for certain communication of LCD screen" , liquid crystal I2c for the I2c LCD screen we have, the stepper library and DRV8825 library for our motor driver which we will need later for homing
I defined the address for the LCD screen and number of columns and rows.
I put an int for buzzer and stepper motor as explained before
I then defined the motor step, direction and enable pins then created an instance for the DRV8825 motor driver which I will need later for homing
I put an const int for the keypad rows and columns numbers and gave the keys characters then defined the Arduino pins which the keypad is connected to which are 2,3,4,5,6,7,8,9
Here's what I wrote in the void setup section:
I began serial communication using Serial.begin(9600) order.
I defined the S,D&E pins in the motor driver and buzzer on A0 analog pin as outputs
I defined the limit switch pin as input_pullup
I initialized the DRV8825 motor driver to be used for homing my stepper motor
I initiated my LCD screen and backlight (to write something on the LCD you have to set cursor which indicates the place you want to write in ,so I made it write the name of the device "Digital File Organizer" when we first power it, delay for 3 seconds"3000 ms in Arduino code" and then clear the LCD screen)
I then set the speed for my stepper motor.
Here's what I wrote in the void loop section:
I gave an order to digital read the key character inserted by the keypad and initiated an if condition that if that key was '1' do the following ( First, bring the motor to home position. then go to the desired step )
I designed the '1' button to make the motor stand in home posittion.
Ps: notice that digitalWrite of enable pin is always LOW in homing or it will disable the motor and make it take no further actions.
The serial monitor will show the word Blue File when pressed on '1' on keypad and the buzzer will make a sound
The LCD screen will show the word "Blue File"
in the 'else' condition if the user pressed '2' button it will make a different action
If the user pressed '2' , the motor will first go to home position and then go to step nuber 180
The buzzer will make a sound and the word "Red File" will show on the LCD screen.
And the same for the next keys
As you can see the code is working perfectly as intended:
Here's how I assembled and integrated my components together:
I brought all the physical components, electric circuit components, nuts and screws
I first fixed the stepper motor to the motor holder using screws then fixed the motor holder part to the base.
The limit switch is fixed in position.
Next I put the wheel in position. then fixed the front part
The parts are assembled together using T-slots mainly.
I fixed the electric circuit components their desired position.
The keypad goes out of this slot I designed and fixed to the front part using mounting tape.
Another tip to close the top of the device using t slots without the nut falling inside is to put a little piece of tape behind the nut then fix the upper part using screws
The top part is fixed properly in place
This part is supposed to open and close to load the wheel with files.
Here's my device. Everything is intact and in place.
The device works perfectly as intended:
One of the hard challenges I faced was that the stepper motor doesn't reset when it works. it just runs a number of steps.
So, we can't have fixed positions for the slot we want to summon.
To solve this problem, I asked Abdelrahman Orabi for help and he suggested and helped me with the idea of using a limit switch with the stepper motor to make it stop at a fixed position. This process is called "Homing" and is used in many devices such as the 3D printers we use in the Fab Lab.
First, I connected the limit switch to Arduino pin 13 and GND
The limit switch was fixed to the desired position
Another wider angle showing the limit switch
Fixing this step to our wheel in a position that it hits the limit switch once when in action.
And this is the code for homing:
First we have to include the library for the DRV8825
Then define the pins that the stepper motor are connected to" 10, 11, 12" and the limit switch"13"
In the void setup we identify the step, direction and enable pins as outputs and limit switch as input_pullup
In the void loop we write this code to make it stop when it hits the limit switch. this will be our home position.
Here it works perfectly and goes to home position:
If I had more time I would include the solenoid in my device to push the file outwards using the push button.
Also next time, I would edit my design to include this part to be 3D printed with the wheel
Finally, I'd like to thank some people who were of great help through my maker journey:
Hala Gamal , my instructor for teaching me all the amazing things I learned throughout my journey in the maker diploma.
Abdelrahman Orabi, for suggesting the idea of using a flexible coupler when I asked him how to attach the key I printed with the stepper motor and for giving me the idea of using a limit switch for homing the stepper motor. You were of great help. Thank you.
Esraa Rageh, for helping my with a lot of problems that I faced in the offline sessions.
Wasiem Ahmed, for giving me a lot of tips and tricks that helped me a lot and for being one of the most inspiring peers that I look up to.