Not very many people enjoy cleaning, so we’re all looking for ways to make cleaning a bit quicker and easier. Here’s a list of our favourite cleaning shortcuts for 2020 to help you get your home looking great without too much time and effort.
Slip a paper towel tube or toilet roll over the end of your vacuum hose. This allows you to squash the end of the tube to fit into all those gaps which were previously hard to reach, think window and door sliders, between the couch cushions and in the corners of cupboards and drawers. The cardboard also won’t scratch or damage your trim, walls or furniture.
Clean your silver jewellery and cutlery with baking soda, salt and aluminium foil. The reaction removes the silver tarnish, doesn’t damage your jewellery and doesn’t require any rubbing or brushing.
Are your glasses and cutlery coming out of the dishwasher cloudy? Most people think that this is because they’re not using enough rinse aid or salt. If you use tablets in your dishwasher then its more likely that you’re using too much rinse aid. These tablets are typically designed to be “all in one” so they don’t require you to add rinse aid and salt to your machine as well. In fact, some machines ask you if you are using a tablet and then do not dose extra rinse aid into the water.
Hang a soap dispensing dish brush in your shower. Instead of having to give your shower a big clean every week, hang a dish brush with some liquid in it in your shower and get into a habit of giving the shower a quick clean after every use. It’ll still be hot and the grime won’t have dried in place so it’ll be quicker and easier to keep clean in the long run.
If you find your laundry detergent cap getting sticky and messy from the liquid, especially when you buy larger containers, just throw the cap in with your next load. It’ll come out looking new again and requires no effort from you to clean.
Ice cubes help lift furniture imprints from your carpets. Simply place a cube on the indent and let it melt. Use some paper towel to absorb the water and allow it to dry and your carpet will be as good as new again.
A cup of baking soda will deodorise your closet. Simply place an open cup of baking soda into the corner of your cupboard to absorb any moisture and reduce that musty or damp smell. Also, have a look at these other baking soda hacks which you need to try.
Coffee grounds make a great eco-friendly and gentle scourer to clean your pots and pans. Use a tablespoon of spent coffee grounds to make washing your dirty pots and pans a breeze. You can also use your spent coffee grounds in the garden as a natural fertilizer.
Now that you’ve got some shortcuts lined up to keep you home clean, you’ll have more time for your next DIY project. Let us know how else you’ve saved time cleaning your home in the comments section below.
In this tutorial, I’m going to be showing you how to connect up to 992 servos to an Arduino by using these 16 channel PCA9685 PWM drivers, which are controlled over the I2C interface. Each one of these boards can drive up to 16 servos or PWM outputs and you can chain up to 62 of them together, meaning that you could drive up to 992 servos – all controlled by just two pins on your Arduino. They’re also relatively inexpensive, there are good quality ones available for around $10 online, but you can also find ones from just $2-$3 each if you’re prepared to wait a bit longer for shipping.
Here’s a video summary of the tutorial and servos in operation, read on for the step by step instructions and the code:
Each board has two sets of control input pins, one on each side. You can use either set of control inputs to connect your board to your Arduino, but they’re primarily useful to chain the drivers together. Each board can be plugged into the pins on the board before it, with the first connected to your Arduino.
Each board also has two power terminals at the top to provide a dedicated 5-6V power supply to the outputs and then the 16 outputs along the bottom. What’s also nice about these boards is that they’re already set up to accommodate the 3 pin servo plugs. So you can plug your servos directly into the board instead of needing additional wiring like you’d need if you were plugging the servo directly into your Arduino.
On the top right of each board is a set of bridgeable address jumpers which allow you to bridge different combinations to create a unique address for up to 62 different boards. To change the address of a board, you just need to solder a bridge across the two address terminals. This changes the address as follows:
You can also use these boards to control LEDs, so you can control 992 LEDs individually and control their brightness as well. Although each channel is completely independent, each board must operate at the same PWM frequency. This means that if you’d like to use a combination of LEDs and servos, you’d likely need to split them up across two boards because servos typically operate at 50Hz and LEDs at 1kHz. Also, keep in mind that the maximum current output per pin is 25mA and there are already 220 home resistors in series with all of the PWM pins.
Have a look at this 7 segment display clock which was built using these PCA9685 servo drivers.
Connecting The Boards Together & To Your Arduino
To chain two boards together, we’ll need to add some pins to the right side of the board to plug the next board into.
We’ll then bridge the first terminals on the right to change the address on the second board so that our Arduino can differentiate between the two.
Looking at the back of the board, the board accepts two supply voltages, one between 3 and 5 volts for the logic or onboard chip and the second up to 6V which is to supply the output pins. There is also a note to say that the terminals at the top have reverse polarity protection while the input on the side through the control pins does not.
The power supplied through the terminals is fed to the V+ control pin, meaning that you don’t need to connect every board in the chain through the terminals, unless you’re drawing a lot of current on each.
Now that we’ve added the second set of control pins and changed the address on the second board, we need to create a ribbon cable connector to join the two boards together. You only need to connect 4 pins to your Arduino and between each board, the ground, the two I2C pins and the logic supply voltage VCC. The other two pins, OE and V+ are used to enable or disable the boards and to supply voltage to the output pins. I’ve created ribbon cable to connect all six pins between the boards so that the output voltage is fed to the second board and so that I can use the enable pin in future if needed.
When connecting your PWM drivers to your Arduino, make sure that you use the correct I2C pins.
This is through analogue pins 3 and 4 on older Arduino Uno’s, through digital pins 20 and 21 on older Megas and through the dedicated SDA and SCL pins on later model Unos, Megas and Leonardos. Remember that Vcc is only to supply the logic circuits on the drivers, not the outputs. To drive the outputs it is recommended that you use a dedicated supply through the terminals.
Now go ahead and plug your servos into the output pins on your boards. Make sure that the plugs are put in the correct way around, with the brown wire being ground and the orange wire being the PWM signal.
Programming Your Arduino To Control The Servos
Now let’s have a look at the code and how to control each servo.
We’re going to be using the Adafruit PWM servo driver library. You can install this library easily from the Arduino IDE by going to Sketch -> Include Libraries -> Manage Libraries then searching for Adafruit PWM and clicking install.
Once the library is installed, we can write a simple program to move each of the 6 servos on each board individually.
//Michael Klements
//The DIY Life
//3 May 2020
#include <Adafruit_PWMServoDriver.h> //Include the PWM Driver library
Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x40); //Create an object of board 1
Adafruit_PWMServoDriver pwm2 = Adafruit_PWMServoDriver(0x41); //Create an object of board 2 (A0 Address Jumper)
int servoMin = 150; // This is the servos minimum pulse length count (out of 4096)
int servoMax = 600; // This is the servos maximum pulse length count (out of 4096)
int servoFrequency = 50; // Servo update frequency, analog servos typically run at ~50 Hz
void setup()
{
pwm1.begin(); //Start each board
pwm2.begin();
pwm1.setOscillatorFrequency(27000000); //Set the PWM oscillator frequency, used for fine calibration
pwm2.setOscillatorFrequency(27000000);
pwm1.setPWMFreq(servoFrequency); //Set the servo operating frequency
pwm2.setPWMFreq(servoFrequency);
}
void loop()
{
for (int i=0 ; i<=5 ; i++) //Cycle through moving 6 servos on each board
{
for (int pulseLength = servoMin ; pulseLength <= servoMax ; pulseLength++) //Move each servo from servoMin to servoMax
{
pwm1.setPWM(i, 0, pulseLength); //Set the current PWM pulse length on board 1, servo i
pwm2.setPWM(i, 0, pulseLength); //Set the current PWM pulse length on board 2, servo i
delay(1);
}
delay(100);
for (int pulseLength = servoMax ; pulseLength >= servoMin ; pulseLength--) ////Move each servo from servoMax to servoMin
{
pwm1.setPWM(i, 0, pulseLength); //Set the current PWM pulse length on board 1, servo i
pwm2.setPWM(i, 0, pulseLength); //Set the current PWM pulse length on board 2, servo i
delay(1);
}
delay(100);
}
delay(500);
}
We then create a new object for each of the connected boards, remembering to change the address to suite the address jumpers we’ve used.
We then set a minimum and maximum travel limits for our servos. This is quite important so that you’re not over travelling your servos which may cause them to burn out or strip the gears. We also set the servo operating frequency. Most analogue servos run at 50hz.
In the setup function, we start each board then set the oscillator frequency and the servo frequency.
In the loop function, we’ve got a loop which cycles through the six servo numbers, numbered from 0 to 5 as per the board output numbers.
We then have a loop which drives the current servos, one on each board, from their minimum position to their maximum position with a 1ms delay between movements, which is a relatively slow servo movement.
We then wait 100 milliseconds and move the same two servos from their maximum position back down to their minimum position at the same speed.
We then wait another 100 milliseconds before moving onto the next two servos.
Once all 6 servos have been moved on each board, we wait 500 milliseconds and then start again moving the first two servos and the loop continues.
Let’s upload the sketch and have a look at the servos moving.
Being able to control servos like this enables you to build more complex projects by freeing up your Arduino’s IO and reducing the processing load because these servo drivers produce their own PWM signal. These are great for building robot arms, walking robots and projects involving a lot of LEDs, such as cubes, clocks and simple games.
Let me know in the comments section below what you plan on using these drivers for.
In this teardown video, I’ve taken an iPhone X apart as far as possible with a standard repair toolkit and without breaking any of the components open. I’ve also included some close-up shots of some of the more interesting components to have a look at, have a look at the stills after the video.
Here are some of the still images of the internal components of the iPhone X from the teardown:
These ribbon cable connectors connect the various components in the iPhone together, making repairs and replacements of parts easier. Older model mobile phone’s used to have soldered connections, which required a lot of effort to replace components.
The Taptic Engine is an electromagnetic driver which produces the vibrations you feel when your iPhone rings, for feedback when clicking on or moving items and icons and when you pressed the home button on older iPhone 7 and 8 models – the ones which had fixed home buttons which didn’t “click” when pressed when the iPhone was off.
The dual camera assembly on the iPhone X, featuring a wide-angle, optically stabilised f/1.8 camera as seen on previous iPhone generations and a newer telephoto lens for close up and portrait shots.
FaceID was a new addition to the iPhone X, providing users with a means to securely unlock their iPhone’s without having to physically press a button or fingerprint sensor.
The logic board is the heart of every iPhone. This is the assembly which houses the processor and control boards which drive the entire iPhone, all of the peripheral devices, such as the speakers, cameras, buttons and battery plug into this board. It’s incredible how small this board is considering what it contains and how much it can do.
On the back of the display is a small white sticker, this is the water damage indicator which is visible through the SIM card tray. This indicator turns red permanently when it comes into contact with water, indicating possible water damage to the internal components. You can have a look at where it is in the SIM card tray and how it works in our previous article.
Lastly, here’s a close up of the inside portion of the lightning connector – the only port left on modern iPhones.
Hope you enjoyed the teardown! Have you ever opened your iPhone up to repair it? Let us know what repairs you’ve done in the comments section below.
Compost is one of the best supplements you can give to your garden to get it to thrive. The best part is that it can easily be made at home, so it’s essentially free. It’s also a natural, chemical-free way to get your garden beds and grass looking healthier.
Choosing Or Making A Composter
For small scale home composting, there are a number of options for you to choose from, or make your own:
A tumbler composter is definitely the best and most efficient way to produce good quality compost from your household waste in minimal time. They elevate it off of the ground, keeping it away from pests, and being able to frequently turn the compost means that the microbes are kept aerated and active. Some tumblers even have paddles or spikes built into them to assist with aerating the compost as it is turned.
Most home hardware stores and garden centres have a few different compost bin designs. They’re usually quite simple and great to get started. The one downside over a tumbler is that its difficult to turn, so it generally takes a lot longer than a tumbler to produce – up to 6 months.
This is probably going to be the least expensive way to get into composting, but it does require a bit more effort. Buy a large container or heavy-duty garbage can, one with a clip-on lid works best. Then get a larger diameter drill, around 10-15mm and drill holes in rows, roughly 20cm spaced apart all around the container/can, even along the bottom. Getting a round garbage can makes the occasional turning of the compost a bit easier as you can put it on its side and roll it around.
This variety of composter is typically kept indoors and grinds and dehydrates the food waste rather than “composting” it. It’s still great for the garden and is certainly a good way to produce compost-like nutrients for your garden.
Find The Right Place To Make Your Compost
You need a nice shaded place, preferably outdoors so that you don’t get any smells wafting into the house. Too much sun may dry your compost out and kill the microbes helping to make the compost.
A lot of people make the mistake of trying to keep their composter close to the kitchen or in their workshop or garage. You don’t want a pile of waste to be near any of your home’s windows or doors, much less your kitchen. The best spot for it is in the far end of your garden or in an alleyway on the side of your home. Rather keep a small bucket or bin to collect scraps in your kitchen and get into a habit of emptying it every couple of days.
To start your first batch, you’ll need either a bag of organic compost (like this) or compost starter (like this). This introduces the microscopic organisms into your composter to keep breaking down the scraps and waste you add in order to produce more. It is possible to start composting without these but it usually takes a lot longer. You also only need them for your first batch. In subsequent batches, you’ll leave a little in the composter from the last batch in order to kick start the process.
Add your compost or compost starter and then start adding your compost waste, making sure that you have an good ratio of brown and green waste. The best ratio is around 2/3 brown waste to 1/3 green waste, and you should never exceed a 1:1 ratio; meaning you should never have more green waste than brown waste. Brown waste is waste which has a high carbon content, such as paper, egg cartons, cardboard, straw, branches, sawdust, wood chips, coffee grounds, leaves etc.. Did you know that you can use your coffee grounds in the garden? Green waste is waste which has a high nitrogen content such as lawn clippings, fruit and vegetable scraps and other garden plant trimmings.
In order to speed up the composting process, always chop your waste up into smaller pieces. The larger the pieces going in, the longer it’s going to take to turn them into compost.
If you’re using a stationary composter or bin then you’ll need to layer or mix the waste together so that it’s evenly distributed around the vessel. If you’re using a tumbler composter then you’re job is a bit easier and you can mix it all afterwards.
It’s best to turn or aerate your compost every week or two. This is where a tumbler composter makes things a bit easier. If you’re using a bin, you’ll need to use a garden fork or shovel and gently turn it so that it doesn’t become too compact.
Your compost is done when it starts to look like soil and has an earthy smell to it.
Things You Should Never Put In Your Composter
There are a few products which should never go into a composter, they generate a large amount of bacteria and will likely cause foul odours and your compost to fail:
Any meat products including red meat, chicken or fish.
Dog or cat faeces.
Diseased or decaying plant material.
Weeds (as you may spread seeds throughout your garden through the compost)
Liquids.
Have you tried making your own compost? Let us know what method you used and how it went for you in the comments section below.
In this project, I’ll be showing you how to make your own DIY SD card storage multi-tool from clear or tinted acrylic. This is a great pocket or camera bag companion to keep all of your SD and micro SD cards organised and easily accessible. It’s fully customisable, you can add or remove trays as you need or add different coloured or tinted trays to distinguish between full and empty SD cards so that you always know which is which. It also doesn’t need to be limited to three trays like the one I’ve made, you could add 5 or 8 trays if you’d like, it’ll just be a bit bulkier. You could also just go with one micro SD card tray if you prefer something more compact.
Watch the video below for the build and to see the completed product or read on for the step by step instructions.
What You Need To Make Your Own SD Card Storage Multi-tool
I used a K40 laser cutter to cut the parts. If you don’t have a laser cutter, there are loads of online cutting services available to cut your parts for you and deliver them to your door.
The layers of the multitool are all laser cut from 2mm or 3mm acrylic sheets. I designed the cutouts in Inkscape to fit both micro SD cards and full-sized SD cards..
The first two cutouts are the top and bottom layers of the multitool, on the top layer I’ve included a logo to be engraved, you can replace this with your name, your business name or logo.
We’ve then got the tray bottoms. Each tray is made up of two layers which are glued together. The bottom layer is the base of the tray and is solid with no cutout sections and the top layer has the cutouts for the sd cards. The trays all have a corresponding fixed portion which is glued to the stationary housing and then a moving portion with a pullout tab.
I’ve used two tray designs, one for eight micro SD cards and one for two full-sized SD cards. All of the pieces are cut out of 2mm acrylic except for the tray tops, and corresponding stationary pieces, with full-sized SD card cutouts, these are cut from 3mm acrylic.
I’ve also included a design for one with four micro SD cards and one full-sized SD card. Remember to cut the ones with full-sized SD cards from 3mm acrylic.
I cut the pieces and engraved the logo using a K40 laser cutter.
If you don’t have a laser cutter, you could either make use of an online laser cutting service or you can trace them onto your acrylic and cut them out using a band or scroll saw. Acrylic is quite workable with hand tools, it’ll just be time-consuming.
Once your pieces are all cut, you’ll need to peel off the protective film.
I glued the acrylic layers together using this quick fix UV light glue because it’s clear when cured and doesn’t damage the acrylic. You can use any acrylic safe glue you’d like, preferably one which dries/cures clear so that you can still see through the layers.
I started by assembling the smaller pieces to the top and bottom layer to form the multitool body. It’s not critical that they’re in the correct layer order, but it does look neater when you’re done if you keep them in order as per the tray layers. You can use one of the screws as a guide to line up the pieces, just don’t get glue on it so that you can’t remove it.
To make the trays, you need to glue the upper cutout tray piece onto a bottom tray piece and then cure the glue. I didn’t use glue on all of the edges, just on the two ends and a bit around the middle section.
I’ve used M3 x 20mm button head screws and undersized the holes on the bottom layer slightly so that I didn’t need to use the nuts. You may need different length screws if you’ve used a different combination of trays. The nuts on the end of the screws are a more durable solution if you’re going to be keeping this in your camera bag, make sure you use a drop of lock tight on the nuts so they don’t work loose.
Once your trays are done, slide them into your multitool in the order you’d like them to be in and then push the second screw into the end to hold them together and act as a hinge. This screw is critical to the functioning of your multitool, you want it to be tight enough so that the trays are not loose and don’t fall out by themselves but not too tight that its difficult to open. Tighten it until you’re happy with the feel and then use a drop of lock tight on the nut or end of the screw to secure it.
Your SD card storage multitool is now complete.
Make sure that all of the glue is cured and then start adding your SD cards.
This also doesn’t have to be limited to SD cards. If you use different types of memory cards or you’d like a space for a flash driver or adaptor, it’s really easy to make an additional tray and expand upon your multitool’s functionality.
It also looks really cool in clear acrylic so that you can see all of the cards inside it.
Let me know in the comments section below what combination of trays you’re going to be using in your SD card storage multi-tool. Do you use more micro SD cards, SD cards or other memory cards?
Flowers are a fantastic gift that you may want to keep forever. Whether those blooms have marked a special occasion, they made you smile, or if you just really like them. We’d love to share our tips and tricks on keeping your flowers forever.
From setting your blooms up for the longest life span possible to drying and crafting with your floral arrangement, we have a lot of advice to give.
Set Your Blooms Up For Success
Start your flowers off on the right foot by keeping them bright and beautiful for as long as possible. If you’ve purchased your flowers from a wholesaler, bought them in bulk, or just brought them home from the market, you may need to prep them before they go into a vase.
If you’ve purchased your flowers from a florist, their designers have most likely prepped them before placing them in the vase or container.
Sourcing
Flowers are not just flowers. Just like food, brand name and source will hugely affect their quality. For example, a cut Rouge Baiser rose can last 10 to 14 days and are extra fragrant, whereas a regular rose, when cut, usually lasts about a week.
If you have access to a local grower, purchasing your flowers directly from them will ensure your flowers are at their freshest, giving you the longest time to enjoy your beautiful blooms. They are also experts and can lead you towards the longest-lasting varieties, what’s in season, and what will fit your project and vision.
The next best source is anyone with a direct relationship with a grower. Large, but local florists, like us at Bagoy’s Florist & Home, source our flowers directly from the growers and do offer bulk pricing. Connecting with a large, but local florist is one of the smartest ways to get fresh flowers without having to track down a grower. Smaller florists will often get their flowers from larger florists, or from a national brand like FTD or Teleflora so avoiding middlemen can be a bit tricky. If you want to find out if your local florist is sourcing from a reputable farmer, just ask them. If they know their growers, usually they like to brag about how fantastic each one is.
Picking your own wildflowers or taking trimmings from your garden makes you your own grower and is truly the best option. If you cut them early, as they bloom, your flowers will last the longest. If you cut them at full bloom, they may only last a few days.
Trimming
If you have purchased a bouquet, the florist will most likely trim your flowers for you. If they don’t, they probably aren’t a very good florist.
If you have purchased your flowers in bulk or cut them yourself, trimming can be simple.
Trim the stems of your flowers at a forty-five degree angle, and remove any foliage that may rest below the water, this includes leaves, thorns, or small branches.
Feed & Water
Your flowers need food and water. Changing your flower’s water often will keep their bright and beautiful blooms for the longest time. Place a little plant food in with the water each time.
If you have chosen a flower that already offers a flat shape, like daisies or many wildflowers, pressing them in a book is the easiest method of drying. If you have chosen a thick flower, like a rose or hydrangea, you can hang them out of the sun for a few days or pop them in the oven at a low temperature for a day.
It is important if you have chosen to dry your flowers, to let them completely dry. If there is moisture still in your blooms, they may fall apart. Misting your blooms with hairspray or Mod Podge will ensure that the elements (humidity) don’t re-moisturize your flowers.
Craft with dried flowers
Once you’ve enjoyed your flowers for weeks and dried them, you can continue to incorporate their beauty in your life. There are so many crafts to make with your dried flowers. You can place them back in a bouquet, create a wreath or a flower crown, make potpourri, preserve them in resin, make bath bombs, fragrant satchels or potpourri, press them into a candle, doll up your thriving plant terrarium, and so much more! Our favourite place to check out crafts and ideas is Pinterest.
Resin Art
Resin art is one of the best ways to use and preserve your flowers. The options are absolutely limitless. Whether you want to make a simple paperweight for your desk, jewellery, a coaster, or accessory, pressing your dried flowers into resin will be sure to preserve them forever.
It is of high importance to be sure your flowers are fully dry when doing resin art. A bloom that still contains moisture will break down inside of the resin.
Bath Bombs
Bath Bombs are shockingly easy to make. Corn Starch, baking soda, Epsom salt, oils for your skin, and citric acid are almost all you need. Whether you want to pack your’s with glitter or dried flowers, you can be sure that your relaxing tub time is perfect for you. This is an especially fun D.I.Y. for anyone who got flowers for a special occasion.
Bathing with your anniversary flowers will get you in the perfect mood for a date night!
Light It Up: Candles, Lanterns, & Don’t Smoke Them
Adding your dried flowers to a candle or lantern really brightens your day! It’s a fantastic beauty.
Some people smoke dried petals, especially rose petals. While this is a popular choice, it can be a deadly one. Smoking, in general, isn’t good for you, and smoking a flower that may have been treated with pesticides can be downright dangerous. We would not recommend smoking your dried flowers.
If you are looking to burn your dried flowers, simply press them into a candle.
Herbal Pillows & Potpourri
Placing your dried petals in a sachet will scent your drawers or closet. You can also place your dried petal in a bowl with other fantastically fragrant things, like cinnamon sticks, orange peels, a bit of sandalwood, or whatever you want your room to smell like.
If you want your flowers to last forever, buy good flowers, take care of them, and dry them. Crafting with dried flowers is an easy way to get the most out of your beautiful blooms.
So we all thought that summer this year has been cancelled and that the ‘’New Year, new me’’ mantra is not working out in the time of COVID-19. If you’re sitting on your couch, playing video games or gorging yourself with snacks that you’ve generously supplied yourself, then, in the end, you will have done more damage to yourself than you would have by catching this virus. So take the first step and set up a home gym to get yourself off the couch and start being more active.
You may not feel the effects of this behaviour right now, but possibly in a few years. A sedentary lifestyle is not natural for us, and scientists say that we are still months away from finding a vaccine. When it comes to your physical wellbeing, the only remedy is to start acting now. Your muscles, joints, and overall wellbeing will improve and you’ll improve your immunity to various diseases.
Home gym for homemade muscle mass
Quarantine might inspire you to create your own home gym. In future, you’ll save money on a gym membership and you’ll feel more inspired to workout – there are no other people around to make you feel awkward or people who just came to take a selfie. There is also a psychological aspect – if you decided to spend your money on creating the ultimate home gym experience, you will probably feel guilty about not exercising.
Use the space you already have
Most of us have a spare room or space we simply don’t use as well as we could. So make use of it! You could even set up a gym in your garden. That means that it may be time for a serious remodel of your basement, attic, your garage or your spare bedroom. Of course, you could also make a space in your living room or your bedroom for your cardio equipment.
Equipment for cardio training is not always bulky and can often fit it to a corner you like. You can even set it up right in front of the television while watching an episode of your favourite show – you’ll burn off some serious of calories while watching tv. This also applies to your bedroom – a quick and intensive cardio training workout when you wake up will make you feel more energized for the rest of the day.
If you don’t like clutter, our recommendation is to dedicate one room to create your own fitness zone.
You are probably thinking about how many items of training equipment you will need, but the truth is – you don’t need that much.
There are loads of fitness programs promising you quick results and there is a ton of fake and gimmicky exercise equipment which you’ve probably seen on TV. The truth is – everything revolves around cardio training, which increases your durability, burns calories and keeps your muscles healthy.
You don’t have to break the bank – for a basic home gym setup, you will need a bench press, a kettlebell, a barbell, and a set of adjustable dumbbells. A squat rack is also a great investment for your fitness if you’ve got the extra money and space – it will help you significantly with building up your leg strength.
For cardio, you can buy a treadmill, stationary bike, elliptical machine, or even just a jump rope. Choose which one suits your energy and fitness style best and you’ll have your home gym complete.
Remember that you don’t have to buy new equipment, secondhand equipment works the same magic.
Stay safe and sound
Safety first, ladies and gentlemen. Make sure that you inspect your gym equipment before use and make sure that it is working properly and safely. Another great addition to a home gym is a large mirror in the area where you are doing weight lifting exercises. These enable you to practice the correct form, your reflection will be the best judge of that. A mirror shouldn’t be too expensive either because you don’t need a fancy Venetian style baroque mirror – just a large mirror that will see you both in the best and the worst shape.
When it comes to sound and additional safety – it would be great to soundproof your home gym. Load noises from weights can be both distracting and annoying to yourself while training and the other members of your home trying to get on with their daily activities. So soundproof doors and walls to keep yourself and others more focused.
Also, if you drop your weight it could cause damage to the floors and your neighbours will soon be complaining about the noise. So make sure that you protect your home gym floor by adding appropriate flooring. Gym floors made of rubber or foam will help keep you and your neighbours safe and sound.
Fitness is a lifestyle!
Why stop with a home gym? If you’re starting out making new and healthy choices, the next logical step is to do a quick makeover in your kitchen. If you go on eating junk food and sweets – you’re not going to see any progress.
Start preparing your own meals, buy as much fresh food as you can and have fun finding new and interesting ways of preparing healthier food.
When is the better time to experiment than now? It will also have a positive impact on your family. When you are all quarantined together, they’ll be compelled to share your healthy lifestyle, no running away.
Have you ever wanted to test your reaction time or see which one of your friends has the fastest reaction time? In this project, I’ll be showing you how to build an Arduino based reaction timer. The timer lights up a red LED and then measures how long it takes you to respond to the light by pushing a button. The initial time it takes to turn the LED on is randomised to eliminate guessing and the timer disregards the input if you hold the button down before the LED comes on to stop cheating.
It’s powered by 2 AA batteries and is completely portable, making it a great coffee table or desktop toy to play around with when you’re bored or to challenge your friends and family with.
This project assumes you know the basics of Arduino programming, otherwise read our guide on getting started with Arduino.
Here’s a video of the assembly and the reaction timer being used. Read on for the full step by step instructions, code and 3D print files.
You’ll also need to 3D print some plastic components for the housing. If you don’t already have a 3D printer and you enjoy making things, I recommend you have a look at getting one. They’ve come down in price a lot and you can get one which produces good quality results for a few hundred dollars. If you’re not ready for one then make use of an online 3D printing service, there are loads of them available and they’ll print and deliver the components to your door. This is the printer and filament I used:
You can assemble the timer on a breadboard using jumpers just for fun or 3D print the enclosure to make it into a more permanent handheld game. I started out on a breadboard to test the circuits and code before assembling them.
Here’s the circuit diagram.
If you’re just assembling the components on a breadboard for fun then you won’t need the batteries, the power supplied through the USB connection to your Arduino Pro Micro is sufficient to power the components.
If you’re using a different Arduino board, make sure that the I2C interface to the display is connected to the correct pins. On the Pro Micro, these are pins 2 and 3, but on an Uno they are pins A4 and A5.
I also wanted to see if the reaction timer could be powered by batteries and how long they would last. I hooked up two AA batteries to supply 3V to the timer and measured the current being drawn.
The current fluctuates slightly based on how much text is displayed and it spikes to around 25 milliamps when the LED is on. AA batteries vary quite a lot but by my estimation you should get around 70 to 100 hours of on time from a fresh set of alkaline batteries.
To make the permanent handheld game, I soldered the components together using ribbon cable and some pin headers for the battery and display connections. You can solder these connections as well as they don’t need to be disconnected.
Programming The Arduino
Once you’ve got the circuit assembled, you can load the sketch onto your Arduino and test it.
Lets have a look at the sketch:
//The DIY Life
//Michael Klements
//19 April 2020
#include <SPI.h> //Include the libraries for the display
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 //OLED display width, in pixels
#define SCREEN_HEIGHT 32 //OLED display height, in pixels
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); //Create the display object
int pinButton = 14; //Define the pins for the Button & LED
int pinLED = 15;
int startTime = 0; //Define variables for the start and end time
int endTime = 0;
void setup()
{
pinMode (pinLED, OUTPUT); //Assign the LED & button pins
pinMode (pinButton, INPUT);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) //Start communication with display, address 0x3C for 128x32
{
for(;;); //Don't proceed, loop forever if display communication fails
}
}
void loop()
{
display.clearDisplay();
display.setTextSize(1); //Set the display text size
display.setTextColor(SSD1306_WHITE); //Draw white text
display.setCursor(25,0); //Start at top-left corner, 25 pixels in
display.println(F("Press To Play")); //Display text on screen
display.display(); //Update display
if (digitalRead(pinButton) == LOW) //If button to start game is pressed
{
display.setCursor(40,10); //Display "Ready" countdown with 3 sequential dots
display.print(F("Ready"));
display.display();
delay(1000);
display.print(F("."));
display.display();
delay(1000);
display.print(F("."));
display.display();
delay(1000);
display.print(F("."));
display.display();
int delayTime = random(2000,7000); //Wait a random amount of time between 2s and 7s so that users can't guess the start time
delay(delayTime); //Delay the random amount of time
digitalWrite(pinLED, HIGH); //Light up the LED
startTime = millis(); //Record the start time
while (digitalRead(pinButton) == HIGH) //Wait for the user to push the button
{
}
endTime = millis(); //Record the button push time
digitalWrite(pinLED, LOW); //Turn off the LED
int totalTime = endTime - startTime; //Calculate the total response time
display.clearDisplay(); //Display the results
if (totalTime <= 20) //Check for cheating by holding the button down
{
display.setCursor(20,0);
display.println(F("Don't Hold The"));
display.setCursor(20,10);
display.print(F("Button Down"));
}
else //Display the results
{
display.setCursor(30,0);
display.println(F("Your Time:"));
display.setCursor(45,10);
display.print(totalTime);
display.print(F("ms"));
}
display.display();
delay(5000); //Wait 5 seconds on results before restarting
}
delay(100);
}
We start by importing the libraries required for the OLED display, you’ll need to install the adafruit_SSD1306.h and adafruit_GFX.h libraries. These can also be installed directly from your library manager in the Arduino IDE.
We then define the display’s width and height in pixels and create the display object. Then define the pins for the push button and LED and create variables to record the start and end time to measure the reaction duration.
In the setup function we define the pin modes for the LED and button and then start the display. If there’s a problem with communicating with the display, the program won’t continue into the loop function.
In the loop function we clear the display, then set the font size and colour before displaying the text “Press to Play”.
If the button is pressed, we start the reaction timer routine. A countdown is started in the form of displaying “Ready” and three dots/periods in one second increments. After the last dot is displayed, we generate a random delay between 2 seconds and 7 seconds. This is to eliminate the possibility of the user learning the timing in the routine and trying to time their press to guess at when the LED is going to light up.
We wait this period of time, turn the LED on, record the start time and wait for the user to push the button. Once the button is pushed we record the end time, turn the LED off and then calculate the total reaction time.
I’ve included a section to disregard the input if the response time was less than 20 milliseconds. After doing a bit of research online, it seems like most people’s response time is about 200 milliseconds, with professional athletes and gamers able to reduce this to around 120 milliseconds. In fact the IAAF defines a false start as an athlete responding to the gun in under 100 milliseconds. So 20 is well under this threshold and is mainly in place to make sure that the button is initially released and not just held down the whole time.
If the reaction time was considered to be valid, then it is displayed on the screen for 5 seconds before the code returns to the initial screen.
Now upload the code and try it out.
Assemble The Components Into The Housing
I measured up the components and designed a small 3D printable housing for them.
The housing has cutouts for the display, LED and push button on the top and a slot for the power switch on the side. To replace the batteries, you’ll need to remove the front cover, but you shouldn’t have to do this very often.
Download the Reaction Timer 3D print files – 3D Print Files
I printed the components using black PLA at 210°C with a 15% infill. The wall thickness is set to 1.2mm and the print speed was 25mm/s.
The OLED display is held in place with clips along the top edge and using the plastic clamp and an M3 x 6mm screw on the bottom edge.
The LED just presses into place and the push button is held in place using the ring nut which is supplied with it.
Push the power switch through the side of the housing, it can be held in place with a drop of super glue if it is loose. Next, slide the battery holder into the bottom of the housing and then connect the power cable, making sure that you get the polarity correct.
It’s also a good idea to use heat shrink tubing around your exposed connections or cover them up with a bit of insulation tape. You don’t want any terminals or leads shorting out once you’ve placed the into the housing together.
Attach the front cover and secure it with 4 – M3 x 12mm cap screws. I’ve used 12mm screws so that I didn’t have to use threaded brass inserts in the housing. The 12mm length on the screws is enough to get a good grip on the housing without pulling through the plastic, just don’t over tighten them.
Using Your Arduino Based Reaction Timer
Once the screws are secure, slide the switch on the side to turn on your reaction timer and try it out. Press the button once to start the game and then wait for the red LED to light up.
Once the LED lights up, push the button again as quickly as possible. Your reaction time will then be calculated and displayed on the screen. Typical reaction times are between 200 and 250 milliseconds, you’re doing well if you can get under 200. Some professional athletes and gamers are able to get as low as 120 milliseconds.
Don’t just press and hold the button. The game detects this and will discard your results.
Have fun improving your reaction time by trying to beat your personal best and challenging your family and friends. Let me know what your best reaction time is in the comments section.
I built a countdown timer a couple of months ago using a two digit mechanical 7 segment display which was driven by 14 servos and an Arduino Mega. It came out quite well and a number of people suggested doubling up on the display to build a clock. The only problem was that the Arduino was already running short on PWM IO and I needed to double up on the outputs. Fortunately, someone pointed me in the direction of these PCA9685 16 channel PWM drivers, so I used them and a DS1302 real time clock module to build a mechanical 7 segment display clock which uses 28 servos and is now driven using an Arduino Uno.
Here’s a video of the build and the clock in operation, else read on for the full step by step instructions, code and 3D print downloads.
What You Need To Build Your Own Mechanical 7 Segment Display Clock
You’ll also need to 3D print some components. If you don’t have a 3D printer and you enjoy making things, you should definitely consider getting one. The one below is affordable and produces pretty high quality prints for the price. If you don’t want to get a 3D printer yet, there are a couple of online services which will print components for you and ship them to you.
I started off by designing an individual 7 segment display numeral which could be actuated using a micro servo for each segment. The micro servos move each segment vertically when on and 90 degrees to the side when off.
The segments are designed to glue straight onto the standard servo arm so that no additional hardware is required.
You’ll need to 3D print the 28 segments using a translucent green PLA with 15% infill. You’ll also need to print out the 28 base blocks to support the servos as well as the two dots for the centre and their bases. You could use any brightly coloured PLA for the segments, red would create a more traditional looking 7 segment display. Use black PLA for the spacer blocks and bases so that they’re not visible on the black background.
Solder The Wiring Harnesses
I used two PCA9685 16 channel PWM drivers which allow you to control up to 16 servos on each board and chain up to 62 boards together over an I2C interface, which uses only two IO pins on your Arduino. This means that you could theoretically independently control up to 992 servos with just two IO pins. We’re going to be using one for the two hour digits and one for the two minute digits.
To chain the two together, you need to first add a pin header to the other side of the first board and then change the address on the second board so that it’s uniquely identified.
This is done by bridging the small terminals on the top right of the board. They work like dip switches, allowing you to set a different address for each board. You only need to bridge one set of terminals on the far right for this project.
Once you’ve added the header strip and changed the address on the second board, you’ll need to make up the cable to chain the two together.
You’ll also need a wiring harness to connect these two boards to the Arduino along with the clock module.
Here’s the circuit diagram:
You’ll need to connect both the clock and the servo control boards to your Arduino’s GND and 5V pins to supply them with power. You’ll also need to connect the I2C interface on the servo control boards to your Arduino pins A4 and A5 (SDA and SCL respectively). Note that you’ll only connect one board to the Arduino, the second board is connected to the first board and will access the Arduino through this connection. Lastly, you’ll need to connect your real time clock module pins CLK, DAT & RST to pins 6, 7 & 8 respectively.
Power is supplied to the servos through the terminals on the servo driver boards. You’ll need to connect your 5V 5A BEC to your 12V power supply and then connect the leads to the terminals on one of the boards. You don’t need to connect both, if you’ve connected all of the pins between the two boards together then power will be supplied across your connection as well. You’ll also need to power your Arduino, this can be done from the same 12V power supply.
Assemble The Clock Display
Once the 3D printed segments are complete, you’ll need to spray the back and sides of the segments black to match the background so that they’re less visible when turned away. If you leave them green then you’re still going to land up with a thin visible line when the segment is turned 90 degrees. Also spray the back and sides of the dots so they’re less visible from the side.
Next glue the segments onto the servo arms using hot melt glue. It’s easiest to put the arms onto the servos and then glue the segment onto the servo and arm assembly, this also allows you to check that you glue it on straight.
You’ll also need to glue the small 3D printed spacer blocks to the bottom of each servo as well, these help the servo to stand upright when you glue them onto the back board.
I numbered each segment to keep track of them in the code. I started with the top segment in the units digit being 1 and worked around to the tens digit for all fourteen segments. They are connected to each driver board in this order as well, although the driver board numbering starts from zero. I duplicated this numbering for each of the hour and minute boards. If you’re struggling to keep track of each servo, write these numbers onto the leads as well.
Before gluing the digits onto the back board, I laid them out on a flat surface to test them. This allowed them to move without the fear of them moving in the wrong direction or too far and bumping into each other, which may damage the segments or strip the gears on the servos.
Once I was happy with the movement of the digits, I got to work on the board.
You’ll need a back board which is at least 600mm (24″) long by 240mm (10″) high. The light grey larger boxes are the areas in which the segments move when they move out of the way, these need to be at least 210mm (8 1/4″) by 135mm (5 1/3″) so that adjacent segments don’t touch when they both move outwards to their off positions. The inner darker rectangles are the centre lines for the 6 servos which make up the outside of each digit. Lastly, leave 30mm between the inner digits for the dots.
Measure and cut the back board from a piece of 3mm MDF and spray it black as well.
Mark the segment positions on the back board as per the diagram and then start gluing them in place. The dots are supported on their bases using short sections of 4mm dowel or kebab sticks. Measure and cut the sticks such that the dots are at the same level as the segments once they are glued onto the back board.
Once the digits are done, you’ll need to hide the wiring. Drill holes through to the back of the board near each servo to feed the servo wires through, this is when it helps to have numbered the leads beforehand. Put a small drop of glue onto each to keep them in place.
Stick the four electronics boards onto the back of the clock using double sided tape. You could also mount them with screws, just make sure that the screws don’t go all the way through the MDF to the other side.
I removed the arms from the servos before loading the final version of the software so that I could make small adjustments to the upright positions without worrying about them hitting each other. It’s a good idea to remove the arms from your servos and keep them off until you’ve powered your board up at least once and got the servos all in their On positions, 88:88 displayed. This way you can put them back into place without worrying about them moving and bumping into each other.
Uploading The Sketch
Now that you’re done building your clock, lets have a look at the code:
//Michael Klements
//The DIY Life
//8 February 2020
#include <virtuabotixRTC.h> //Include library for clock module
#include <Adafruit_PWMServoDriver.h> //Include library for servo driver
Adafruit_PWMServoDriver pwmH = Adafruit_PWMServoDriver(0x40); //Create an object of Hour driver
Adafruit_PWMServoDriver pwmM = Adafruit_PWMServoDriver(0x41); //Create an object of Minute driver (A0 Address Jumper)
int servoFrequency = 50; //Set servo operating frequency
int segmentHOn[14] = {385,375,385,375,382,375,354,367,375,385,375,368,371,375}; //On positions for each Hour servo
int segmentMOn[14] = {382,395,378,315,375,340,345,380,385,365,290,365,315,365}; //On positions for each Minute servo
int segmentHOff[14] = {200,200,550,480,200,520,200,200,200,480,550,200,515,200}; //Off positions for each Hour servo
int segmentMOff[14] = {200,200,550,440,200,480,200,200,200,550,450,200,430,200}; //Off positions for each Minute servo
int digits[10][7] = {{1,1,1,1,1,1,0},{0,1,1,0,0,0,0},{1,1,0,1,1,0,1},{1,1,1,1,0,0,1},{0,1,1,0,0,1,1},
{1,0,1,1,0,1,1},{1,0,1,1,1,1,1},{1,1,1,0,0,0,0},{1,1,1,1,1,1,1},{1,1,1,1,0,1,1}}; //Position values for each digit
virtuabotixRTC myRTC(6, 7, 8); //Create a clock object attached to pins 6, 7, 8 - CLK, DAT, RST
int hourTens = 0; //Create variables to store each 7 segment display numeral
int hourUnits = 0;
int minuteTens = 0;
int minuteUnits = 0;
int prevHourTens = 8; //Create variables to store the previous numeral displayed on each
int prevHourUnits = 8; //This is required to move the segments adjacent to the middle ones out of the way when they move
int prevMinuteTens = 8;
int prevMinuteUnits = 8;
int midOffset = 100; //Amount by which adjacent segments to the middle move away when required
void setup()
{
pwmH.begin(); //Start each board
pwmM.begin();
pwmH.setOscillatorFrequency(27000000); //Set the PWM oscillator frequency, used for fine calibration
pwmM.setOscillatorFrequency(27000000);
pwmH.setPWMFreq(servoFrequency); //Set the servo operating frequency
pwmM.setPWMFreq(servoFrequency);
//myRTC.setDS1302Time(00, 10, 16, 5, 8, 4, 2020); //Only required once to reset the clock time
for(int i=0 ; i<=13 ; i++) //Set all of the servos to on or up (88:88 displayed)
{
pwmH.setPWM(i, 0, segmentHOn[i]);
delay(10);
pwmM.setPWM(i, 0, segmentMOn[i]);
delay(10);
}
delay(2000);
}
void loop()
{
myRTC.updateTime(); //Update the time
int temp = myRTC.hours; //Get the hours and save to variable temp
hourTens = temp / 10; //Split hours into two digits, tens and units
hourUnits = temp % 10;
temp = myRTC.minutes; //Get the minutes and save to variable temp
minuteTens = temp / 10; //Split minutes into two digits, tens and units
minuteUnits = temp % 10;
if(minuteUnits != prevMinuteUnits) //If minute units has changed, update display
updateDisplay();
prevHourTens = hourTens; //Update previous displayed numerals
prevHourUnits = hourUnits;
prevMinuteTens = minuteTens;
prevMinuteUnits = minuteUnits;
delay(500);
}
void updateDisplay () //Function to update the displayed time
{
updateMid(); //Move the segments out of the way of the middle segment and then move the middle segments
for (int i=0 ; i<=5 ; i++) //Move the remaining segments
{
if(digits[hourTens][i]==1) //Update the hour tens
pwmH.setPWM(i+7, 0, segmentHOn[i+7]);
else
pwmH.setPWM(i+7, 0, segmentHOff[i+7]);
delay(10);
if(digits[hourUnits][i]==1) //Update the hour units
pwmH.setPWM(i, 0, segmentHOn[i]);
else
pwmH.setPWM(i, 0, segmentHOff[i]);
delay(10);
if(digits[minuteTens][i]==1) //Update the minute tens
pwmM.setPWM(i+7, 0, segmentMOn[i+7]);
else
pwmM.setPWM(i+7, 0, segmentMOff[i+7]);
delay(10);
if(digits[minuteUnits][i]==1) //Update the minute units
pwmM.setPWM(i, 0, segmentMOn[i]);
else
pwmM.setPWM(i, 0, segmentMOff[i]);
delay(10);
}
}
void updateMid() //Function to move the middle segements and adjacent ones out of the way
{
if(digits[minuteUnits][6]!=digits[prevMinuteUnits][6]) //Move adjacent segments for Minute units
{
if(digits[prevMinuteUnits][1]==1)
pwmM.setPWM(1, 0, segmentMOn[1]-midOffset);
if(digits[prevMinuteUnits][6]==1)
pwmM.setPWM(5, 0, segmentMOn[5]+midOffset);
}
delay(100); //Delay allows adjacent segments to move before moving middle
if(digits[minuteUnits][6]==1) //Move Minute units middle segment if required
pwmM.setPWM(6, 0, segmentMOn[6]);
else
pwmM.setPWM(6, 0, segmentMOff[6]);
if(digits[minuteTens][6]!=digits[prevMinuteTens][6]) //Move adjacent segments for Minute tens
{
if(digits[prevMinuteTens][1]==1)
pwmM.setPWM(8, 0, segmentMOn[8]-midOffset);
if(digits[prevMinuteTens][6]==1)
pwmM.setPWM(12, 0, segmentMOn[12]+midOffset);
}
delay(100); //Delay allows adjacent segments to move before moving middle
if(digits[minuteTens][6]==1) //Move Minute tens middle segment if required
pwmM.setPWM(13, 0, segmentMOn[13]);
else
pwmM.setPWM(13, 0, segmentMOff[13]);
if(digits[hourUnits][6]!=digits[prevHourUnits][6]) //Move adjacent segments for Hour units
{
if(digits[prevHourUnits][1]==1)
pwmH.setPWM(1, 0, segmentHOn[1]-midOffset);
if(digits[prevHourUnits][6]==1)
pwmH.setPWM(5, 0, segmentHOn[5]+midOffset);
}
delay(100); //Delay allows adjacent segments to move before moving middle
if(digits[hourUnits][6]==1) //Move Hour units middle segment if required
pwmH.setPWM(6, 0, segmentHOn[6]);
else
pwmH.setPWM(6, 0, segmentHOff[6]);
if(digits[hourTens][6]!=digits[prevHourTens][6]) //Move adjacent segments for Hour tens
{
if(digits[prevHourTens][1]==1)
pwmH.setPWM(8, 0, segmentHOn[8]-midOffset);
if(digits[prevHourTens][6]==1)
pwmH.setPWM(12, 0, segmentHOn[12]+midOffset);
}
delay(100); //Delay allows adjacent segments to move before moving middle
if(digits[hourTens][6]==1) //Move Hour tens middle segment if required
pwmH.setPWM(13, 0, segmentHOn[13]);
else
pwmH.setPWM(13, 0, segmentHOff[13]);
}
I have created a GitHub repository for this code to allow others to share their changes and improvements.
We start by importing two libraries, <virtuabotixRTC.h> for the clock module and <Adafruit_PWMServoDriver.h> for the servo drivers. The Adafruit library can be downloaded and installed directly through the library manager in the IDE.
We then create an object for each of the servo drivers, one for the two hour digits and one for the two minute digits. Note that we’ve changed the address in the second to match the jumper we’ve soldered onto the board.
We then have four arrays to store the on and off positions for each servo, this allows you to fine tune the travel limits so that the digits are all straight and don’t over or under travel when they move to the off position. You’ll need to adjust these values for each of your servos before using your clock. Adjust the on positions so that the segments are completely upright and as horizontal as possible and then adjust the off positions so that the segments are turned at least 90 degrees but are not over travelling.
We then have an array to store the segment positions for each digit from 0 to 9. There are ten digits and seven segments for each digit, where a 1 represents ON or upright and a 0 represents OFF or turned 90 degrees.
We then assign the clock pins and create variables for each digit, hour tens and units and minute tens and units. We’ll need the time split into these individual digits so that we know what each 7 segment display should be showing.
We also need to know what the previously displayed digit was so that we know whether the middle segment is going to be moving, and if so, we may need to move the two adjacent segments out of the way a little so that it can pass by without hitting them.
The variable midOffset defines by how much these adjacent segments should move out of the way.
We then start with the setup function. Here we start each of the PWM servo boards, set their oscillator frequency and our servo frequency.
We then have a line to update the clock time, which is only needed once to set the time on your clock and can then be removed or commented out. You’ll need to set the time to an upcoming time and then time your upload so that the time update is run at the same time as that time is reached in reality so that your clock module is correctly set. This sounds more complicated than it actually is.
Finally, we run through a loop which sets each servo to it’s on position so that 8 8 : 8 8 is displayed on the clock. This ensures that we have a known starting position for each servo and where possible, you should try and start your clock with the segments as close to these positions as possible in order to avoid having them bump into each other, particularly with the middle segments.
We then move on to the main loop where we get the updated time from the real time clock module, then split the hour and minutes into their tens and units. We then check to see if the time has changed since the last cycle and only if the time has changed, do we need to update the display.
Once the display is updated, then we update the previously displayed variables to record the changes.
Now let’s have a look at the update display function. We start by updating the middle segments. We do this so that we are able to move the adjacent segments out of the way if the middle segments need to move. We then move all of the middle segments and then finally move the remaining segments so that they’re moved back into place if the previous step moved them out of the way for the middle segment. In summary, we move the adjacent segments out of the way, then move the middle segment and then update the other 6 segments, this is done for all four digits.
There is an if statement for each digit which essentially looks up the required segment positions from the array and then moves them on or off accordingly. The delays just aid with stability in the code.
The update mid function is probably the most complex portion of the code, although there is a lot of repetition for each of the four digits. This function looks at whether the middle segment of the digit needs to move. If it does, it then looks at whether either of the adjacent digits are going to be in the way of this movement and if they are, it then moves them out of the way before moving the middle segment. The delays here are to allow the adjacent segments to move out of the way before moving the middle segment.
Thats the code, now upload it to your Arduino and see what it looks like.
Using Your Mechanical 7 Segment Display Clock
The segments jitter slightly when they are initialised and then move to display the current time. As mentioned previously, you should always try to power your clock on with the segments in the 8 8 : 8 8 positions so that they don’t bump into each other when initialising. This is usually only an issue when the digits 1 or 7 have been displayed and power is lost as the middle segment then needs to move back into place and the code doesn’t know that the adjacent sections are in the way.
It takes a bit of patience in the beginning to get each segment’s travel limits set up correctly so that the segment is upright when on and moved far enough when off so that the top is no longer visible. Most of my segments required adjustment and there were quite a few cases of servo arms popping off and servo’s over travelling during this setup process. It can be quite frustrating to get right, but once you’re done, you’re left with a great looking clock with a unique twist on a 7 segment display. Time spent setting your clock up will result in a much better looking end product.
I’ve left mine plugged in with the 12V power adaptor. The real time clock has a battery backup, so if the power goes down then the clock should automatically reset itself and resume displaying the correct time when the power returns.
I hope you enjoy building your own mechanical 7 segment display clock. Let me know how it goes for you, or any tips and suggestions in the comments section below.
Community Builds
Tony Johnson from Ontario, Canada has made some neat additions to the clock by designing a 3D printed sub-base in Sketchup to easily position the servos for each digit as well as the center dots.
He also printed holders for the electronics. Tony initially used an LM2596 voltage converter to power each of the PWM driver boards but said that they failed after only a few hours of operation. They may have been damaged during setup when the servos are more likely to overtravel and stall, but it’s worth keeping in mind if you’re looking at alternatives to power your clock. He has since replaced these boards with a 5V, 10A transformer which has been working well.
He also added some covers to blackout the servos and hide them a bit better.
You use your iPhone for multiple hours every day, so it’s bound to give you some trouble every now and again. So we’ve put together a list of some of the most common iPhone problems along with some easy fixes and some guidance to fix more stubborn problems.
My Storage Is Full
Almost all iPhone owners, especially those who owned a 16Gb model, have experienced an iPhone storage full notification. Fortunately, there are a couple of ways to fix this.
The first step is to figure out what is using the most storage, most likely your photos and videos. Go to Settings -> General -> Storage -> Manage Storage to get a list of applications from most to least storage usage.
If it’s your photos and videos, try an alternate cloud storage platform such as Google Photos to upload your photos and remove them from your phone. You’ll also benefit from having your photos backed up in case you every lose your iPhone or encounter more severe iPhone problems.
Another problem might be that your iCloud storage is full. This is usually filled up with either your photos or with device backups. You can have a look at your iCloud storage space by going to Settings -> iCloud -> Storage -> Manage Storage. If your photos are filling it up, try using a service mentioned before, otherwise try deleting old or outdated backups. You can also backup your iPhone through your computer and store the backup locally instead of through iCloud.
My WiFi Isn’t Working
Unreliable WiFi can be frustrating, but follow these three easy steps to get it running again:
First check that you’ve got sufficient signal, at least two or three bars. Even at two bars, the WiFi can be significantly slower than at full signal. Also make sure that your WiFi network is still running, test it on other devices and restart the router if possible.
If that doesn’t work, go to Settings -> WiFi, tap on the WiFi network you’re connected to and tap on Forget This Network. Return to WiFi and re-select the network, you’ll need to re-enter the WiFi password.
As a last resort, go to Settings -> General -> Reset -> Reset Network Settings, then try reselect the network and enter the password. Only do this as a last resort as this will erase all of the saved network information and passwords.
My Battery Is Running Low
This is probably on of the most common iPhone problems and there are a couple of things you can do to improve and extend your iPhone’s battery life if you find yourself away from a charger for a bit too long. Start off by turning on Low Power Mode, this is done through your Control Centre or by going to Settings -> General -> Battery and enabling Low Power Mode.
Once you’ve done that, there are a couple of other ways you can further reduce your iPhone’s battery consumption if you’re getting desperate.
Go to the Control Centre and turn your display brightness down as far as possible.
Go to Settings -> Cellular and turn off WiFi assist.
Go to Settings -> Accessibility and turn Grayscale on.
Keep your iPhone steady and face down or in your pocket so that notifications don’t light up the display.
You can also head over to Settings -> Battery and see which applications are using the most battery life. Try disabling or closing these applications to further save your battery.
If your iPhone battery is dying more often than it should or doesn’t last very long, you may want to get it replaced, you can even replace your iPhone battery yourself.
My iPhone Won’t Charge
This problem could either be the cable or the lightning port on your iPhone. To rule out the cable, try it on another iPhone or try a different cable on your iPhone. If it’s not the cable then there may be a fault with the port. First have a look into the port and make sure there isn’t any debris/lint/fluff stuck in it, this can gently be removed with a toothpick. If not then you may need to replace you iPhone’s lightning port.
My Home Button Isn’t Working
The easy fix is to turn on a virtual home button on the display called Assistive Touch. Open Settings -> Accessibility -> Assistive Touch to turn it on. The greyed out square on the screen is your new home button, and it can be moved around on your screen as well.
iPhones don’t often freeze, but when they do, its usually a pretty easy one to fix, depending on your model.
On Old iPhones – hold down the home button and the power/wake button for 10 seconds until you see the Apple logo appear.
On Modern iPhones (iPhone X and later) – press and release volume up, then volume down and then press and hold the power/wake button for up to 10 seconds until the Apple logo appears.
Your iPhone should reboot and be back to normal again.
My Screen Is Cracked
There aren’t really any quick fixes for this problem, but the good news is that if you’re even slightly handy or technically inclined, you’ll probably be able to replace your iPhone screen yourself and you can typically do it for less than $50.
I Dropped My Phone In Water
Apple has been trying to get rid of these common iPhone problems by making their more recent iPhone’s water resistant. This mean that most of their newer models can survive a quick dip in a bath, pool or toilet without much more effort than cleaning and drying them off.
If you have an older iPhone, your iPhone’s best chance of survival is if it was off when it fell in. If it was on, try to turn if off as quickly as possible if the display is on, if the display is not on then don’t risk turning the display on and rather proceed to trying to dry it. Towel dry your iPhone first and try get any leftover water out of the charger port, speakers, microphone and audio jack with some paper towel or a dry cloth. Don’t apply too much pressure as you don’t want to force the water further into the iPhone.
Next leave the iPhone in a sealed box with silica gel packets or a product like DampRid to draw out and absorb the moisture. You’ll need to leave it for a couple of days before attempting to turn it on again.
If your iPhone no longer turns on, it is likely water damaged and unfortunately Apple won’t cover this under warranty. You can open your iPhone up to have a look at the water damage indicators to be sure, but don’t do this if your iPhone is still under warranty as this will void it even if water damage was not the case.
I Forgot My Passcode
Unfortunately this is also one of those iPhone problems which doesn’t have an easy solution. The good news is that you can reset the passcode through iCloud or iTunes and make the device usable again, the bad news is that the reset also involves erasing all content and settings as well, so you’ll lose your data.
I’ve Misplaced My iPhone
If you’ve misplaced your iPhone and you’ve got Find My iPhone enabled (which is usually on by default) then you can log into iCloud.com, go to Find My iPhone and click on the missing device to see where it was last located on a map. If your iPhone still has a network connection, you can also get the phone to play a sound, display a message or lock it with a passcode. The sound option is particularly useful if you’ve misplaced it around your office or home, it also overrides the mute function on the iPhone so it will ring even if it is in silent mode.
If you suspect that your iPhone has been stolen, do not attempt to recover it yourself. Report it stolen to the Police and provide the tracking information. Also report it to your carrier to suspend the service and blacklist the device.
Have you experienced any other iPhone problems? Let us know in the comments section below.