High Precision Analog IO With Digital Pins

Reading the temperature of your environment is pretty easy right? A quick search suggests the utterly ubiquitous DHT11, which speaks a well documented protocol and has libraries for every conceivable microcontroller and platform. Plug that into your Arduino and boom, temperature (and humidity!) readings. But the simple solution doesn’t hit every need, sometimes things need to get more esoteric.

The technique summarized by an image from Microchip Appnote AN685

For years we’ve been watching [Edward]’s heroic efforts to build accessible underwater sensing hardware. When we last heard from him he was working on improving the accuracy of his Arduino’s measurements of the humble NTC thermistor. Now the goal is the same but he has an even more surprising plan, throw the ADC out entirely and sample an analog thermistor using digital IO. It’s actually a pretty simple trick based on an intuitive observation, that microcontrollers are better at measuring time than voltage. 

The basic circuit

The circuit has a minimum of four components: a reference resistor, the thermistor, and a small capacitor with discharge resistor. To sense you configure a timer to count, and an edge interrupt to capture the value in the timer when its input toggles. One sensing cycle consists of discharging the cap through the discharge resistor, enabling the timer and interrupt, then charging it through the value to measure. The value captured from the timer will be correlated to how long it took the cap to charge above the logic-high threshold when the interrupt triggers. By comparing the time to charge through the reference against the time to charge through the thermistor you can calculate their relative resistance. And by performing a few calibration cycles at different temperatures ([Edward] suggests at least 10 degrees apart) you can anchor the measurement system to real temperature.

For all the gory details, including tips for how to save every last joule of energy, check out [Edward]’s post and the Microchip appnote AN685 he references. Besides this series [Edward]’s Cave Pearl Project has already yielded an impressive number of Hackday posts. For more great hardware writeups check out a general hardware build for a single sensing node, or the “temperature sensor” [Edward] made with no external parts at all!

Developing An Automatic Tool For CAN Bus Hacking

In the old days, a physical button or switch on the dashboard of your car would have been wired to whatever device it was controlling. There was potentially a relay in the mix, but still, it wasn’t too hard to follow wires through the harness and figure out where they were going. But today, that concept is increasingly becoming a quaint memory.

Assuming your modern car even has physical buttons, pushing one of them likely sends a message over the CAN bus that the recipient device will (hopefully) respond to. Knowing how intimidating this can be to work with, [TJ Bruno] has been working on some software that promises to make working with CAN bus user interfaces faster and easier. Ultimately, he hopes that his tool will allow users to rapidly integrate custom hardware into their vehicle without having to drill a hole in the dashboard for a physical control.

But if you’re the kind of person who doesn’t like to have things done for them (a safe bet, since you’re reading Hackaday), don’t worry. [TJ] starts off his write-up with an overview of how you can read and parse CAN messages on the Arduino with the MCP2515 chip. He breaks his sample Sketch down line by line explaining how it all works so that even if you’ve never touched an Arduino before, you should be able to get the gist of what’s going on.

As it turns out, reading messages on the CAN bus and acting on them is fairly straightforward. The tricky part is figuring out what you’re looking for. That’s where the code [TJ] is working on comes in. Rather than having to manually examine all the messages passing through the network and trying to ascertain what they correspond to, his program listens while the user repeatedly presses the button they want to identify. With enough samples, the code can home in on the proper CAN ID automatically.

The upside to all this is that you can activate aftermarket functions or hardware with your vehicle’s existing controls. Need an example? Check out the forward-looking camera that [TJ] added to his his 2017 Chevy Cruze using the same techniques.

Continue reading “Developing An Automatic Tool For CAN Bus Hacking”

An Epic Tale Of Thermistors: Tricks For Much Better Temperature Sensing

For years [Edward] has been building professional grade underwater sensing nodes at prices approachable for an interested individual without a government grant. An important component of these is temperature, and he has been on a quest to get the highest accuracy temperature readings from whatever parts hit that sweet optimum between cost and complexity. First there were traditional temperature sensor ICs, but after deploying numerous nodes [Edward] was running into the limit of their accuracy. Could he use clever code and circuitry to get better results? The short answer is yes, but the long answer is a many part series of posts starting in 2016 detailing [Edward]’s exploration to get there.

Orange is 12 bits, red is 24

The first step is a thermistor, a conceptually simple device: resistance varies with temperature (seriously, how much more simple can a sensor get?). You can measure them by tapping the center of a voltage divider the same way you’d measure any other resistance, but [Edward] had discarded this idea because the naive approach combined with his Arduino’s 10 bit ADC yielded resolution too poor to be worthwhile for his needs. But by using the right analog reference voltage and adjusting the voltage divider he could get a 20x improvement in resolution, down to 0.05°C in the relevant temperature range. This and more is the subject of the first post.

What comes next? Oversampling. Apparently fueled by a project featured on Hackaday back in 2015 [Edward] embarked on a journey to applying it to his thermistor problem. To quote [Edward] directly, to get “n extra bits of resolution, you need to read the ADC four to the power of n times”. Three bits gives about an order of magnitude better resolution. This effectively lets you resolve signals smaller than a single sample but only if there is some jitter in the signal you’re measuring. Reading the same analog line with no perturbation gives no benefit. The rest of the post deals with the process of artificially perturbing the signal, which turns out to be significantly complex, but the result is roughly 16 bit accuracy from a 10 bit ADC!

What’s the upside? High quality sensor readings from a few passives and a cheap Arduino. If that’s your jam check out this excellent series when designing your next sensing project!

Mind Poetry Mindflex Hack

Project Perceives Pondering, Prints Poetry

If poetry is your thing, this hack might convince you that your brain is more advanced than the rest of us poor sots. [Roni Brandini] designed a system that prints lines of poetry when you concentrate. The Mind Poetry project uses an EEG headset from Mattel’s Mindflex toy and pipes your brain’s signals to an Arduino Mega 2560. The system then looks for patterns of brain waves that indicate concentration. As you maintain your concentration, the system continues to print lines of poetry to a small display.

Tapping into the mindflex

[Roni] follows the standard Mindflex hack process by tapping into the data transmission pin on the Mindflex board. Optoisolation is provided by a PC817 to make sure wall power can’t accidentally bleed over into your own wetware. You could get away with just using batteries, but isolation is still a best practice.

The Arduino Brain Library is used to decipher the signal. The Mindflex picks up brain waves from roughly 1 Hz to 50 Hz, which is enough bandwidth to approximately determine mental state. For example, Theta waves are in the 4 Hz to 7 Hz range and can indicate a relaxed, meditative state. Low Beta waves range from 13 Hz to 17 Hz and indicate an alert, focused mental state. The Mindflex system is also generous in that it provides derived meditation and attention scores, ranging from 0 to 100.

It’s difficult to get a high level of precision with this sensor and sampling system, so the code uses [Roni]’s custom recipe of meditation score, attention score, and Low Beta value. He finds it most effective to trigger actions based on a relationship of these scores instead of focusing on the readings themselves. For example, an uptick in both Low Beta waves and the attention score indicate concentration.

Mindflex Brainwave Chart

If the wearer is concentrating, the system prints lines of poetry to the display and charts the three values. As an added gamification, it’ll tell you how many times you broke concentration before you completed the poem. One can imagine a game that tries to break concentration by printing other phrases or even activating an array of mechanical distractions.

If poetry isn’t your thing, you’re in luck. The “Mind Poetry” project also makes some headway (pun intended) with processing the EEG headset’s signals and triggering actions This means you don’t have to be into the poetry scene to reap the benefits. You now have the bones of a hack that lets you control things with your brain muscles and without your muscle muscles.

For inspiration, check out some other Mindflex hacks that let you order drinks with your mind (recommended), shock the heck out of people (not recommended), or even move around your skirt (uh… you do you?).

Continue reading “Project Perceives Pondering, Prints Poetry”

The Arduboy, Ported To Desktop And Back Again

A neat little hacker project that’s flying off the workbenches recently is the Arduboy. This tiny game console looks like a miniaturized version of the O.G. Game Boy, but it is explicitly designed to be hacked. It’s basically an Arduino board with a display and a few buttons, anyway.

[rv6502] got their hands on an Arduboy and realized that while there were some 3D games, there was nothing that had filled polygons, or really anything resembling a modern 3D engine. This had to be rectified, and the result is pretty close to Star Fox on a microcontroller.

This project began with a simple test on the Arduboy to see if it would be even possible to render 3D objects at any reasonable speed. This test was just a rotating cube, and everything looked good. Then began a long process of figuring out how fast the engine could go, what kind of display would suit the OLED best, and how to interact in a 3D world with limited controls.

Considering this is a fairly significant engineering project, the fastest way to produce code isn’t to debug code on a microcontroller. This project demanded a native PC port, so all the testing could happen on the PC without having to program the Flash every time. That allowed [rv] to throw out the Arduino IDE and USB library; if you’re writing everything on a PC and only uploading a hex file to a microcontroller at the end, you simply don’t need it.

One of the significant advances of the graphics capability of the Arduboy comes from exploring the addressing modes of the OLED. By default, the display is in a ‘horizontal mode’ which works for 2D blitting, but not for rasterizing polygons. The ‘vertical addressing mode’, on the other hand, allows for a block of memory, 8 x 128 bytes, that maps directly to the display. Shove those bytes over, and there’s no math necessary to display an image.

This is, simply, one of the best software development builds we’ve seen. It’s full of clever tricks (like simply not doing math if you’ll never need the result) and stuffing animations into far fewer bytes than you would expect. You can check out the demo video below.

Continue reading “The Arduboy, Ported To Desktop And Back Again”

Phase Shift Pump Control? There’s An App For That.

The sort of pumps used in the filtration systems of fountains and swimming pools don’t take kindly to running dry. So putting such a pump on a simple timer to run while you’re away comes with a certain level of risk: if the pump runs out of water while you’re gone, you might come home to a melted mess. One possible solution is a float sensor to detect the water level in whatever you’re trying to pump, but that can get complicated when you’re talking about something as large as a pool.

For his entry into the 2019 Hackaday Prize, [Luc Brun] is working on controller that can detect when the pump is running dry by monitoring the phase shift between voltage and current. With an inductive load like a pump, the current should lag behind the AC voltage a bit under normal operation. But if they become too far out of phase with each other, that’s a sign that the pump is running in a no-load condition because there’s no water to slow it down.

As [Luc] explains in the project write-up, simply monitoring the pump’s peak current could work, but it would be less reliable. The problem is that different motors have different current consumptions, so unless you calibrated the controller to the specific load it’s protecting, you could get false readings. But the relationship between current and voltage should remain fairly consistent between different motors.

The controller is powered by a Arduino Nano and uses a ACS712 current sensor to take phase measurements. Since he had the ability to toggle the pump on and off with a relay attached to the Arduino, [Luc] decided to add in a few other features. The addition of a DS1307 Real Time Clock means the pump can be run on a schedule, and an HC-05 Bluetooth module lets him monitor the whole system from his smartphone with an Android application he developed.

Since the theme of this year’s Hackaday Prize is designing a product rather than a one-off build, judges will be looking for exactly the sort of forward thinking that [Luc] has demonstrated here. As the controller is currently a mass of individual modules held inside a waterproof enclosure, the next steps for this project will likely be the finalization of the hardware design and the production of a custom PCB.

An Arduino Sickbay Display Worthy Of The Enterprise

The various displays and interfaces in Star Trek, especially The Original Series, were intentionally designed to be obtuse and overly complex so they would appear futuristic to the audience. If you can figure out how Sulu was able to fly the Enterprise with an array of unlabeled buttons and rocker switches, we’d love to hear it. But one area of the ship where this abstract design aesthetic was backed off a bit was sickbay, as presumably they wanted the audience to be able to understand at a glance whether or not Kirk or Spock were going to pull through their latest brush with death (spoilers: they’re fine).

For his latest project, [XTronical] has recreated the classic displays from Dr McCoy’s sickbay with an Arduino Nano and a 2.8 inch LCD display. It even has a speaker and MP3 player module to recreate the “heartbeat” sound from the original show. The whole thing looks and sounds phenomenal, and would be a perfect desk toy for the classic Trek aficionado. But this isn’t just a toy, it’s a fully functional medical scanner.

Of course, this little gadget can’t tell you if you’ve come down with a nasty case of Rigellian fever, but it can read your vitals using a MAX30100 pulse oximeter module and DS18B20 thermometer. In fact, it actually has two DS18B20 sensors: one to measure ambient temperature, the other to measure skin temperature. With those two figures, [XTronical] says it can calculate your core body temperature. The only thing that’s made up is the blinking “Respiration” indicator, that one’s just an estimate.

So where do we go from here? This project is presented as merely the first step in building a complete prop, perhaps in the form of a medical tricorder. We’ve seen some phenomenal TOS tricorder builds over the years, and some have even used the Raspberry Pi to shoehorn a bit of functionality into them. [XTronical] says he’s working on getting the source code and a step-by-step build guide put together, so keep an eye out for that in the near future.

Continue reading “An Arduino Sickbay Display Worthy Of The Enterprise”