Anagrhash, a anagram generator & reverse hash searching tool

Anagrhash is a tool which can generate anagrams, and test them against a hash.

It is a tool I wrote many years ago for educative purposes, to try out some different concurrency models and inter-thread communication methods in C, and get some basics of programming in the GNU/Linux environment.

It serves as an anagram generator, and can shuffle letters, but can also be set to shuffle whole words in a sentence, use tokens from a list (words which you don’t want to appear simultaneously), and specify separators between tokens (like spaces or commas).

It can also test anagrams which satisfies an exact target hash, or a hash specified with a regular expression.

You can get it on my GitHub page.

xboxdrv 0.8.8 for the Raspberry Pi Zero

If you, like me, have just found out that GameStop xbox360 controllers, even when they have the same BB070-B-EU model, from the same shop, same look, same everything, … but they happen to have different chipsets, and not all of them work properly with xboxdrv 0.8.5; you might appreciate an update from the version which is offered in the Raspbian repositories.

In my case, the incompatible model was showing up with magic numbers 0e6f:0401 in `lsusb`. The GameStop xbox360 controllers which works with xboxdrv 0.8.5 shows up as 0e6f:0301.

Compiling it took quite a long time (about two hours), so here’s a precompiled package. You can get xboxdrv 0.8.8 in a .deb package for ARM here.

2€ charger for any kind of lithium-ion battery

Lithium-ion batteries are everywhere and they are awesome also for hobbyist projects. I’ve been tempted more than once to use old smartphone batteries in my projects, but recharging them might be a problem.

Well, this time I tried my hand at recharging small coin-cells like the LiR2032. I’ve been looking around for commercial chargers, but they seem to be kind of unpopular. Turns out you can do one yourself with less than 2€.wpid-wp-1448223544369.jpeg

The TP4056 (datasheet here) is a little IC which serves the purpose perfectly and currently it can be found on dx.com along with an additional protection circuit for 1.57€. However, this version comes pre-packaged to work with bigger batteries (>1000 mAh) and shouldn’t be used with coin-cells. Lets see why.

The difference lies basically in the charger’s maximum charging current. The previously linked TP4056 uses 1A maximum current, but LiR2032 datasheet recommends a maximum of 35mA. This current is regulated by a resistor placed between pin2 and ground on the charger (which on this board is called R1 and has a value of 1.2kohms). So, looking at the datasheet and doing the maths it turns out a resistance of about 35kohm is needed.

wpid-wp-1448223759418.jpeg

Okay. let’s go. I used

  • the TP4056 board,
  • a coin cell battery holder,
  • a 47Kohm resistor
  • a 10cm ribbon
  • some pin headers, wire, PCB and soldering

The assembling is quite straightforward, I just cut the PCB to size, mounted the TP4056 board on male pin headers, and mounted the coin cell holder over the ribbon, which I added for easier removal of the battery.

I didn’t have a 35Kohm SMD resistor available, so I replaced the old one with a “regular” 47Kohm resistor. Charging will be slower, but basically the slower the better. Soldering was doable although not trivial, a good set of pliers and tweezers definitely did help.

wpid-wp-1448223735401.jpeg

I soldered the wiring on the back… double check for correct polarity.

wpid-wp-1448223555468.jpeg

And voila. Charging an almost completely drained out battery took about 3 hours, during which all the assembly stayed at room temperature (based on a very accurate measurement with my fingers). Green light means charging done.

wpid-wp-1448226374328.jpeg

I still have to figure out exactly how to use this thing with bigger batteries, the main issue being find a way to keep the battery still. This is probably not going to be trivial since Li-ion batteries tend to come in every shape and size. Maybe I could use cable ties or rubber bands… I’m taking suggestions!

The online replacement vs repair decision helper

I wrote this tool to help decision-making when you have have to repair or replace something.
It uses a pair of jeans as an example, but it’s meant to be generic. Just replace its parameters and let it calculate.

(I’m assuming as a currency and one as a time unit.
I also assume a %/year growth rate of your assets.)

You are thinking about replacing a:
You have owned pair of jeans for: year(s)
Replacing the pair of jeans would cost you: $
Your pair of jeans is costing you in repairs: $ / year
While the pair of jeans is undergoing repairs, you have a backup plan which costs you: $ / year
Do you feel the pair of jeans at risk of a major, catastrophic, sudden failure?
Not really.
Possibly… but maybe an ice cream would cheer me up again. (+5 $ / year)
I think I’ll have to pay a couple of fine dinners if that happens. (+50 $ / year)
Well, that would cost me about $.
Would a new pair of jeans have significant advantages, or technological advancements, over the old one?
Not really. I’m kind of emotionally bonded to the old one.
For starters, it wouldn’t look old. (+15% value over the old one.)
It has an improvement or two. (+30% value over the old one.)
The new one is way better! (+% value over the old one.)

Bluetooth low-energy temperature beacon using the nRF24L01: cheap and compatible with existing smartphone apps!

The reason I did this project is because I have a slight overheating issue in a server room; I was wondering if there would be some way to check another room’s temperature from my desk. That’s how I came up with a “wireless thermometer” that can send readings to my Android phone, and my colleagues can use it too!

You might have heard about the nRF24L01: it is a cheap (0.80€) radio frequency module that, back in 2013, Dmitry Grinberg was able to use to “fake” a BTLE beacon. Real Bluetooth 4.0 modules are, nowadays, about 5€ each.

I wondered if I could use it to make a BTLE compatible temperature beacon. Turns out there are 3 major BTLE beacon protocols: iBeacon (by Apple), Eddystone (by Google), and AltBeacon (by Radius Networks). And well, none of them can be emulated with the nRF24L01, since it is only able to send a 16-byte payload (among other limitations), and all three of those protocols require bigger PDUs.

BUT!!! Although I didn’t find a name for it, Nordic Semiconductors Bluetooth ICs (namely the nRF8001 and nRF51822) have their own protocol they use to send telemetry data (which means: temperature, battery level and device ID); turns out this protocol is simple enough to be emulated by the nRF24L01 as well, although with some limitations. They also are so nice to distribute a suite of Android and iOS apps to work with them; the most relevant apps are nRF Master Control Panel (useful for debugging BTLE devices) and nRF Temp 2.0 (a temperature logger; I think it was meant to track device overheating, but hey). You can also download the source code from the app page!

wpid-wp-1444076649110.jpeg  wpid-wp-1444076692964.jpeg
However, the temperature in my room is quite boring, as shown from those screenshots of Nordic Semiconductors apps. (nRF Master Control Panel on the left, nRF Temp 2.0 on the right).

The temperature beacon hardware is very simple. Just wire up your microcontroller to a nRF24L01 and a temperature sensor of your choice (I used a DHT11 I had lying around).

wpid-wp-1444076633700.jpegIt’s more about how you wire them up, I guess.

 rf24-pin
(fabacademy.org)

  1.  GND -> GND on the Arduino
  2. VCC -> 3.3v on the Arduino
  3. CE -> PIN 9 (see below)
  4. CSN -> PIN 10 (see below)
  5. SCK -> PIN 13 on the Arduino Uno
  6. MOSI -> PIN 11 on the Arduino Uno
  7. MISO -> PIN 12 on the Arduino Uno
  8. IRQ -> not used

Be especially careful about the power pin: altough the nRF24L01 can work with your 5v Arduino, you must power it at 3.3v!

While SCK/MOSI/MISO are pretty much wired to 13-11-12 pins in order to use SPI, CE and CSN can be moved to a pin of your choice.

About the DHT11, just wire its output pin to A0, and the other two to ground/+5v.

On the software side, I did a couple modifications on floe’s BTLE library to allow mimicking of the nRF8001 and nRF51822; you can find the BTLE library here. With this library, you can now create your temperature beacon. (Notice I used pins 9 and 10 as CE and CSN, as mentioned previously).

Did you know? Most Arduinos have an onboard temperature sensor! The reasoning behind this probably is that a device malfunction would overheat it. Unfortunately this can’t be easily used as an ambient temperature sensor, because the chip temperature is widely influenced by its heat dissipation. That’s why I used a DHT11. (You can read more about this on Arduino Playground here).

Among other limitations, this setup is not able to use more than 3 of the 40 BT 4.0 channels, and broadcast a name longer than 8 characters (remember that 16 byte limit?). I’m pretty sure it could be used to broadcast the battery level as well.

Sadly, it does not seem somebody has thought of writing a standard protocol for broadcasting some other non-temperature parameter (atmosphere pressure, light, noise level, etc). To a certain extent, nRF Master Control Panel can be used to receive arbitrary data from the Arduino (as float or as integer value), but it’s not suitable for logging and combined with the 16 byte limit it’s quite limited (BT also has a 2 bytes overhead for every field you want to send, hence: 8 bytes device name + 4 bytes temperature + 2*2 bytes of overhead = 16 bytes). If I’m wrong, let me know!

I hope you enjoyed this article!

The knock-activated noisy box

This project was intended as a prank; when I was thinking about the uses of a knock sensor I thought it would be funny to use it to make a doorbell. The thing you see is a small box that produces a funny chirping noise when you knock or shake it. It is intended to be attached to a door, or some other moving object. Not really an Arduino project since it uses only basic electronic components, but still it was quite entertaining to make and it’s a chance to have fun with analog electronics!

I used:

  • a 6x4cm PCB (2.36″ x 1.578″) (obtained by cutting a bigger PCB)
  • one CR2032 coin cell battery
  • a ghetto coin cell battery holder… made out of a binder clip and some insulating tape
  • a KY031 knock sensor
  • a 470uF capacitor (the bigger the better, basically)
  • an active 5V buzzer
  • a very small project box I couldn’t find another use for (8x5x2cm, or 3.1x2x0.8″)
  • wire and soldering iron

The circuit itself is very simple. When you bump the knock sensor, the circuit closes; the capacitor is charged (very quickly) and then slowly discharges thru the buzzer. Note that the knock sensor usually has a digital output/pull-up pin which I’m not using: the 10k resistor it has attached would make the capacitor charge too slowly.

knock-activated-doorbell-schema

The assembly is quite straightforward or in other words I forgot to take pictures of the process.

wpid-wp-1443286858330.jpeg

This is the final circuit. As you can see I used a binder clip for lack of a better coin cell holder… I stole the idea from here. Then I soldered the clip to the PCB. I tried to leave some room in front of the battery to make replacement easier. The cables go from the battery to the back.

wpid-wp-1443286862974.jpeg

The wires on the back make the soldering quite easy. Just solder the knock sensor in series to everything else (green wire – going to ground on the other side), and the capacitor and buzzer (bottom left) together in parallel. Double check the capacitor polarity (red wire goes to Vcc on the other side). I used velcro to attach the PCB to the box; very handy if you, like me, never have available screws of the right size.

wpid-wp-1443286865931.jpeg

The box is just of the right size for the half PCB.

wpid-wp-1443286852087.jpeg

They couldn’t fit any better.

wpid-wp-1443286868985.jpeg

As I mentioned, the box is very small, almost matchbox-sized. The idea is to glue it (maybe with velcro, I like that stuff) to a door or another moving object you want to produce a “pew” sound when you knock or move it.

Some things I learned today:

  • Maybe I should buy a proper coin cell holder.
  • If nothing else, I should have mounted the ghetto holder the other way around.
  • Wires are best cut at the exact length you need them.
  • The KY031 is REALLY poorly sensitive, you have to shake it really hard. They should call it the car crash sensor or the ground-reached-after-freefall sensor or the shake-as-hard-as-you-can sensor or something. It has a very very precise impact angle at which it is somewhat sensitive. I should get a more sensitive vibration sensor, I’ve been looking around and afaik you have these alternatives:

Anyway, the final result for this article is this weird bleeping thing! I hope you enjoyed it!

Testing the 111701, a cheap DC-DC booster module for Arduino

wpid-wp-1438841736564.jpeg

The 111701 is a DC-DC switching booster module that can handle an input between 1 and 5V, and has a fixed output of 5V. It can be found on dx.com and it is the cheapest switching module of its kind I could find, currently priced at 1.47€. Unfortunately I couldn’t find any docs about this module, so here is some of my tests.

The first thing to know about this module is: never reverse the polarity. Things get really hot really fast.

Some specs I gathered:

  • Size: 2.6 cm x 1.8 cm x 0.6 cm
  • Input: 1-5V
  • Output: 5-5.36V (see below)
  • Max output current: rated for 600mA (unconfirmed, maximum I got is 420mA for now)

The board also has two screw mounts, not sure about the size (surely less than 3mm, probably 2.5mm). The screws are meant to mount a female USB connector. The board also offers D+ and D- pins for USB purposes; they aren’t wired to anything.

By using 4xAA batteries I measured an input voltage of 5.15V and an output of 5.36V. This might not be a problem depending on your need. Using a single AA battery (input 1.24V) yields a perfect 5.00V. Below is a chart of the input/output voltage I measured.

111701_grafico

InconTRAMi, a “route planner for meeting points” with Milan public transports.

preview_incontrami

InconTRAMi is a route planner for Milan’s public transports network ATM, differently from “usual” route planners it will try to find the best meeting points for two persons. By inputing your starting points, it will show the more easily reachable places for both persons. By moving the mouse over the map it will show which lines will permit you to reach that place.

Short usage policy: it is very experimental, I decline every responsibility coming from the use or misuse of it. It considers just ATM’s network; it doesn’t consider line hopping; the data it’s using may be not up to date. It uses data kindly made available by Comune di Milano. See the application page for the full policy (in italian).

The source code is available on GitHub.

p.s. “route planner for meeting points” is a horrible name, I’m taking suggestions.

 

The Arduino Pro Mini, the Baite BTE13-010, and the ultra low power consumption I achieved thanks to new programming tools

Please welcome my latest programming tool, the Arduino Power Cutter:

IMG_20150726_232059

The BTE13-010 is a cheap Chinese clone of the Arduino Pro Mini, manufactured by Baite, which can be found from their Aliexpress store (among other places). The internets and the producer are unfortunately lacking much documentation about it.

Today I was trying to achieve a very low power consumption on the BTE13-010. You might already have had a look to popular pages when it comes to power saving on the Arduino, two popular ones being Power saving techniques for microprocessors on Gammon Forum and Arduino sleep mode basics on EngBlaze.

However, at first I struggled to achieve the promised great savings, possibly because I was using the BTE13-010 instead of rebuilding a circuit from scratch, like many of them suggest?

To make a long story short, after browsing everywhere, I came up with these two subroutines that will cut (no pun intended) through your power consumption:

The power_saving_init() should be the first thing to be called at setup(), it will initialize all your pins to LOW. power_saving_sleep() will put everything to sleep, and wake up every 8 seconds. With these two, with the regular board (no bootloader modifications, with the power regulator on, etc) when sleeping I was able to achieve 3.24mA of power consumption, which is already pretty good considering it was draining about 10.2mA when fully powered on in the first place.

(I also tried to change the board internal clock with avrdude options, but that didn’t seem to be possible on this board. I also tried to clock it down via clock_prescale_set(), but nothing was gained).

But it doesn’t end here! That’s were the Power Cutter comes in. Thanks to Talpa PCB retrace of the BTE13-010 I was able to elaborate an evil power saving plan:

arduino_cutting

[Credits for this picture to Talpa, with a few corrections/additions by me]

With a cutter, I was able to cut (pun intended) thru power consumption by cutting the two traces in the picture (in light blue in the upper right), thus phisically cutting out the power LED and the regulation circuit (I wasn’t using that regulator anyway, both USB power and my batteries bypass it). The LED and the regulator were draining about 0.47mA and 2.44mA respectively. Note to adventurers: always check with a multimeter before and after attempting to cut traces.

Without those two components, my power consumption went down to 4uA.

For best results, use batteries with low self-discharge rates, like coin cell! AA batteries can have discharge rates up to 30 mA, it’s a lot!

Let me know your thoughts in the comments!