Posts | Comments

Planet Arduino

Archive for the ‘timer’ Category

Any exercise is a positive thing, but if you’re looking to improve over time, you’ve got to measure your performance. [Nikodem Bartnik] is a runner and is looking to improve his sprinting abilities. Naturally, an Arduino is the perfect companion to help in this quest (YouTube link, embedded below).

The Arduino is built into a 3D printed enclosure, with several buttons for input. Rather unconventionally, a small e-paper display was chosen for the interface. This has the benefits of being easily readable outdoors during the day, as well as using very little power.

The device is simple to use, and makes training alone a breeze. The distance to be run can be selected, and the unit emits a series of beeps to indicate to the runner when to begin. The timer is placed at the finish line, and detects the runner passing by with an ultrasonic sensor.

It’s a useful build for sprint timing, and could be made even more versatile with a remote start function. If you need to time Hot Wheels instead of sprinters, don’t worry – there’s a build for you too. Video after the break.

We can race against the clock when assembling jigsaw puzzles online but what about competing against each other in the real world? [HomeMadeGarbage] came up with the simplest of solutions with his jigsaw puzzle timer that stops only when the puzzle’s completely assembled.

Copper strip on back of puzzle
Copper strip on back of puzzle

His simple solution was to attach copper foil tape to the back of the pieces, with overlap. He did this in a serpentine pattern to ensure that all pieces had a strip of the tape. The puzzle he used comes with a special container to assemble it in. At two corners of that container, he put two more pieces of copper foil, to which he soldered wires. Those two act as a switch. Only when the puzzle is completed will those two pieces be connected through the serpentine strip on the back of the puzzle.

Next, he needed a timer. The two wires from the puzzle container go to an Arduino UNO which uses an ILI9325 touch panel TFT display for both the start, stop, and reset buttons, and to show the time elapsed. Press the touch screen when it says START and begin assembling the puzzle. When the last piece is inserted, the serpentine strip of copper tape completes the circuit and only then does the Arduino program stop the timer. As you can see from the video below, the result makes doing the puzzle lots of fun.

Naturally, it takes some work to apply the copper tape and you wouldn’t likely do this for puzzles with a thousand pieces but most online puzzles don’t have many pieces either. It’s the fun of the race that matters, and with people taking turns, you want it to be quick anyway.

If you have a printed photo that you want to turn into a puzzle with suitably sized pieces, then you can use this online program that produces an SVG file to tell your laser cutter how to cut out the puzzle. Or maybe you’d prefer to make a robot to make the puzzle for you? In that case, you can start with [thomasgruwez]’s pick and place jigsaw puzzle aid.

Instagram Photo


Filed under: Arduino Hacks

I am a crappy software coder when it comes down to it. I didn’t pay attention when everything went object oriented and my roots were always assembly language and Real Time Operating Systems (RTOS) anyways.

So it only natural that I would reach for a true In-Circuit-Emulator (ICE) to finish of my little OBDII bus to speed pulse generator widget. ICE is a hardware device used to debug embedded systems. It communicates with the microcontroller on your board, allowing you to view what is going on by pausing execution and inspecting or changing values in the hardware registers. If you want to be great at embedded development you need to be great at using in-circuit emulation.

Not only do I get to watch my mistakes in near real time, I get to make a video about it also.

Getting Data Out of a Vehicle

I’ve been working on a small board which will plug into my car and give direct access to speed reported on the Controller Area Network (CAN bus).

To back up a bit, my last video post was about my inane desire to make a small assembly that could plug into the OBDII port on my truck and create a series of pulses representing the speed of the vehicle for my GPS to function much more accurately. While there was a wire buried deep in the multiple bundles of wires connected to the vehicle’s Engine Control Module, I have decided for numerous reasons to create my own signal source.

At the heart of my project is the need to convert the OBDII port and the underlying CAN protocol to a simple variable representing the speed, and to then covert that value to a pulse stream where the frequency varied based on speed. The OBDII/CAN Protocol is handled by the STN1110 chip and converted to ASCII, and I am using an ATmega328 like found on a multitude of Arduino’ish boards for the ASCII to pulse conversion. I’m using hardware interrupts to control the signal output for rock-solid, jitter-free timing.

Walk through the process of using an In-Circuit Emulator in the video below, and join me after the break for a few more details on the process.

The Hardware

I revised the board since the last video and removed the support for the various protocols other than CAN, which is the non-obsolete protocol of the bunch. By removing a bunch of parts I was able to change the package style to through-hole which is easier for many home hobbyists, so you can leave the solder-paste in the ‘fridge.

The “Other Connector” on your Arduino

Unlike the Arduino which is ready to talk to your USB port when you take it out of the box, the ATmega chips arrive without any knowledge of how to go and download code, in other words it doesn’t have a boot loader. Consequently I have the In-Circuit-Serial-Programming (ICSP) pins routed to a pin header on my board so that I can program the part directly.

On this connector you’ll find the Reset line, which means with this header I can use a true ICE utilizing the debugWIRE protocol. Since the vast majority of designs that use an AVR chip do not repurpose the reset pin for GPIO, it is a perfect pin to use for ICE. All of the communications during the debug process will take place on the reset pin.

Enter the ICE

When designing a computer from scratch there is always the stage where nothing yet works. Simply put, a microprocessor circuit cannot work until almost every part of the design works; RAM, ROM, and the underlying buses all need to (mostly) work before simple things can be done. As a hardware engineer by trade I would always reach for an ICE to kick off the implementation; only after the Beta release would the ICE start to gather dust in the corner.

In the case of the ATmega, the debugging capabilities are built into the microcontroller itself. This is a much more straightforward implementation than the early days when we had to have a second isolated processor running off-board with its own local RAM/ROM.

One note mentioned in the video is that a standard Arduino’ish board needs to have the filter capacitors removed from the RESET line to allow the high speed data on the line for its debugWIRE usage.

The ICE I am using here is the one made by Atmel, and is compatible with Atmel Studio, there are also other models available such as the AVR Dragon.

ICEyness

The ICE allows us to download and single step our code while being able to observe and overwrite RAM and I/O Registers from the keyboard. We are able to watch the program step by step or look underneath at the actual assembly code generated by the compiler. We can watch variables and locations directly in RAM or watch the C language counterparts. It’s also possible to jump over a sub-routine call in the instance of just wanting to see the result without all of the processing.

It’s worth your time to see even a glimpse of the capabilities of an ICE in action. I recommend that you watch the video where the debugging begin.

Final Words

This video was really about finishing the OBDII circuit so I didn’t really have the time to go over everything an ICE can do, maybe I will do a post dedicated to just the ICE and development environment next time.


Filed under: Arduino Hacks, Hackaday Columns, Microcontrollers, Skills
Gen
20

[Apachexmd] wanted to do something fun for his three-year-old son’s birthday party. Knowing how cool race cars are, he opted to build his own Hot Wheels drag race timer. He didn’t take the easy way out either. He put both his electronics and 3D printing skills to the test with this project.

The system has two main components. First, there’s the starting gate. The cars all have to leave the gate at the same time for a fair race, so [Apachexmd] needed a way to make this electronically controlled. His solution was to use a servo connected to a hinge. The hinge has four machine screws, one for each car. When the servo is rotated in one direction, the hinge pushes the screws out through holes in the track. This keeps the cars from moving on the downward slope. When the start button is pressed, the screws are pulled back and the cars are free to let gravity take over.

The second component is the finish line. Underneath the track are four laser diodes. These shine upwards through holes drilled into the track. Four phototransistors are mounted up above. These act as sensors to detect when the laser beam is broken by a car. It works similarly to a laser trip wire alarm system. The sensors are aimed downwards and covered in black tape to block out extra light noise.

Also above the track are eight 7-segment displays; two for each car. The system is able to keep track of the order in which the cars cross the finish line. When the race ends, it displays which place each car came in above the corresponding track. The system also keeps track of the winning car’s time in seconds and displays this on the display as well.

The system runs on an Arduino and is built almost exclusively out of custom designed 3D printed components. Since all of the components are designed to fit perfectly, the end result is a very slick race timer. Maybe next [Apachexmd] can add in a radar gun to clock top speed. Check out the video below to see it in action.


Filed under: Arduino Hacks, toy hacks
Nov
15

Dottie the Flip Dot Clock

arduino, clock, timer Commenti disabilitati su Dottie the Flip Dot Clock 

IMG_5610

by Jeremy Cook @ makezine.com:

Most of us have probably seen clocks or numerical displays that flip sequential boards to display the next number in a sequence. If you wanted to take that a step further, you could make a replica of “Dottie,” which flips small dots as pixels. As the great video below says, it makes a “pleasant mechanical flipping sound all day.” It also tells the date, chimes every 15 minutes, and gives an animation show once an hour.

Dottie the Flip Dot Clock - [Link]

Set
08

Meter clock: keeping “current” time

analog, arduino, clock, PWM, timer Commenti disabilitati su Meter clock: keeping “current” time 

NewImage39

Meter clock: keeping “current” time. Read more about the clock:

I’ve seen a few meter clocks in my travels of the web, and I love the idea. A few days ago, I decided that I must have one of my own. Such began the “How to do it” pondering cycle. I had seen builds where the face plate of the meter is replaced. This works, but I wanted to try and find a way to do it without modifying the meter, if possible. After some more ponderation, I came up with what I think is a serviceable idea.

I came across this style of milliamp meter on Amazon. They’re not quite 0-60 mA, but the 0-100 mA (a 0-20mA meter for the hours) is close enough. And they were cheap. So yay.

Part of my requirements were that the clock run off of an Arduino Pro Mini I had lying around, and with minimal additional parts. In order to drive the meters with some degree of precision, I would use the PWM pins to vary the effective voltage across a resistor in series with the meter. This would, by the grace of Ohm’s Law, induce a current that, based on the PWM duty cycle, would be scaled in such a way as to move the needle on the meter to the corresponding hour, minute, or second.

One minor issue came up in the form of the max current the GPIO pins on the ATMega328 chip can source/sink. The pins can source/sink a maximum of 40mA, a bit far from the 60mA needed for the minutes and seconds meters. Enter the transistor.

Using a simple NPN transistor switch circuit, I was able to provide the current for the minute and second meters from the 5V supply. The PWM signals switch the respective transistors on and off, effectively varying the voltage across the resistors in series with the meters.

The resistor between 5V and the meter is actually 2 1/4 watt 100 Ohm resistors in parallel for an effective resistance of 50 Ohms. The two in parallel was necessary as 5V x 0.06A = 0.3W (more than 0.25 that a single 1/4W resistor can handle safely).

[via]

Meter clock: keeping “current” time - [Link]

Giu
04

LCD clock version 2

arduino, clock, FTDI, isp, LCD, timer Commenti disabilitati su LCD clock version 2 

lcdclockv2final_0002-600x399

Here’s an update on Kevin Rye’s LCD clock . Source files are available here, for direct download LCD-Clock-V2-Source.zip:

Once all the components and headers were soldered in, I attached my Arduino and configured it as an ISP. I then burned the bootloader for an Arduino Uno.
I then connected my FTDI programmer and uploaded the blink sketch.Success!

Wow, that LED is super bright! It’s actually blinding and kind of hard to look at. With that, I swapped out the resistor for a 1K one in order to bring the brightness down.
Knowing that the Atmega worked, it was time to solder in the rest of the components, except for the display. Again, I don’t want to come this far and then waste a $15 LCD.

[via]

LCD clock version 2 - [Link]

Hello readers!

Today we are going to examine the 4541 CMOS programmable timer IC. The main function of this chip is to act as a monostable timer. You are probably thinking one of two things – “what is a monostable timer?” or “why didn’t he use a 555 timer instead?”. A monostable timer is a timer that once activated sets an output high for a specified period of time, then stops waiting to be told to start again.  If you are not up to speed on the 555, have a look at my extensive review.

Although the 555 is cheap, easy to use and makes a popular timer, I have found that trying to get an exact time interval out of it somewhat difficult due to capacitor tolerance, so after some poking around found this IC and thought “Hmm – what have we here?”. So as always, let’s say hello:

As you can see this is a 14-pin package by Texas Instruments. It is also available in various surface-mount options. It is also currently available from FairchildNXP, ON Semi, and ST Micro. Note that this is a CMOS semiconductor, and that you should practice good anti-static precautions when handling it. Futhermore, when designing it into your circuit, don’t leave any pins floating – that is not connected to +5V or ground; unless specified by the data sheet. Here is the data sheet from ON Semiconductor.

This IC is interesting in that it contains a timer that can count to one of four values: 2^8, 2^10, 2^13, and 2^16. That is: 256, 1024, 8192 and 65536. With wiring you select which value to count to, and also the action to take whilst counting and once finished. This is quite easy, by connecting various pins to either GND or +5V. The following table from the data sheet details this:

And here are the pinouts:

The speed of the counting (the frequency) is determined by a simple RC circuit. For more information on RC circuits, please visit this post. You can calculate the frequency using the following formula:

There are two external resistors used in the circuit – Rtc and Rs. Rs needs to be as close as possible to twice the value of Rtc. Try and use 1% tolerance metal-film resistors for accuracy, and a small value capacitor. Also remember to take note of the restrictions printed next to the formula above.

Before examining a demonstration circuit, I would like to show you how to calculate your timing duration. As you can see from the formula above, calculating the frequency is easy enough. Once you have a value for f, (the number of counts per second) divide this into the count value less one power you have wired the chip. That is, if you have wired the chip up for 2^16, divide your frequency into 2^15.

For example, my demonstration circuit has Rtc as 10k ohm, Ctc as 10 nF, and Rs as 20k ohm; and the chip is wired for 2^16 count. Remember to convert your values back to base units. So resistance in ohms, and capacitance in farads. Remember that 1 microfarad is 1×10-6 farads. So my frequency is:


So my timing duration will be 2^15 divided by 4347.826 Hz (result from above) which is  7.536 seconds give or take a fraction of a second. To make these calculations easier, there is a spreadsheet you can download here. For example:

Here is my demonstration monstable circuit. Once the power has been turned on the counter starts, and once finished the LED is lit. Or if the circuit already has power, the reset button SW1 is pressed to start counting. You can see that pins 12 and 13 are high to enable counting to 2^16; pin 6 is low unless the button is pressed; and pin 9 is low which keeps the LED off while counting.


And my demonstration laid out (I really do make everything I write about):

Easily done. Although this IC has been around for a long time, and many other products have superseded it, the 4541 can still be quite useful. For example, an Arduino system might need to trigger a motor, light, or something to runfor a period of time whilst doing something else. Unfortunately (thankfully?) Arduino cannot multi-task sketches, so this is where the 4541 can be useful. You only need to use a digitalWrite() to send a pulse to pin 6 of your timer circuit, and then the sketch can carry on, while the timer does its job and turns something on or off for a specified period of time.

Well I hope you found this part review interesting, and helped you think of something new to make.

As always, thank you for reading and I look forward to your comments and so on. Furthermore, don’t be shy in pointing out errors or places that could use improvement. Please subscribe using one of the methods at the top-right of this web page to receive updates on new posts. Or join our new Google Group. High resolution photos are available on flickr.

Otherwise, have fun, be good to each other – and make something! :)

Notes: In writing this post, I used information from NXP and On Semiconductor. Thank you.


This is part of a series titled “Getting Started with Arduino!” by John Boxall – A tutorial on the Arduino microcontrollers, to be read with the book “Getting Started with Arduino” (Massimo Banzi).

The first chapter is here.

Welcome back fellow arduidans!

This week we will continue to examine the features of the DS1307 real time clock, receive user input in a new way, use that input to control some physical movement, then build a strange analogue clock. So let’s go!

Recall from chapter seven, that the DS1307 is also has an inbuilt square wave generator, which can operate at a frequency of 1Hz. This is an ideal driver for a “seconds” indicator LED. To activate this you only need to send the hexidecimal value 0×10 after setting the date and time parameters when setting the time. Note this in line 70 of the solution for exercise 7.1. This also means you can create 1Hz pulses for timing purposes, an over-engineered blinking LED, or even an old-school countdown timer in conjunction with some CMOS 4017 ICs.

For now, let’s add a “seconds” LED to our clock from exercise 7.1. The hardware is very simple, just connect a 560 ohm resistor to pin 7 of our DS1307, thence to a normal LED of your choice, thence to ground. Here is the result:

Not that exciting, but it is nice to have a bit more “blinkiness”.

Finally, there is also a need to work with 12-hour time. From the DS1307 data sheet we can see that it can be programmed to operate in this way, however it is easier to just work in 24-hour time, then use mathematics to convert the display to 12-hour time if necessary. The only hardware modification required is the addition of an LED (for example) to indicate whether it is AM or PM. In my example the LED indicates that it is AM.

Exercise 8.1

So now that is your task, convert the results of exercise 7.1 to display 12-hour time, using an LED to indicate AM or PM (or two LEDs, etc…)

Here is my result in video form:

and the sketch: exercise8.1.pdf.

OK then, that’s enough about time for a while. Let’s learn about another way of accepting user input…

Your computer!

Previously we have used functions like Serial.write() and Serial.print() to display data on the serial monitor box in the Arduino IDE. However, we can also use the serial monitor box to give our sketch data. At first this may seem rather pointless, as you would not use an Arduino just to do some maths for you, etc. However – if you are controlling some physical hardware, you now have a very simple way to feed it values, control movements, and so on. So let’s see how this works.

The first thing to know is that the serial input has one of two sources, either the USB port (so we can use the serial monitor in the Arduino IDE) or the serial in/out pins on our Arduino board. These are digital pins 0 and 1. You cannot use these pins for non-serial I/O functions in the same sketch. If you are using an Arduino Mega or compatible board (lucky you) the pins are different, please see here.  For this chapter, we will use the USB port for our demonstrations.

Next, data is accepted in bytes (remember – 8 bits make a byte!). This is good, as a character (e.g. the letter A) is one byte. Our serial  input has a receiving buffer of 128 bytes. This means a project can receive up to 128 bytes whilst executing a portion of a sketch that does not wait for input. Then when the sketch is ready, it can allow the data to serially flow in from the buffer. You can also flush out the buffer, ready for more input. Just like a … well let’s keep it clean.

Ok, let’s have a look. Here is a sketch that accepts user input from your computer keyboard via the serial monitor box. So once you upload the sketch, open the serial monitor box and type something, then press return or enter. Load this sketch, example 8.1.pdf. Here is a quick video clip of it in operation:

Notice in the line Serial.print(character, BYTE); that we force the display to byte, this is to show the value as the matching ASCII character; otherwise it would return the ASCII value of the character instead. For the young ones out there, please read this for an explanation of the ASCII table.

So now we can have something we already know displayed in front of us. Not so useful. However, what would be useful is converting the keyboard input into values that our Arduino can work with.

Consider this example – example 8.2.pdf. It accepts an integer from the input of serial monitor box, converts it to a number you can use mathematically, and performs an operation on that number. Here is a shot of it in action:

If you are unsure about how it works, follow the sketch using a pen and paper, that is write down a sample number for input, then run through the sketch manually, doing the computations yourself. I often find doing so is a good way of deciphering a complex sketch. Once you have completed that, it is time for…

Exercise 8.2

Create a sketch that accept an angle between 0 and 180, and a time in seconds between 0 and (say) 60. Then it will rotate a servo to that angle and hold it there for the duration, then return it to 0 degrees. For a refresher on servo operation, visit chapter three before you start.

Here is a video clip of my interpretation at work:

and the example solution sketch: exercise 8.2.pdf

So now you have the ability to generate user input with a normal keyboard and a PC. In the future we will examine doing so without the need for a personal computer…

Finally, let’s have some fun by combining two projects from the past into one new exercise.

Exercise 8.3

Create an analogue clock using two servos, in a similar method to our analogue thermometer from chapter three. The user will set the time (hours and minutes) using the serial monitor box.

Here is a photo of my example. I spared no expense on this one…

And of course a video demonstration. First we see the clock being set to 12:59, then the hands moving into position, finally the transition from 12:59 to 1:00.

If you had more servos and some earplugs, a giant day/date/clock display could be made… If you like different clocks, have a look at these kits.

Nevertheless, we have had another hopefully interesting and educational lecture. Or at least had a laugh

Another week over. I apologise for this chapter being a little shorter than usual, unfortunately we have some sickness in the family. However, as usual I’m already excited about writing the next instalment… Congratulations to all those who took part and built something useful! Please subscribe (see the top right of this page) to receive notifications of new articles. High resolution photos are available from flickr.

If you have any questions at all please leave a comment (below). We also have a Google Group dedicated to the projects and related items on the website – please sign up, it’s free and we can all learn something -

If you would like to showcase your work from this article, email a picture or a link to john at tronixstuff dot com.

You might even win a prize. Don’t forget to check out the range of gear at Little Bird Electronics!

So have fun, stay safe and see you soon for our next instalment!




  • Newsletter

    Sign up for the PlanetArduino Newsletter, which delivers the most popular articles via e-mail to your inbox every week. Just fill in the information below and submit.

  • Like Us on Facebook