Posts | Comments

Planet Arduino

Archive for the ‘arduino hacks’ Category

Ok, this one is a bit bizarre, but in perfect keeping with the subject matter: a talking toilet ripped from the pages of the Captain Underpants children’s books. Hackaday.io user [hamblin.joe]’s county fair has a toilet decorating contest and at the suggestion of their neighbour’s son, [hamblin.joe] hatched a plan to automate the toilet using an Arduino in the fashion of the hero’s foes.

Two Arduinos make up this toilet’s brains, an Adafruit Wave Shield imbues it with sound capabilities, and a sonic wave sensor will trigger the toilet’s performance routine when someone approaches. A windshield wiper motor actuates the toilet bowl lid via a piece of flat iron bar connected to a punched angle bracket. Installing the motor’s mount was a little tricky, since it had to be precisely cut so it wouldn’t shift while in the toilet bowl. A similar setup opens the toilet tank’s lid, but to get it working properly was slightly more involved. Once that was taken care of there was enough room left over for a pair of 12V batteries and a speaker. Oh, and a pair of spooky eyes and some vicious looking teeth.

If you have a limited number of bathrooms at home or at work, some signage would be useful to know when it’s free and how dangerous it is to enter.


Filed under: Arduino Hacks, Uncategorized

[Micah Elizabeth Scott] needed a custom USB keyboard that wrapped around a post. She couldn’t find exactly what she wanted so she designed and printed it using flexible Nijaflex filament. You can see the design process and the result in the video below.

The electronics rely on a Teensy, which can emulate a USB keyboard easily. The keys themselves use the old resistor divider trick to allow one analog input on the Teensy to read multiple buttons. This was handy, but also minimized the wiring on the flexible PCB.

The board itself used Pyralux that was milled instead of etched. Most of the PCB artwork was done in KiCAD, other than the outline which was done in a more conventional CAD program.

We always enjoy seeing practical use of hacker-grade 3D printers. After all, there are only so many keychains you can make. Of course, you probably don’t need exactly this keyboard layout. But the techniques of creating the flexible PCB, printing the keypad itself and integrating everything with the electronics would be a great road map for any similar project.

As far as we can tell, the cat made no actual contribution to the final design. Unless you count inspiring flexibility, perhaps.

We’ve seen people make the actual PCBs using Pyralux and Ninjaflex as an etch resist if you don’t want to mill the boards. This isn’t the first time we’ve seen a Teensy pressed into keyboard controller service, either.

Thanks [Kyle] for the tip.


Filed under: 3d Printer hacks, Arduino Hacks, ARM

Early programmers had to represent code using binary, octal, or hex numbers. This gave way quickly to representing programs as text to be assembled, compiled, or interpreted by the computer. Even today, this remains the most common way to program, but there have been attempts to develop more visual ways to create programs graphically. If you program microcontrollers like the Arduino, you should check out XOD and see how you like visually creating software. The software is open source and currently, can target the Arduino or Raspberry Pi.

You can launch the IDE in a web browser or download a local copy. You transfer nodes from a palette into a grid-like workspace. These nodes might be inputs, outputs, processing blocks, or represent real-world I/O devices. Nodes have inputs and outputs of specific types and you connect them together, connecting like types only, although there are blocks that can convert.

For example, to the right is a simple set of nodes that forms the prototypical flashing LED program. A clock node creates a pulse that toggles a memory element and a digital output accepts both the signal and a constant value indicating which port it represents.

This is a simple example, but it does show the intuitive flow of joining nodes. There is a reasonable array of node types and sufficient documentation.

There are out-of-the-box nodes for ultrasonic sensors, temperature sensors, servos, LCDs, buttons, and H-bridges. You can create your own super-nodes (patches) and you also can make multiple disjointed flows to execute more than one task at a time.

When you generate the code you get a lot of boilerplate that sets up the run time system and the nodes you use. Your main code appears to be in an evaluate function. For example, here’s a snippet of the code that corresponds to the simple graphical blink program:

void evaluate(Context ctx) {
State* state = getState(ctx);
TimeMs tNow = transactionTime();
TimeMs dt = getValue<input_IVAL>(ctx) * 1000;
TimeMs tNext = tNow + dt;

if (isInputDirty<input_RST>(ctx)) {
if (dt == 0) {
state->nextTrig = 0;
clearTimeout(ctx);
} else if (state->nextTrig < tNow || state->nextTrig > tNext) {
state->nextTrig = tNext;
setTimeout(ctx, dt);
}
} else {
// It was a scheduled tick
emitValue<output_TICK>(ctx, 1);
state->nextTrig = tNext;
setTimeout(ctx, dt);
}
}

There are a few rough edges, which isn’t surprising for new software. For one thing, nodes have fixed numbers of inputs and outputs. So if you want, for example, a ten-input AND gate, you’ll have to build it. Another apparent issue is there is no way we found to select a lot of items at once. If you decide you want to move a whole bunch of nodes down to make room for something new, you are going to be in for a lot of work.

There are other drag-and-drop programming languages, of course. We’ve covered Scratch for the Arduino and the Raspberry Pi, before. However, this is a dead simple way to try flow-based programming with minimal setup.


Filed under: Arduino Hacks, Raspberry Pi

Small OLED displays are inexpensive these days–cheap enough that pairing them with an 8-bit micro is economically feasible. But what can you do with a tiny display and not-entirely-powerful processor? If you are [ttsiodras] you can do a real time 3D rendering. You can see the results in the video below. Not bad for an 8-bit, 8 MHz processor.

The code is a “points-only” renderer. The design drives the OLED over the SPI pins and also outputs frame per second information via the serial port.

As you might expect, 3D output takes a good bit of math, and the chip in question isn’t very good at handling real numbers. [Ttsiodras] handles this using an old technique: fixed point arithmetic. The idea is simple. Normally, we think of a 16-bit word as holding unsigned values of 0 – 65535. However, if you choose, you can also use it to represent numbers from 0-50.999, for example. Mentally, you scale everything by 1,000 and then reverse the operation when you want to output. Addition and subtraction are straightforward, but multiplication and division require some extra work.

If you want to read more about fixed point math, you are in the right place. We’ve also covered a great external tutorial, too. But if you think this is the first time we’ve covered a 3D graphics engine for the ATmega parts, you’re wrong.


Filed under: Arduino Hacks

How do you tell how much load is on a CPU? On a desktop or laptop, the OS usually has some kind of gadget to display the basics. On a microcontroller, though, you’ll have to roll your own CPU load meter with a few parts, some code, and a voltmeter.

We like [Dave Marples]’s simple approach to quantifying something as complex as CPU load. His technique relies on the fact that most embedded controllers are just looping endlessly waiting for something to do. By strategically placing commands that latch an output on while the CPU is busy and then turn it off again when idle, a PWM signal with a duty cycle proportional to the CPU load is created. A voltage divider then scales the maximum output to 1.0 volt, and a capacitor smooths out the signal so the load is represented by a value between 0 and 1 volt. How you display the load is your own choice; [Dave] just used a voltmeter, but anything from an LED strip to some kind of audio feedback would work too.

Still just looking for a load meter for your desktop? Take your pick: an LED matrixold-time meters, or even Dekatrons.


Filed under: Arduino Hacks

I read the other day that the hot career choice for kids these days is: YouTuber. That means every kid — yes, including mine — has two or three attempts at a YouTube show on their account and then they get into the next big thing and forget about it. On the other hand, sometimes you find someone who has a lot of ideas to share, and the dedication to keep sharing them.

[Kevin Zhou], an 11-year-old from Indonesia, has filmed around  70 videos in the past couple of years, with a fantastic variety of nerdy projects ranging from Mindstorms to Arduino to wood shop projects, and even a Blender tutorial. His projects show a lot of complexity, with serious, real-world concepts, and he shares the technical details about the various components in the project, and he walks you through the code as well.

He made a Mindstorms carving machine, pictured above, with a gantry system holding a motor steady while the user carves into a block of floral foam with LEGO bits. He does a lot of home automation projects using an Arduino and relay board, as well as a number of water-pumping robots. He doesn’t stick to one medium or technology. He has a jigsaw and in one video he shows how to build a Thor’s hammer out of wood. He prints out each layer’s design on office paper and glues the paper to a piece of wood, cutting out the cross-sections on his jigsaw. The whole stack is glued together and clamped. [Kevin]’s design featured a hollow space inside to save weight, which he cut by drilling a 1-inch hole in the center with his drill press, then threading the jigsaw blade through the hole to cut out the inside. As an amateur woodcrafter myself, I like seeing him branching out working on small wood projects.

[Kevin]’s full automatic water dispenser is one of a series of water-pumping projects including a couple of plant-watering robots. [Kevin] uses a relay-triggered pump and a water-level sensor, all running on an Arduino Mega plugged into a 1360-point breadboard.

He has a lot of common modules. He uses a LED display plugged directly into the breadboard, with its backpack plugged into same rows so it can lay flat. He plays around with an IR remote, as well as a 12 V / 5 A Peltier thermo-electric cooler running off of a relay. He has a couple of different relay boards making for a number of home automation projects, including a fairly complicated security system featuring RFID and keypad entry.

There are many LEGO and Mindstorms projects as well, including a complicated robot arm controlled by a smartphone app, as well as a Technic beam sorter that rolls the beams down a conveyor so that shorter elements fall through smaller holes, while longer pieces continue on to fall in larger holes down the line. Intriguingly to me, he did a couple of projects involving mixing Arduinos and LEGO/Mindstorms, and frequently uses the building set to build enclosures and support structure.

I suppose you could say the individual projects aren’t that challenging–connecting a relay board to an Arduino, for instance. All of these parts are fairly simple to run individually but together show he’s been working at this for a long time: 70 videos. A DIY security system is a far cry from turning on a LED.

Besides, I like how [Kevin] finishes projects, then riffs off of them. He tries out a few variants in a row, making changes and improvements. I just hope he keeps building–I can’t imagine what he’ll be making fifteen years from now.

Check out some of his videos:


Filed under: Arduino Hacks, Featured

Sometimes the simplest things in life are the most beautiful. [The Tweaker] has soldered an LED circle on the top of an ATMEGA328P chip, and it looks great.

Using nothing more than some solder, wire, 20 x Pico 0402 (1mm x 0.5mm) blue LEDs and an ATMEGA328P (7mm x 7mm), [The Tweaker] managed to cram 20 LEDs into a circle on the top of the chip soldered in dead bug style. The chip is running some Arduino code and is operating on the 8MHz internal crystal, so that manages to keep the part count low. The soldering is done in a spiral so the LED terminals are hooked up to the right pins, but it seems to add to the aesthetics of the project and looks like it would take a really steady hand. Once you connect a power source it displays chasing lights as well as other light patterns.

There may not be much to this project but it does look great.

You might be interested to read, this isn’t our first dead bug Arduino.


Filed under: Arduino Hacks, led hacks

Kickstarter and its ilk seem like the Wild West when it comes to claims of being “The world’s most (Insert feature here) device!” It does add something special when you can truly say you have the world record for a device though, and [MellBell Electronics] are currently running a Kickstarter claiming the worlds smallest Arduino compatible board called Pico.

We don’t want to knock them too much, they seem like a legit Kickstarter campaign who have at time of writing doubled their goal, but after watching their promo video, checking out their Kickstarter, and around a couple of minutes research, their claim of being the world’s smallest Arduino-compatible board seems to have been debunked. The Pico measures in at an impressive 0.6 in. x 0.6 in. with a total area of 0.36 sq.in. which is nothing to be sniffed at, but the Nanite 85 which we wrote up back in 2014 measures up at around 0.4 in. x  0.7in. with a total area of around 0.28 sq.in.. In this post-fact, fake news world we live in, does it really matter? Are we splitting hairs? Or are the Pico team a little fast and loose with facts and the truth?

There may be smaller Arduino compatible boards out there, and this is just a case study between these two. We think when it comes to making bold claims like “worlds smallest” or something similar perhaps performing a simple Google search just to be sure may be an idea.


Filed under: Arduino Hacks, Crowd Funding

Federico Musto, who until two days ago owned the largest part of Arduino AG has been bought out, having today been replaced by a combination of Massimo Banzi and Fabio Violante.

This should bring to a close the saga that began with a fork where two companies called themselves “Arduino” and bizarrely continued for almost a year after the reconciliation of the two was announced. What remains today is one corporation called Arduino AG, now captained by Massimo Banzi as Chairman and CTO, and Fabio Violante as CEO.

Massimo Banzi was one of the original founders of Arduino and one side of the trademark litigation during the period in which there were two companies. With the buyout of Musto, Banzi moves back to the top spot. This change in leadership occurred as a company called BCMI bought all shares of Arduino AG. BCMI was started by four of the original Arduino co-founders; you could say the old gang rides again.

Arduino AG is in essence a hardware company, manufacturing and selling the officially branded Arduino boards. But right now they still maintain the official codebase which most people see as belonging to the community. Despite changes at the top, the proof will still be in the pudding. When will we see the Arduino Foundation come to life and take control of the Arduino IDE? Hackaday will continue to look into it and provide updates.

 


Filed under: Arduino Hacks, news

In the mid-1970s, if you had your own computer, you probably built it. If you had a lot of money and considerable building skill, you could make an Altair 8800 for about $395 — better than the $650 to have it built. However, cheaper alternatives were not far behind.

In 1976, Popular Electronics published plans for a computer called the COSMAC Elf which you could build for under $100, and much less if you had a good junk box. The design was simple enough that you could build it on a piece of perf board or using wire wrap. We featured the online archive of the entire Popular Electronics collection, but hit up page 33 of this PDF if you want to jump right to the article that started it all. The COSMAC Elf is a great little machine built around a 40-pin RCA 1802 processor, and for many was the first computer they owned. I lost my original 1802 computer in a storm and my recent rebuild in another completely different kind of storm. But there is a way to reclaim those glory days without starting from scratch.  I’m going to repurpose another retro-computing recreation; the KIM-1.

I’ll admit it, Rewiring a real KIM-1 to take an 1802 CPU would be difficult and unnecessary and that’s not what this article is about. However, I did have a KIM UNO — [Oscar’s] respin of the classic computer using an Arduino mini pro. Looking at the keyboard, it occurred to me that the Arduino could just as easily simulate an 1802 as it could a 6502. Heck, that’s only two digits different, right?

The result is pretty pleasing. A “real” Elf had 8 toggle switches, but there were several variations that did have keypads, so it isn’t that far off. Most Elf computers had 256 bytes of memory (without an upgrade) but the 1802 UNO (as I’m calling it) has 1K. There’s also a host of other features, including a ROM and a monitor for loading and debugging programs that doesn’t require any space in the emulated 1802.

Repurpose

The KIM UNO has 24 switches. There are 16 for the hex digits, of course. The top two rows mimic functions from the original KIM-1. A real Elf had a way to input a byte (usually 8 toggle switches), a load switch, a run switch, a memory protect switch, and a push button wired to a CPU pin. That means the hardware has more than enough switches.

On the display side, a normal Elf had a single-byte hex display although some clones had more. There was also the Q LED that a program could light or extinguish. The KIM UNO hardware has many 7-segment displays so it is possible to put those digits to use like an Elf clone. There isn’t an LED, however, except for the Arduino’s built in LED which is not normally visible in operation. However, the digital displays have decimal points and they are connected to the Arduino. So if you don’t mind using those, you have plenty of LEDs, too.

The hardware is open source and easy to duplicate. [Oscar] sometimes has kits as well and they are very inexpensive (about $20).

The KIM UNO software is open source, so I started there. I first stripped all the code out of the main file other than the parts that drove the display and the keyboard, then built up everything need to suppot 1802 emulation. You can find all the code in my 1802UNO GitHub repository.

Inside the 1802

The 1802 instruction set is very regular and quite simple. Most instructions use the top 4 bits as an op code and the bottom 4 bits to select one of sixteen 16-bit registers. So 0x12 increments register 2 and 0x15 increments register 5. There are only a handful of op codes that don’t follow this pattern. There’s also an 8-bit accumulator called “D” (not to be confused with register D).

One unique feature in the 1802 architecture is the program counter. There isn’t one. Well, more precisely, there are up to 16. Any of the registers can be the program counter and a subroutine call can be as simple as switching the program counter. Unfortunately, that isn’t very reentrant (or good for recursion). If you want a proper subroutine call, you had to code it yourself. RCA provided the “standard call and return technique” that had the unfortunate downside of destroying the accumulator.

With so few instructions, the emulator turns out to be a few switch statements and some pretty simple code. Although it is made to run with the KIM UNO hardware, like the KIM UNO, you should be able to use it with just about any Arduino via the serial port. It isn’t quite as fun as having the real hardware, but it is simpler.

Unreal

The emulator is reasonably accurate except it doesn’t simulate interrupts (since there is no source of them). However, it doesn’t faithfully reproduce the 1802’s load mode which used DMA. Instead, load mode is just completely custom code that enters data into memory. It does not simulate the cycle and register manipulations that go on in a real 1802 using DMA in load mode.

In addition to loading a program with the ersatz load mode, you can also move RAM back and forth to EEPROM or a PC via the serial port.

Serial and Push Buttons

The serial port is just the usual Arduino serial port set for 9600 baud. By default, the serial input will mimic the hardware keys. However, you can use the pipe character (‘|’) to shift the serial port into terminal mode. Then the 1802 code can read data from the serial port. You lose the front panel functions and there’s no way to go back until you cycle the power unless you make the 1802 code release the port.

A few of the push buttons have special functions if you hold them down for more than one second. For example, the AD button writes the EEPROM data into RAM. This is useful for storing a self-contained demo, for example.

You can find a summary of the keyboard and serial commands on the GitHub site. The serial port can do things you can’t do from the front panel, like set a trace mode, dump the CPU registers, and more.

Building

The hardware doesn’t require any changes to the stock KIM UNO kit. There’s a lot to solder and once you solder the displays on, it would be hard to get the Arduino back off the board.

You could probably build the software using the Arduino IDE, but I used Platform IO. That lets me use the editor of my choice, but you ought to be able to get the code to work in the IDE, as well. There is enough memory to make the RAM slightly bigger, but I didn’t do it. Since one way to save and load the RAM is to EEPROM, I didn’t want the RAM to be larger than the EEPROM. In addition, the RAM “maps” like a real Elf (that is, RAM at location 0x0 also appears at 0x4000, 0x8000, etc). This would be more difficult if you added a little bit more than 1K of RAM.

There are a few other options at the top of 1802config.h. You can select how often the screen and keyboard refresh. Higher values are slower to refresh but faster to execute code. You can change the I/O ports associated with the keyboard, displays, and serial port. You can also change the serial escape character.

Examples

There are some examples provided that blink the LEDs and manipulate the serial port. If you look around, there’s a lot of 1802 code on the web. However, be aware that most 1802s don’t have a hardware UART. They emulate serial ports using the Q output and one of the EF inputs. That’s fine for a real device even though it takes lots of code, but for this virtual device, it isn’t practical. You’ll need to rip out any code that does serial I/O and replace it with single I/O instructions.

If you have a binary file (or a format you can convert to binary) I have a converter written in C included on GitHub. You can compile it on nearly any platform and use it to convert. It always assumes address. If that’s not right, you can always open the output in a text editor and adjust.

In addition, there are three ROMs included that you can try. By default, there is a simple high-low game. There are also two monitors, one for use with the built-in keyboard and another for use with a serial port. To select a ROM, edit 1802rom.h and change the comments so the ROM you want is not commented and the others are.

Practical?

Emulators are fun, but as the song goes, there’s nothing like the real thing. If that’s not authentic enough for you, it is possible to build a very authentic looking Elf, even today. The reason real 1802s are still around is they had several desirable characteristics, namely low power consumption and resistance to radiation.

The Arduino simulation has neither of those features. However, it is a fun retrocomputing toy, inexpensive, and a great learning tool. The CPU is simple enough to program directly in machine code and the portability is better than most other old school computers.

If you want to learn more about the 1802 there are several sites dedicated to it and a very helpful Yahoo group. One site has a very prolific software author, but most of the code won’t fit in the 1802 UNO’s 1K RAM. Maybe a version with more memory is in the future.


Filed under: Arduino Hacks, classic hacks, computer hacks, Hackaday Columns


  • 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