Archive for the ‘Electronics’ Category

Controlling Opal branded wireless electrical socket

The weather is getting so cold currently that the cars heater needs to be turned on for more than an hour. Since I don’t want to wake up any earlier than possible, I went to get a socket that could be remotely timed. I found Belking Wemo switch, but unfortunately it proved to be an utter waste of money. The configuration software is extremely poor and the device refused to connect to my homes access point no matter what I tried.

I had previously bought cheap sockets with a remote. These were branded “Opal” and cost next to nothing in a pack of two sockets and one remote and they seem to work well enough. Only minus was the strange 12v battery the remote uses.


Socket, front

I popped open the remote to check how it worked. The layout seems to be easy enough. The +12v from the battery is dropped to +5v for the microcontrolled under the epoxy blob. The controller scans the keypad and generates the code which is fed to RF part. The RF transmitter requires the +12v straight from the battery and operates in 433 MHz frequency. I cut the signal trace from the controller to the transmitter and soldered wires to the test pad in the signal trace and the ground. Using the oscilloscope I checked what the controller is outputting when the keys are pressed.

Read more…

Autoleveling with proximity sensor

24/12/2015 3 comments

Geeetech G2S

I have a Geeetech G2S 3D-printer, which features autoleveling out of the box. Unfortunately the autoleveling is pretty much a joke, consisting of piece of bended wire and a microswitch. Due to the wire flexing, the probe will get different values when the head is moving from left to right than from right to left.


Inductive proximity sensor

I saw someone experimenting with the inductive proximity sensor for autoleveling. These sensors are usually used in applications like limit switches in the garage door openers. They aren’t designed for accuracy and thus I was a bit skeptic how it would work out. The sensors only detect metals, but for G2S it’s not an issue as it has a steel heat bed. Out of recommendation, I bought LJ18A3-8-Z/BX sensor from eBay. The benefit of this type of a sensor is the long detection range, which allows to position the sensor higher than the print head. This way there’s no need to manually lower and raise the sensor before starting the print. The downside is that the sensor needs +12v and also outputs the same voltage, so it can’t be directly connected to the endstop connector.

Read more…

Categories: 3D Printing, Electronics

Giving Kyosho iReceiver unlimited range*

15/03/2015 3 comments

Kyosho EP Blizzard SR

Screen Shot 2015-03-15 at 13.17.24

iReceiver (c) Kyosho

A while ago I bought a version of Kyosho Blizzard, which features the new iReceiver which lets you control standard servos and ESC’s with your tablet or mobile phone. There’s also a camera fixed to Blizzard’s fuselage for streaming video. I didn’t have high expectations about the video performance but for the video the range is really poor. For controlling, the range is what you would expect for wi-fi device, about 50 m. The application however stops streaming the video as soon as it detects even a slight packet loss, which generally happens after 20 m. The thought arose, that since mobile networks are nearly ubiquitous, how about tunneling the traffic via 3g connection?

Read more…

Thesis audiobook aka. Thesis grenade

Thesis grenade, almost finished
Thesis audiobook, contents missing


As a good friend of mine, Ville Kotimäki (who is also an excellent photographer btw) just finished his PhD, some figuring out some present to give was in order. I got an idea to machine some really solid piece out of aluminum and engrave it with text. I also wanted it to play something, as it seems to be a recurring theme for me.

The initial idea was to build a fire alarm siren inside an aluminum container, which would be welded shut and would only have ON button, but no means to turn it off. The idea was shortly scratched because also I would have to listen to it. The second iteration was to make the container read out the thesis like an audiobook.


Fortunately I managed to recruit my friend Heikki to do all the laborious tasks. We started by downloading the thesis pdf. The pdf was converted to text and Heikki did they most annoying part of the project by cleaning the text files from badly converted items like equations, picture captions and tables etc. In the meanwhile I tried a few different speech synthesis programs. I would have liked to use some open source software, but most of them sounded like Stephen Hawking on a bad day.

The commercial Nuance was far superior to everything else I tried. Nobody seemed to have a license for it but there is a nifty feature in OS X that it has text to speech support by Nuance and from system preferences menu you can even download additional voices from Nuance. Heikki proceeded to write a script, which splits the text file to single pages. These pages are then converted to speech with “say” command in OS X and resulting AIFF files are converted to WAV files suitable for wav library we used in Arduino.


The container itself was first drafted on a piece of paper. The measurements were dictated by the speaker we used (diameter 66mm) and the fact that on the inside there are speaker, 9v battery and power switch on top of each other. My brother machined the container shape from solid aluminum with a manual lathe from the drawing. Engraving and machining of the legs and drilling the bottom to let the sound out was designed with Alphacam software and machined with Haas UMC-750 5-axis machining center at my company G-Tronic.

I thought the engraving would be an easy job with Alphacam , but it turned out that the post processor which generates code for the machining center from cad drawing had a few nasty bugs resulting the tool occasionally to go through the work piece. Eventually I had to resort the help of professional machinists at the company, but (or because of that) the finished product looks great! The black effect on text is achieved by coloring it over with a black sharpie and wiping it over with a tissue dipped in acetone.


The schematic for the device is really simple. SD-card is connected in parallel with ISP interface to ATMega328p. Since SD-cards operate with 3.3v voltage, LM328 regulator drops voltage from 9v battery to 3.3v. BC547 transistor acts as a extremely simple audio amplifier, switching 9v voltage to speaker commanded by processors pwm output. Not and audiophile solution but works surprisingly well in this case. Since Heikki wanted to learn some electronics, I just drew the schematic in Eagle and left him the job of figuring parts arrangement on the stripboard and soldering the parts together.

We had a great trouble with the first version. We tried to use LD1117V33 fixed voltage regulator. When measured, it outputted solid 3.3v but the ATMega just would not start to execute the code. The thing worked without problems when powered with PSU. Only explanation I can think about is that the regulator starts to oscillate, but when we checked the output with oscilloscope, there was nothing obvious visible. In the end we exchanged the regulator with trusty old LM328 and the problems went away. The circuit draws about 170 mA, which translates to roughly 3h of usage from 9v battery, but we figured out that no sane person wants to listen this for more than couple of minutes at the time. Note that the connector SV2 pinout is not the same than SD-card pinout! For example how to connect the SD-Card to avr, see here.


The firmware itself is quite straightforward, the only difficulty was the user interface since there is only a power button and we did not want the device to start at the beginning of the book each time. We also wanted a couple of different voices to read the book. On the SD-card, audio files are saved with file name pattern <page (number)>-<voice (number)>.wav. When the device is turned on, it randomizes one of the three voices to use. Each time it finishes playing one page (one file), it saves the next page number to eeprom memory. When device is turned on, it starts to play from the saved page. If the device is turned off before it finishes to play back one page, the counter resets to the beginning of the book. There’s even a nifty page turn sound saved in every other file.

When we initially tested the setup on Arduino UNO board, we used TMRPCM library. It worked well, but on the final hardware, we used the internal 8MHz oscillator instead of 16MHz crystal and found out that the library does not support other that 16MHz clock speed. We changed the library to superior SimpleSDAudio, which enabled us to use 31.250 kHz sampling rate @ 8 Mhz. The library seemed also to have smaller compiled size, but that was irrelevant to us since we are only using 10k of 32k code space.


I was really happy with the finished device. Some Ville’s friend dubbed the device to “Thesis Grenade”, which is quite accurate by the looks of it =) The video below is a little bit repetitive, I tried to demonstrate the different voices used, but the random generator decided to use one same voice for many times.

Timestamp support for OpenLog

OpenLog board

OpenLog board (Image) © Sparkfun

I needed a tool that can play back recorded serial stream “in real time”, so that the playback perfectly reflects the stream that was originally sent. Rather than building my own, OpenLog project seemed to be a perfect starting point. The board itself is very small, about the size of a micro-sd socket that is on the bottom of the board. By default the device records serial data received to standard ftdi-pinout serial port. The device is Arduino UNO compatible and code can be compiled and uploaded with the Arduino IDE. The device is configured by editing CONFIG.TXT file on the sd-card. If the file is not present on the card, the device creates one with default settings at the startup.

Example of config file:


As you can see, I added the timestamp option at the end. If this option is enabled, each received byte in the log file is prefixed with 4-byte unsigned long timestamp. The timestamp is in little endian order and in milliseconds. Unsigned long type provides about 55 days before counter rolls over. The value can be decoded for example in python with struct.unpack function:

buf =
timestamp = struct.unpack("<L", buf)[0]
char =

The logged files will be four times larger than without timestamping, but with large sd-cards this does not really make a difference. I quickly tested the performance and the device still seemed to be able to log the data without data drops at 115200 bps speed.

The modified codes are in my git repository:
I also made a pull request to the official repository, but let’s see will they accept it.

The python script that plays back the stream in real time can be found from the examples folder.

Categories: Electronics Tags: , , ,

DIY Remote shutter release for Samsung NX-series cameras

30/04/2013 169 comments

I’m using Samsung NX1000 for aerial photography. The camera has a nifty feature of using smartphone as a remote viewfinder and shutter release but unfortunately the good idea is watered by buggy and limited program and the feature freezes the whole camera all too often. Fortunately there is a simple way of triggering the shutter via cameras usb-port. The trick is to have 68K resistor between ID and GND pins. After this USB data lines can be used to trigger camera focus and shutter.



Tip: If you have spare micro-usb cables, it’s easy to source a connector from the cable that came with the camera. Just squeeze black plastic around the connector with a pliers and the plastic casing will crack open exposing the connector. The connector on the cable has a small pcb, which makes it easy to solder the required resistor in place. If you use smd resistor, the casing can even be reassembled.

The cable described above works fine for manual use, but to use the camera for aerial photography some interface for rc receiver is needed. Fortunately this is easily achieved with a small arduino program, which reads pwm value from receiver servo port and then pulls either shutter or focus line low based on channel value. The compiled code size is under two kilobytes, so it’s possible to use small and inexpensive microcontroller like AtTiny2313.


RC interface for camera

The schematics and sources can be found at:

Compatible with (at least) following models: NX20, NX210, NX1000, NX1100 and NX2000

Update: If you don’t want to make your own, I’m selling these ready made. Just drop me a message.

Shutter PCB's

Shutter PCB’s

Showing APM telemetry data on Hitec Aurora’s screen (3rd edition)

28/02/2013 31 comments

This is the latest iteration of ArdupilotMega to Hitec telemetry adapter. This version does not require changes to APM code anymore, but instead functions as a standalone device. Displayed information has been changed a little bit, here’s the current mapping:

RPM 1 Distance to home
RPM 2 Airspeed
TEMP 1 Battery remaining (%)
TEMP 2 Throttle position
TEMP 3 Variometer (climb / sink rate)
TEMP 4 Armed status (1 = Armed)

It’s possible to rename the fields in Aurora like this:

Fixed fields (sat count, speed, altitude etc.) function as expected. Only thing that does not work is the date and time. Sadly it’s not possible any more to display “mAh used”, since as far as I can see there is not way to subscribe to that information in APM. I wonder if anybody opposes if I’d add MAVLINK message for that. Of course if you always use same capacity batteries this is not a problem, because you can check battery remaining reading from TEMP1, but since I have many different types of batteries, I’d need to change battery capacity parameter before each flight.

It’s possible to customize displayed data by airframe type, for example airspeed and variometer are probably not interesting to copter users, whereas Armed and heading might be. If you have suggestions, please tell me!

The adapter itself is simple and small. I designed PCB this time with SMD components this time to make it smaller. SAMSUNG CSCThe adapter connects to APM telemetry port and has a pass through to radio. When the adapter is powered up, it sends messages to APM to subscribe data feeds. When APM starts to send all the requested streams, adapter turns it’s UART off to avoid disturbing telemetry communication. There’s a place to mount fet on the top side of board to connect video transmitter power after adapter detects GPS fix. I added this feature since if I have my video tx on, getting GPS fix takes for ages.

I tried to save few euros by choosing ATMega168p as a processor since the code takes only 11KB, but I quickly found out that MAVLINK message handling uses a good amount of ram, so I changed MCU type to ATMega328p to schematic. It’s still possible to use 168, if you define MAVLINK_MAX_PAYLOAD_LEN to 35. Any smaller makes it impossible to receive position message and any larger crashed the program. Compile with 8MHz clock speed and when programming, check that “Divide clock by 8” fuse on low fuse word is not programmed.



Sources and Eagle files are uploaded to Github:

Now if I only could get my hands on some different brand radios (Spectrum, Futaba, Graupner…) I could try to make this adapter universal!

Have fun and tell me what you think!

Edit 1: I think I know now how to get the same system to work with Spektrum, but the problem is that I only have Hitec system. If somebody want’s to borrow me Spektrum radio, I can participate to costs.

Update: I have now professionally made PCB’s available if you want to buy these from me ready made

APM adapter

APM adapter

Categories: Electronics, FPV Tags: , , , ,

Get every new post delivered to your Inbox.

Join 30 other followers