Hi, I am

AKHIL G BABU

I am a

about me

About



I am AKHIL G BABU. I have completed my graduation in BE Mechanical Engineering from Visvesaraya Technological University. I love to make things and I'm a Techno-Gypsie. I worked as an Intent analyst at Sutherland Global Services Inc. I'm a keen observer and tech enthusiast. I enrolled in Fab Academy to enrich my skillset. Traveling and photgraphy are my passion and I've travelled different parts in INDIA on my bike.


NEO CLOCK

Smart toilet device


The project idea consists of a smart toilet device. It is a cylindrical shaped device which can be fixed on the ceiling or wall. I'm planing to buid using 3d printing and acrylic for enclosure. It have three main functions, once fixed inside toilet it automatically senses when a person enters the room, it will automaticaly switch on the light and plays music. It also have an activated carbon filter and a fan to absorb odour inside the toilet.

This was my first project idea. Later I changed this project.

Neo clock

I decided to change my final project. This time I want to make an alarm clock.The interesting part is, it consists of a water pump which will pump water if user dosen't switch off alarm. I am planinig to make seven segment display using neopixel led. The enclosure will be made of acrylic sheets. 7 segment display will be made using 3D printed parts and sand blasted transpareent acrylic sheets.

Neo clock is a water spray alarm clock which comprises an alarm clock body made using acrylic and 3d print, a water reservoir, a water spray nozzle, a water spray pump water pipe, a control circuit board.Tthe control circuit board is used for controlling, when the alarm clock alarms for one minute, but the stop button is not pressed down in the mobile app, the water spray device sprays water through the water spray pipe, so a user is awakened from a sleeping state, and is prevented from oversleeping.



Inspiration

I found this page by leonardlee in thingiverse which is similar to my idea. In this design they used ony 3d printed parts. I want to accomodate 3d printing, laser cutting, sand blasting &flexible pcb in this project.





For designing, I used fusion 360 and Inkscape.



First I designed 7segmet display.



Added top portion.



Changed material and colour, so that it look realistic.



I want both seconds, minutes & hours to be displayed, so I added 5 more segments.



Added 4 LEDs in between the numbers.



Added 3mm acrylic sheets behind to keep segment display in positon. Later I have added one more layer for strength.



First trial model. I forgot to add clearence at top for the acrylic sheet.



Fixed the errors and finalised print.



I tried both sand blasting and laser engraving for diffusing 6mm sheet. It seems sand blasting is much better compared to engraving. Sand blasting gives more uniform finish.



It is perfect press fit.



This is 3mm acrylic sheet for the base plate.

Final assembly.



Electronics design

I used Autodesk Eagle for designing PCB.



For the reference, i have linked the project in fusion 360 and Eagle. The base plate is converted into pcb and imported to eagle.



Cutting lengthy PCB and sticking it is very difficult task, I divide it into 3 parts and combined them.



I have used flexible pcb from 3M.



Peeling the small parts after cutting is very difficult. Instead I peeled copper sheet an sticked on white tape am=ns milled it.

Removed unwanted parts using sharp blade and tweezers.



Finished assembly.



Neopixel (WS2812B)

NeoPixel is Adafruit's brand of individually-addressable red-green-blue (RGB) LED. They are based on the WS2812 LED and WS2811 driver, where the WS2811 is integrated into the LED, for reduced footprint.



Read the data sheet here



Soldered 2 LEDs for testing.



Testing neopixel for first time.

All parts of LED display.



Soldering such small plastic led is time consuming process.

Making the base box.

I wanted round edge for the box. I used 3mm and 6mm sheets for this. First I bent the sheets using hot air. To get uniform surface finish I have used F-clamps. But the final results were not satisfactory. Once heated the 3mm sheets loose strength and it is very difficult to maintain the shape. For the water tank I used 6mm clear acrylic sheets.Allways use safety gloves while using hot air.

I tried kerf bending for more surface finish. I downloaded the kerf design file from the trotec wesite. I used online PDF to DXF converter to convert the file to use in inkscape.



Download the kerf design file here

The side looks perfect.



The power supply to the motor is passed throuth the side wall and the hole can be fixed using hot glue.



I use 12v 4.2w brushless DC pump from aliexpress.



Fixed motor using double side tape



Finished all the assembly.

Testing the waterpump.

Arduino

                                            #include <Adafruit_NeoPixel.h>
                                            #include <TimeLib.h>
                                            #include <Wire.h>
                                            #include <DS1307RTC.h>
                                            
                                            #define PIN 9
                                            #define DIGITS 6
                                            
                                            #define S1_START 0
                                            
                                            #define S2_START 7
                                            
                                            #define P1_START 14
                                            
                                            #define S3_START 16
                                            
                                            #define S4_START 23
                                            
                                            #define P2_START 30
                                            
                                            #define S5_START 32
                                            
                                            #define S6_START 39
                                            
                                            
                                            Adafruit_NeoPixel strip = Adafruit_NeoPixel( 7 * DIGITS + 4, PIN, NEO_GRB + NEO_KHZ800);
                                            
                                            byte segments[10] = {
                                              0b1110111, //0
                                              0b0010001, //1
                                              0b1101011, //2
                                              0b0111011, //3
                                              0b0011101, //4
                                              0b0111110, //5
                                              0b1111110, //6
                                              0b0010011, //7
                                              0b1111111, //8
                                              0b0111111, //9
                                            };
                                            
                                            
                                            
                                            void setup() {
                                              strip.begin();
                                              setSyncProvider(RTC.get);
                                            
                                              colorWipe(strip.Color(255, 0, 0), 50);
                                              colorWipe(strip.Color(0, 255, 0), 50); 
                                              colorWipe(strip.Color(0, 0, 255), 50);
                                              
                                              rainbowCycle(2);
                                            }
                                            
                                            void loop() {
                                              clearDisplay();
                                            
                                            
                                              printSeconds();
                                              printMinute();
                                              printHour();
                                            
                                              strip.show();
                                            
                                              dotOn();
                                              delay(500);
                                              dotOff();
                                              delay(500);
                                            
                                            }
                                            
                                            
                                            void writeDigit(int segStart, int value) {
                                              byte seg = segments[value];
                                              for (int i = 6; i >= 0; i--) {
                                                int offset = segStart + i;
                                                uint32_t color = seg & 0x01 != 0 ? strip.Color(50, 0, 0) : strip.Color(0, 0, 0);
                                                strip.setPixelColor(offset , color);
                                                seg = seg >> 1;
                                              }
                                            }
                                            
                                            void clearDisplay() {
                                              for (int i = 0; i < strip.numPixels(); i++) {
                                                strip.setPixelColor(i, strip.Color(0, 0, 0));
                                              }
                                            }
                                            void dotOn()
                                            {
                                              strip.setPixelColor(14, strip.Color(0, 255, 0));
                                              strip.setPixelColor(15, strip.Color(0, 255, 0));
                                              strip.setPixelColor(30, strip.Color(0, 255, 0));
                                              strip.setPixelColor(31, strip.Color(0, 255, 0));
                                              strip.show();
                                            
                                            }
                                            
                                            void dotOff()
                                            {
                                            
                                              strip.setPixelColor(14, strip.Color(0, 0, 0));
                                              strip.setPixelColor(15, strip.Color(0, 0, 0));
                                              strip.setPixelColor(30, strip.Color(0, 0, 0));
                                              strip.setPixelColor(31, strip.Color(0, 0, 0));
                                              strip.show();
                                            }
                                            
                                            
                                            void printSeconds()
                                            {
                                              int secondT = second();
                                              int  secondTF = secondT / 10 ;
                                              writeDigit(S5_START, secondTF);
                                              int secondTS = secondT % 10;
                                              writeDigit(S6_START, secondTS);
                                            
                                            }
                                            
                                            void printMinute()
                                            {
                                              int minuteT = minute();
                                              int  minuteTF = minuteT / 10 ;
                                              writeDigit(S3_START, minuteTF);
                                              int minuteTS = minuteT % 10;
                                              writeDigit(S4_START, minuteTS);
                                            
                                            }
                                            
                                            void printHour()
                                            {
                                              int hourT = hourFormat12();
                                              int  hourTF = hourT / 10 ;
                                              writeDigit(S1_START, hourTF);
                                              int hourTS = hourT % 10;
                                              writeDigit(S2_START, hourTS);
                                            
                                            }
                                            
                                            
                                            void rainbowCycle(uint8_t wait) {
                                              uint16_t i, j;
                                            
                                              for (j = 0; j < 256 * 5; j++) { // 5 cycles of all colors on wheel
                                                for (i = 0; i < strip.numPixels(); i++) {
                                                  strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
                                                }
                                                strip.show();
                                                delay(wait);
                                              }
                                            }
                                            
                                            uint32_t Wheel(byte WheelPos) {
                                              WheelPos = 255 - WheelPos;
                                              if (WheelPos < 85) {
                                                return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
                                              }
                                              if (WheelPos < 170) {
                                                WheelPos -= 85;
                                                return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
                                              }
                                              WheelPos -= 170;
                                              return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
                                            }
                                            
                                            
                                            void colorWipe(uint32_t c, uint8_t wait) {
                                              for (uint16_t i = 0; i < strip.numPixels(); i++) {
                                                strip.setPixelColor(i, c);
                                                strip.show();
                                                delay(wait);
                                              }
                                            }
                                            
                                            

Download arduino sketch here

Testing after adding RTC

Download DXF file for laser cut here

Download f3d files for 3D print here

Turning clock into table lamp

Check Interfacing & application week for more details.



Download APK file here

Making single circuit board

Final step is to combine all the circuit boards and make single board which runs at 12v adapter. I am using DSC1307 RTC module for Real time clock & HC-05 Bluetooth module for communicating with the the mobile app which is made using MIT app inventer.



HC-05 bluetooth module

The HC-05 is a very cool module which can add two-way (full-duplex) wireless functionality to your projects. You can use this module to communicate between two microcontrollers like Arduino or communicate with any device with Bluetooth functionality like a Phone or Laptop

Read more about HC-05 here

DS1307 RTC (Real time clock)

Real time clocks (RTC), as the name recommends are clock modules. The DS1307 real time clock (RTC) IC is an 8 pin device using an I2C interface. The DS1307 is a low-power clock/calendar with 56 bytes of battery backup SRAM. The clock/calendar provides seconds, minutes, hours, day, date, month and year

Read more about DS1307 here

Schematics









Download design file herehere

We are out of 1\64" mill bit in our lab, instead I used .3125mm bit and failed many times.



I have used voltage regulator for lowering 12v to 5v. Mosfet is used to drive the dc pump.



BILL OF MATERIALS

contact me

Reach Me

Components From where Price
FR4 sheet Aliexpress 2.71 $
Buzzer 2Khz 16OHM Aliexpress 1.08 $
6mm Acrylic Sheet Aliexpress 3.45$
3mm Acrylic Sheet Aliexpress 2.44$
3d print Fablab inventory 0$
Vinyl sheet Local shop 1$
Water pump 12v Ali express 5$
Neopixel Ali express 5$
10mm pipe 5meter Amazon 5$
Atmega 328p Amazon 3.5$
12v Supply Amazon 3.5$
Capasitors Fablab inventory .99$
Flexible PCB Fablab inventory 10$