Summer’s Coming – Let Mowerino Cut Your Grass

In the Northern hemisphere, summer is about to hit us full bore. While we love the season, we do dislike lawn maintenance. Apparently, so does [salmec] who developed the Mowerino around an Arduino Mega 2560 board.

As you might expect, the robot uses sharp blades so, you probably want to be careful. There are sensors that allow the machine to self-navigate or you can control it via Bluetooth. This is one of those things that seems easy until you try to actually do it. Nylon trimmer string is probably safer, but it breaks and it is hard to keep it cutting. Blades are more robust but also riskier to things like rocks, fingers, and pets.

Moving around in the yard is also an issue. The Mowerino has some ordinary-looking caster wheels in the front. That might be a place for improvement since most yards are not friendly to that kind of wheel. The other thing we worried about is what happens to the grass clippings. Around here, a week of rain means your mower will choke on grass clippings. On the other hand, the Mowerino has a smaller blade so maybe that helps mitigate clipping clogging.

Overall, though, it looks like it might be a good place to start if you dream of robot groundskeepers patrolling your estate. Most of the mowers we see like this have big wheels. But, of course, not all of them.

Continue reading “Summer’s Coming – Let Mowerino Cut Your Grass”

Linux Fu: The Infinite Serial Port

Ok, the title is a bit misleading. Like most things in life, it really isn’t infinite. But I’m going to show you how you can use a very interesting Linux feature to turn one serial port from a microcontroller into a bunch of virtual ports. In theory, you could create over 200 ports, but the reality is you will probably want to stick with fewer.

The feature in question is what’s known as pseudoterminal or sometimes a pty or pts. These special files were made to feed data to programs that expect to accept data from a terminal. The files provide two faces. To the client, it looks like any other terminal device. To the creator, though, it is just another file. What you write to that file goes to the fake terminal and you can read anything that is sent from the program connected to the terminal. You use these all the time, probably, without realizing it since running a shell under X Windows, for example, doesn’t attach to a real terminal, after all.

You could, of course, do the same trick with a composite USB device, assuming you have one. Also assuming you can find a working driver and get it working. However, many microcontrollers have a serial port — even one with a USB converter built-in — but fewer have full-blown USB hardware. Even the ones that do are often at odds with strange drivers on the PC side. Serial ports work and work well even on the simplest microcontrollers.

The Plan

The plan is simple enough. A Linux program listens to a real serial port and watches for special character sequences in the data stream. Those sequences will allow you to switch data so that the data stream will go to a particular terminal. Data coming back from the terminals will go to the real serial port after sending a sequence that identifies its source.

Continue reading “Linux Fu: The Infinite Serial Port”

Arduino And Git: Two Views

You can’t do much development without running into Git, the version control management system. Part of that is because so much code lives on GitHub which uses Git, although you don’t need to know anything about that if all you want to do is download code. [Dr. Torq] has a good primer on using Git with the Arduino IDE, if you need to get your toes wet.

You might think if you develop by yourself you don’t need something like Git. However, using a version control system is a great convenience, especially if you use it correctly. There’s a bug out in the field? What version of the firmware? You can immediately get a copy of the source code at that point in time using Git. A feature is broken? It is very easy to see exactly what changed. So even if you don’t work in a team, there are advantages to having source code under control.

Continue reading “Arduino And Git: Two Views”

High Temp Heat Engine Achieves 40% Efficiency

People generate lots of waste heat. It makes sense that there is a desire to convert that heat into usable energy. The problem is one of efficiency. Researchers from MIT and the National Renewable Energy Lab have announced a new heat converter that they claim has 40% efficiency. Of course, there’s a catch. The temperature range for the devices starts at 1,900 °C .

The thermophotovoltaic cells are tandem devices with two cells mated on one substrate. Each cell is multiple layers of very thin and somewhat exotic materials. So this probably isn’t something you will cobble up in your basement anytime soon unless you’re already manufacturing ICs down there. It appears that the secret is in the multiple layers including a reflective one that sends any missed photons back through the stack.

The paper is pretty dense, but there’s a Sunday-supplement summary over on the MIT site. Using heat storage leads to the ability to make heat batteries, more or less, and harness what would otherwise be waste energy.

We’ve noticed a lot of interest in drawing power from hot pipes lately. All of them techniques we’ve seen rely on some kind of exotic materials.

Linux Fu: An Odd Use For Fork()

If you are a Star Trek fan, you’ll probably remember the phrase “You have to learn why things work on a starship.” The truth is, in most episodes, knowing how to override another ship’s console or make gunpowder didn’t come in very handy, but boy when it did, it really saved the day. Linux is a lot like that. There are a few things you probably don’t need to know very often, but when you do need to know, it makes a huge difference. In this particular post, I want to look at an odd use of the fork system call. For many purposes, you’ll never need to know this particular irregular use. But when you need it, you are really going to need it.

This is actually based on an old client of mine who used Unix to run a massive and very critical report every day.  The report had a lot of math since they were trying to optimize something and then generate a lot of reports. In those days, the output of the report was on old green-bar paper on a line printer. The problem was that the report took something like 14 hours to run including the printouts. If someone discovered something wrong, there was no time to run the report again because the next day’s report would have to start before the second run would finish.

The client had a bunch of Windows programmers and — at that time — there wasn’t anything really analogous to a real fork call in Windows. I looked at the code and realized that probably most of the code was spending time waiting to print the output. The computer had multiple CPUs and there were multiple printers, but that one program was hanging on the one printer. There was a lot of data, so writing it to a database and then running different reports against it wasn’t a great option. The answer was to use the power of fork. With a change in the code that took less than 30 minutes, the report ran in five hours. They were very pleased.

So how did I do it? The answer lies in how fork works. Just about every time you see a fork, you see some sort of exec call to start a new program. So if you think about fork at all, you probably think it is part of how you start a new program and, most of the time, that’s true. Continue reading “Linux Fu: An Odd Use For Fork()”

A Rotary Encoder: How Hard Can It Be?

As you may have noticed, I’ve been working with an STM32 ARM CPU using Mbed. There was a time when Mbed was pretty simple, but a lot has changed since it has morphed into Mbed OS. Unfortunately, that means that a lot of libraries and examples you can find don’t work with the newer system.

I needed a rotary encoder — I pulled a cheap one out of one of those “49 boards for Arduino” kits you see around. Not the finest encoder in the land, I’m sure, but it should do the job. Unfortunately, Mbed OS doesn’t have a driver for an encoder and the first few third-party libraries I found either worked via polling or wouldn’t compile with the latest Mbed. Of course, reading an encoder isn’t a mysterious process. How hard can it be to write the code yourself? How hard, indeed. I thought I’d share my code and the process of how I got there.

There are many ways you can read a rotary encoder. Some are probably better than my method. Also, these cheap mechanical encoders are terrible. If you were trying to do precision work, you should probably be looking at a different technology like an optical encoder. I mention this because it is nearly impossible to read one of these flawlessly.

So my goal was simple: I wanted something interrupt driven. Most of what I found required you to periodically call some function or set up a timer interrupt. Then they built a state machine to track the encoder. That’s fine, but it means you eat up a lot of processor just to check in on the encoder even if it isn’t moving. The STM32 CPU can easily interrupt with a pin changes, so that’s what I wanted.

The Catch

The problem is, of course, that mechanical switches bounce. So you have to filter that bounce either in hardware or software. I really didn’t want to put in any extra hardware more than a capacitor, so the software would have to handle it.

I also didn’t want to use any more interrupts than absolutely necessary. The Mbed system makes it easy to handle interrupts, but there is a bit of latency. Actually, after it was all over, I measured the latency and it isn’t that bad — I’ll talk about that a little later. Regardless, I had decided to try to use only a pair of interrupts.

Continue reading “A Rotary Encoder: How Hard Can It Be?”

Micromachining With A Laser

[Breaking Taps] has a nice pulsed fiber laser and decided to try it to micromachine with silicon. You can see the results in the video below. Silicon absorbs the IR of the laser well, although the physical properties of silicon leave something to be desired. He also is still refining the process for steel, copper, and brass which might be a bit more practical.

The laser has very short duration pulses, but the pulses have a great deal of energy. This was experimental so some of the tests didn’t work very well, but some — like the gears — look great.

Continue reading “Micromachining With A Laser”