The most critical part of a successful project is having a truely great idea, but sometimes the idea is the easy part! After that comes the hard work in making a random flash of genius into something that people "ooh" and "ah" over.
Initially, turning a concept into reality may seem complicated but by following a few simple rules you can break any project into manageable peices that are simple individually but when brought together are awesome! By using my Driftwood Binary Clock as an example, I am going to demonstrate that the development of a complex circuit is a relatively straightforward task while giving a number of few hints along the way.
This instructable is not about creating any one project, rather provided tips and tricks on how to make your ideas a reality.
Step 1: Make a Function List
I have looked at various binary clocks that have been posted on Instructables and other sites and always wanted to make one of my own but didn't know where to start. The easiest approach would have been to copy someone elses code and circuit; however, I wanted something that set mine apart as well as being my own creation.
The first step was to create a function list that describes what I wanted the clock to do:
- Display the time
- Alarm function
- Change display colours
- Change display intensity based on ambient light
- Remote control
- Accurate time
From the function list you can work out the different circuit functions that are required - for example to change the display intensity based on the ambient light you need to measure the light and therefore need some hardware to do this. A complete list of the individual circuits and their function for my binary clock is as follows:
- LED display matrix - time display
- Microcontroller (arduino) - time and alarm control, display driver
- Audio player - alarm audio
- Ambient light reader - light intensity control
- Remote control module - remote control
- Alarm set indicator - alarm display
- Real time clock - accurate time keeping
Step 2: Research
Once you have broken your project down into individual circuit functions you can determine what you know how to do and what needs to be researched. Using the clock example again, I have listed each circuit function and what my original assessment was
Understood - no research needed:
- LED display matrix
- Microcontroller (arduino)
- Audio player
- Remote control
- Alarm set indicator
Unknown - research required:
- Ambient light reader
- Real time clock
As I have said in a previous instructable (Fixing a monitor with a breadmaker), the internet is one of the most powerful tools available. You should be able to find both code and circuit examples for nearly every component that you will ever need to use. In my clock example, I was comfortable in programming the Arduino to control the LED display but I had never used a Light Dependant Resistor (LDR) before (an LDR changes its resistance based on the ambiant light and therefore can be used to determine how bright the LED array should be). After a short search I had found a number of tutorials and had enough information to try out some ideas.
Step 3: Testing Individual Circuit Functions
Once you have some ideas on how each circuit function can be constructed, build a circuit that enables just this one function. This allows you to test your ideas, ensure the item is functional and fine tune any run time parameters.
Using the LDR example, a very basic circuit was made and a few lines of code written. This allowed me to see how the LDR output varied with light and how it could be converted into a usable value for controlling the LED array.
Initially the code only outputed the brightness value to the serial output within the arduino IDE. Once I was sure that I could successfully acheive the control I wanted, the circuit was expanded to include the LED array. By the inclusion of the final output device both the minimum and maximum brightness levels could be set to ensure you are not blinded at night nor unable to read the output when in direct sunlight.
As an alternative to physically building the circuit, you could use programs such as Tinkercad circuits to simulate both the circuit and the code. Programs such as these allows you to sneak in some devleopment time while you are waiting for the kids music lessons, etc to finish! Two images are attached to this step that show the two steps described above with the links below:
A good Instructable on the use of Tinkercad can be found here: https://www.instructables.com/id/Arduino-Serial-Monitor-in-Tinkercad/
Step 4: Prototype
Once you are confident in how the individual components work, develop a circuit where each circuit function is added individually and the code adapted to account for the new functionality that you have added.
While this is significantly slower that adding everything at once and involves writing multiple programs, the benefit is that you can quickly identify any conflicts between components and resolve the issue. In my case, everything was working fine until I connected the remote control reciever. As there were nil issues prior to that, I could concentrate fault finding in this particular area. After no issues were found using basic faultfinding, advice from the internet was sought and the problem was resolved. This is an example of where I thought I knew how something worked but in the particular circuit, it turns out that I didn't! Don't ever be shy in stopping what you are doing and looking for more information.
The sequence of photos attached is an attempt to show the various steps that I went through in constructing the final prototype. The LED array was omitted in a couple of the photos but this was an oversight when taking the photos rather than any specific reason!
Sketch out the completed circuit once you are completely happy with your protoype but DO NOT disassemble it at this point.
In a similar manner to the development of the individual components, Tinkercad circuit can be used to prototype the complete project. There are both advantages and disadvantages to this approach and it is best to see what works best for you. The biggest issue I have noted with online simulation tools is that they sometime limit the component and code libraries available
Step 5: Final Construction
Hopefully you have enough components to make the final circuit whilst leaving the prototype as a reference. I have found that no matter how much care I take in sketching the circuit, it is alway easier to refer back to the prototype to confirm a connection or component orientation.
I generally use prototype board for my projects but if you want the most robust and professional finish, have a go at making your own PCBs. There are a number of good Instructables on this (and remember the internet is one of the best tools we have!).
Take time in considering how each component is going to sit on the board and what it needs to connect to. You want to minimise the length of tracks and provide good power rails to ensure everything works correctly. I didn't follow this advice and after final construction, the arduino reset every time the audio module started to play the alarm. As I had constructed a prototype, I knew that everything should work and that the issue was therefore specific to the board layout. Once the power tracks were made bigger, all problems disappeared.
Step 6: Summary
As stated at the start, this instructable was not about building a project, rather it was to assist in making many successful and unique projects. To do this you should:
- Document the main functions of your idea
- Use the function list to generate individual circuit functions
- Research each circuit function
- Test each circuit function
- Develop a prototype by adding each circuit function separately
- Finalise the design
This instructable has been my take on how to successfully take a flash of genius and successfully implement the circuit required. I am sure there are many alternatives; however, I know this works for me and I hope it works for you as well.