While watching Tron for the umpteenth time, I started thinking about how data could be displayed in abstract, but still readable, ways. The OLED display, with its crispness, seemed like a good fit for what I had in mind. After considering a few different options, I settled on a building a stylized clock display.
The blocks are drawn so that, from outside to inside, each ring represents hours, minutes, and seconds. The current hour and minute are indicated by the empty block in each ring. The current second is drawn as a solid block (this ends up looking like a square moving around the inside ring). In the above picture, the time can be read as 8:23 and about 38 seconds. The overall circuit is set up by following the wiring in the tutorial on the monochrome 128×64 OLED and plugging the RTC breakout board directly into the Arduino as shown in the DS1307 tutorial.
The main sketch file handles reading the current time and drawing the rectangles. A second file contains the coordinates for each rectangle. The rectangles are broken up into three arrays - hour_rects, minute_rects, & second_rects and ordered by the appropriate time value. The advantage of this approach is that modifying the design of the clock is as easy as adjusting the values in the appropriate array entry. The biggest downside was the increase in memory usage; I ended up keeping the arrays in program memory by declaring the arrays with the prog_uint8_t type and PROGMEM attribute:
prog_uint8_t hour_rects[12][4] PROGMEM = {
...
};
Also, reading from the arrays required the use of an appropriate function:
pgm_read_byte_near(&rectangles[i][0]);
The full source is available on github - I’d love to see what other designs for clock displays people come up with or if someone extends this to display other types of data.
This is a really simple ambient display for temperature using an arduino, an adafruit RGB backlight LCD, and a temperature sensor. The LCD displays the temperature in Fahrenheit and Celsius and adjusts the color of the backlight depending on the reading. An ideal range is set at 61F to 67F. If the temperature is in this range the backlight will change green. Above this range and the color will change red, below the range it will change blue. The great thing about these kinds of displays is that you can immediately get some rough information from across the room.
When a postal truck arrives at the iFixit office with a delivery, we don’t even have to get up. All we have to do is tell our garage door robot, via our internal chat client, to open the roll-up door. Someday, I hope to put the robot to more exciting uses (ultimate goal: robot domination). For now, however, my T1000 does its door-opening job with no complaints.
I had the chance to play with some new components – namely the Adafruit Monochrome 128×32 OLED display and the Adafruit UP501 66 channel GPS receiver. As I was pondering ideas of what to build, I thought that it would be neat to be alerted when approaching a red light camera. In my local area (Southern Ontario), there are currently about a hundred or so of these cameras around the GTA. However, it appears that new legislation may see this number grow much larger. This is more of a proof of concept project to me than it is useful as, a) I don’t intend on trying to run any red lights, and b) there are only about 1 or 2 of them within the area. However, it was fun to build and tweak to make it useful. Read on…
The projects I do tend to fall in one of two buckets – either proof-of-concept (so I can learn new stuff) or items that have some sort of functional use. The need for this project came about when my wife was prodding me about the humidity in the house and whether our humidifier was doing it’s job correctly. Most people would just go out and buy a temp / humidity sensor and be done with it. However, if you have a look around here, you will see that I don’t fit that mold. Instead, I decided to build an accurate temp / humidity sensor with a Sensiron SHT11 to read the values, a RBBB Arduino kit to process everything and an Adafruit 128×32 OLED to display the results – all wrapped up in… LEGO! Read on for more…
I needed a couple of AA batteries and found the display at the supermarket where they were all arrayed. Normally when I’m shopping in the supermarket, I tend to look at the price/kg or price/l when comparing similar products. In the case of the batteries, there was no such indicator. Fine, I thought, I’ll work it out myself. I grabbed a few different makes and scanned the packaging for some measure of their capacity. Nothing. Not a single one of the batteries had any indicator of how much energy they would provide. Instead, they all had terms like ‘PLUS’, ‘SUPER’, ‘ULTRA’ and of course had wildly differing prices. So, I decided that it was time for an experiment and bought one pack of every type I could find.
There comes a time in life to put childish things behind and give up nasty habits. Some, like smoking, can be damn hard without constant encouragement. It was time for me to combine my favorite hobby with my driving goal and make this: The Quit Success Meter!
I recently needed to measure how different materials affect light transmission for a gardening project. I decided this was the perfect opportunity to try out the new logic level converter to run both a 5v LCD and a 3.3v light sensor on a single i2c bus. I used the following parts in this project:
First up is wiring power to the breadboard from the Arduino. I decided to keep the left side for 3.3v and the right side for 5v.
Breadboard right ground bus – black wire – Arduino ground pin
Breadboard right positive bus (5v bus) - red wire – Arduino 5v pin
Breadboard left ground bus – black wire – Breadboard right ground bus
Breadboard left positive bus (3.3v bus) – yellow wire – Arduino 3.3vpin
The next step is adding the logic level converter to the breadboard. It straddles the center notch like a DIP (but takes one additional column). I placed it toward the top of the breadboard to leave plenty of space for the light sensor to be added later.
snprintf_P is a variant of sprintf that adds a couple of nice features. The ‘n’ indicates that you can specify a maximum number of bytes to write into the buffer; this helps protect against accidental buffer overruns. The ‘_P’ indicates that the format string is read from program memory; this helps conserve RAM. In the invocation above, I’m using the companion macro PSTR() to keep the format string parameter in program memory.
swim with a triathlete group in an outdoor pool at 6AM three days a week. For half the year I can see stars when I start swimming. What I can’t see in the dark is the analog clock to check my pace on 100 meter laps.
To solve this problem I designed and built a portable digital timer with LED display. The 4-digit 7-segment display is large enough to see from 10 feet away so I can read it without stopping. The timer is encased in a transparent and waterproof polycarbonate tube so that I don’t have to worry about it getting wet or falling in the pool. In fact you can take it to the bottom of the pool and it won’t leak. Normally it just sits on the edge of the pool where I can see it.
There are a variety of LCD swim timers available that are fine for day swimmers. This timer is for night swimmers.
This is the eagerly awaited 3.0 version of Photoduino. Photoduino is an open source camera controller based on the Arduino platform which you can use to automatically take pictures with your DSLR camera.
It serves as technical support for shooting high speed photos but you can also use it as an intervalometer to make Timelapse videos or for animals and insects photography.
Photoduino is an electronic circuit that is placed on an Arduino board as a Shield taking all the inputs, outputs and power pins. It has all the necessary electronic components and connectors for connecting the camera, flashes and sensors. You can control the shutter and camera autofocus, and you can also trigger two flashes. It also has a sound sensor, a shock/impact sensor and a laser or infrared barrier that can be used to take pictures when you register an event on any of the sensors. The configuration is done entirely through a small LCD screen using only two buttons, so it works independently without the need for a computer (except for firmware updates).
This system currently supports a wide range of DSLR cameras with a remote shutter cable connector.
Both hardware and firmware are completely open (like the Arduino platform on which it is based) and it is released under an open license.
This is a proof-of-concept dual bootloader for Atmel AVR atmega chips. It combines a serial bootloader and a mmc/sd card based one in the same 2kb of flash memory that is normally used by the arduino serial loader alone.
You might ask Why? Well, I have quite a few arduino “in the field”. I can simply drag a .hex file to an SD card, insert it in an SD shield, and field-upgrade my boards without additional hardware. At the same time, I can connect the serial port and start developping with the normal Arduino IDE.
With this in mind, we wanted to make it easier for people to get these LCD into their projects so we devised a shield that lets you control a 16×2 Character LCD, up to 3 backlight pins AND 5 keypad pins using only the two I2C pins on the Arduino! The best part is you don’t really lose those two pins either, since you can stick i2c-based sensors, RTCs, etc and have them share the I2C bus. This is a super slick way to add a display without all the wiring hassle.
This shield is perfect for when you want to build a stand-alone project with its own user interface. The 4 directional buttons plus select button allows basic control without having to attach a bulky computer.
The shield is designed for ‘classic’ Arduinos such as the Uno, Duemilanove, Diecimilla, etc. It will also work perfectly with Arduino Mega R3′s. Earlier Mega’s have the I2C pins in a different location and will require you to solder two wires from the I2C pins on the shield and plug them into the different I2C locations at Digital 20 & 21.