Notice: we will be closed on Friday April 19. See our blog for notices regarding shipping and local pickup orders.


December 20, 2018


Posted in microbit, rh, xmas

Micro:Bit 2 player Christmas Messenger

Merry Christmas from Elmwood !

Here's a very silly two player game for two Micro:Bits to message each other holiday icons. 

You can

Press A to send a Christmas Tree with a blinking light.

Press B to send a Grinch Face. 

Press A + B to send a heart.  


Shake the Micro:Bit to send a hug. 

To the other Micro:Bit !

You can use this to make a Rock Paper Scissors type guessing game, or make up your own rules ! 


Both Micro:Bits will need to have the same HEX file on them

Enjoy !

December 10, 2018


Posted in

Christmas 2018 shipping guidelines

Hard to believe, but Christmas is only 2 weeks away!

Here are some guidelines to make sure your orders get to you in time for Christmas

  • Check out the below example showing actual rates for a package shipping to Vancouver from Toronto.  Notice that some of the options show how many business days to expect for shipping.  This is very important to factor.  Note that the number of days does not necessarily constitute a guarantee.  To be safe, you'll probably want to add 1 business day in your calculations.
  • Do not select "Small and Light" and have any expectation of getting it for Christmas.  You might get it, you might not, we have zero control over it.
  • UPS is picking up from us super early these days.  So get your order in no later than 11:00 AM Eastern time for it to go out the same day, assuming everything is in stock.  Canada Post continues to pickup later in the day, so orders placed by 3:00 PM will go out that day.
  • Pre-Order items are taking longer than usual to get to us, count on 7 to 10 days.  If you really need something fast, contact us via email and we will see if we can get it quicker.
  • Lastly, if you are worried about shipping, you can always pickup an Elmwood Electronics Gift Card!

December 10, 2018


Posted in cam m7, camera, openMV, rh

OpenMV Cam M7 first look

Initial setup guide & feature exploration for the OpenMV Cam M7

{ Will refer to the 'OpenMV Cam M7' as 'OMVC' from now on. }

Things you will need to start...

- OpenMV Cam M7
- microUSB to USB (normal) cable
- Male to Male pin Jumper wire
- MicroSD-Card 16gig or  32 gig

Go to and download the installer.
Testing done on Windows*

Install it. I know, not ANOTHER IDE, but this one is actually useful.

The OMVC documentation and tutorials are a locally installed website. This is something I am always happy about as inevitably I will be somewhere without wifi & need detailed pinout information. Eg. in a field setting up a remote motion capture wildlife photography rig, something the OMVC is a perfect device for. Offline documentation is also crucial if you like to periodically disconnect from the internet for productivity / sanity reasons.

First boot

Accept all the windows device driver pop-ups.

The OMVC internal memory (like Adafruit circuit python devices) will mount as an external usb drive. If you double click to open it, you can see the file on the internal board memory.

It is a good idea to read over the documentation to grasp the ways in which it operates as a usb flash drive. It's slightly different than your common expectations.

I've summarized some of the key points : 

  • OMVC only works with FAT.
  • Max readable SDHC card value is 32 gigs  
  • If the camera saves a picture to the SD Card while mounted on a pc... the PC won't see the photo without remounting the drive as it assumes USB flash drives can't magically create files on their own (which is usually true 99% of the time).

3 ways OMVC will mount as a USB device :

  1. Only internal on board memory (no SD Card) :  2 Megs
    Will appear as a standard USB drive.
    Contents will be '' 

  2. With MicroSD card inserted on board :
    To capture any images or video you have to insert a microSD card.
    You won't get a warning until the runtime file tries to save a file.
    This will now supplant the internal memory and be the default usb drive you see.
    When you plug in the OMVC, you will ***no longer see the internal 2 Meg memory*** mounted to the desktop. 
    Only the Camera SD Card will now mount to desktop. 

  3. DF Firmware update
    Should only appear when two specific jumper pins are shorted.
    Very similar to updating the firmware on an Adafruit GemmaM0 or CircuitPythonExpress.
    This isn't a drive you would write anything to directly. 

Now we've got that out of the way, let's launch the OpenMV IDE !

It will likely immediately ask you to update the firmware by shorting the BOOT / Reset pins on the device with a (male-male) jumper wire.

I held the jumpers on an angle to ensure contact, if you were going to be a perfectionist, using a dual headed pogo pin adapter would be a better idea.

Follow the prompts & make sure you have a handhold you can maintain for a few minutes.

The device will need to be unplugged and plugged back in again.

When dealing with micro-circuitry, I always remove the USB cable to the computer and LEAVE the device-end inserted at all times to reduce wear and tear on the delicate board joints.

The blue LED will now flash as the firmware is updated. I didn't time it exactly, but it felt like about 30mins to re-flash the firmware. Results may vary with USB 3.0, I used a 2.0 port.

Once that is all set, you can now open the IDE and open '' from the Example files.

Click Connect at the bottom left

The play arrow will now turn green. Click it. 

You will see the camera display on the top right of the IDE.

If not, click the arrow on the middle far right to expand the live preview & color histogram (Red Green Blue channel values).  

Let's have a look at some of the examples. 

I really have to emphasize how important reading the #comments are for each example file.

For decent results with recognition, you need good consistent lighting.

These photos are mostly screen capped from the IDE in Windows and enlarged < ENHANCE ! >, THEN compressed for the blog, so don't consider these perfect examples of the camera capture quality.

First Run Camera Tests

Vector Overlay Drawing

You can manually code vector shapes to be overlaid on the camera images.
The OMVC system uses this capability to demarcate objects as we will see in the photos below. This demo draws circles over the camera input. 

Shape Recognition

Meet our test suite objects !
A square glass coaster, a white iPhone 4S and a green hair elastic. 

Circle Detection

Hair Elastic

I think I compromised the hair elastic test with the heavy shadow casting lighting. 
It correctly identified the camera circle on the iPhone. 
The home button was too small of a color difference to detect. 

Rect(angle) Detection

This feature is amazing and the most rock solid thing I tested.
Super cool.

Real time Edge Detection

My hand over thinkpad keyboard

White iPhone4S on white table (the UNFAIR test). 

White iPhone4S on dark blue background (FAIR test) 

Self Reflection Test
(Reflection of itself on screen of white iPhone4S on dark blue background)

Thankfully, It did not recognize it's own reflection, or demonstrate any other signs of self awareness, so we are safe for now.

HOWEVER it does have the capability to learn to recognize things, utilizing python machine learning, so that might be a fun future experiment.


Facial Recognition 

Facial detection works surprisingly well in properly lit conditions.

The default example file was able to identify two faces with different skin colors moving slowly in the same frame at the same time. You do need to have both eyes facing the camera, but there were surprisingly low false positives.

Facial recognition doesn't do as well in poor lighting. One could tweak the code tolerance values, but for low light uses, the optional Infra-Red lens would make more sense. This blog is more of a cursory run through the example files.


Barely scratched the surface of this exciting new platform and already very impressed. This is the best option if you want to learn camera based programming.

According to the documentation, the IDE previews camera frame rates at about half the capture speed. SDCard recording is at full frame-rate. Perceptually, I didn't notice any frame-rate loss on my laptop.

If you want to look at the python example files directly, the Examples are buried here in windows (will very based on OS):
C:\Program Files\OpenMV IDE\share\qtcreator\examples

One more bonus to using micro-python vs. C is the next time you plug in your M7 board (without the sd card inserted), you can open & read the .py file to remember what program the camera is running.

This is a huge improvement over the more traditional Arduino approach where you can't easily read the sketch that was previously written to the board.

 The M7 captures at 640x480 but depending on the use-case scenarios sometimes what looked like 320x240 greyscale to maintain real time recognition performance for barcode or facial recognition. I'll have to dig into the documentation and do further testing before I can confirm that.

The only things close to this at the moment would be either 

In further blogs, I will be exploring the various shields the OMVC can interact with (LCD, wifi, etc.).

To further explain one point, micro-python is a smaller, reduced function subset of the desktop and server language Python. Micro-Python is made specifically for single board circuitry devices.

The OMVC device works with Micro-Python, not normal Python, so installing desktop python should be redundant as OpenMV IDE should install all you need.

However, if you have NO standard Python on your system already, and at some point later on you want to learn more standard Python to improve your micro-python skill-set, it is generally recommended to go with the latest version (3.4 as of this blog).

OpenMV Cam M7 platform

Create machine vision projects using MicroPython & OpenMV Cam M7.

Continue Reading →

November 08, 2018


Posted in glowforge, piano, projects, rh

Kitronik :Klef Piano Laser Cut Case

Kitronik offers DXF files for making a baby-baby grand case for your Klef Piano

Kitronik tutorial is found here

Klef DXF Files 

Timelapse Video of Build.    

The Elmwood Glowforge only takes SVG & PNG files. 

To get started I imported the DXF file for "Kitronik_Perspex+Wood_Piano" into Inkscape and separated the layers to be laser cut into a SVG file and copied the layers to be embossed/engraved into a separate PNG document. 



Links for both are below.
Since every laser cutter is different, you mileage may vary. 

Laser Cut SVG Piano Template

Engraved PNG Piano Template

With the two documents uploaded to the Glowforge, I noticed the scaling was slightly too small from the DXF > SVG conversion. With the Klef in the actual bed of the Glowforge, did some trial end error rescaling by scanning the Klef in the forge &  then sizing the SVG template to make sure it would sit in the casing.

Here is a 12 minute video detailing the assembly.


Both goes at assembly, I snapped the balsa while curving the back of the piano, so you may want to add even more cuts to the SVG version above to make bending easier. 

For my next number 

I've created a CONCERT MODE file for the Micro:Bit where each note plays a song.

Great for impressing people. A very tiny amount... with a tiny piano. 

Remember to wave your fingers in the air feverishly. 

Click this link to get the HEX file to Download to your Micro:Bit




See Part one of this blog if you want step by step instructions on how to install the file. 



Finished Products! 


 And thanks to Kitronik for another super fun project. 

November 05, 2018


Posted in kitronik, klef, piano, rh

:Klef Micro:Bit Piano From Kitronik

Unboxing  / Testing video HERE ! 

MakeCode Setup Tutorial

You'll need


We've premade two example setups files for you. 

MakeCode Example ONE : Play notes right away.

Plug in Micro:Bit to computer. 

Basic Automatic Piano Setup HEX File  

click EDIT

Download  and Drag onto your MicroBit. 

Wait for it to stop flashing. It will dismount & then remount.

Then EJECT the Micro:Bit (varies depending on Win or Mac ). 

Unplug USB.

Insert Micro:Bit into Piano

Switch the USB cable to the top of the piano. 

Play Piano !


MakeCode Example TWO : Learn individual key assignment

This example will open MakeCode & you can see how I assigned the capacitive touch based on these port numbers on the bottom.


Manual Key Assignment HEX File

click EDIT

Download  and Drag onto your MicroBit. 

Wait for it to stop flashing. It will dismount & then remount.

Then EJECT the Micro:Bit (varies depending on Win or Mac ). 


Unplug USB.

Insert Micro:Bit into Piano

Switch the USB cable to the top of the piano. 


Play Piano !

For this demo code, instead of octave shifting, the piano Arrow buttons, as well as Buttons  A & B will display some fun LED Icons.  


MakeCode Tutorial THREE : How Examples 1 & 2 were made.

Open MakeCode. 




Enter KLEF into the Search Bar. Select it. 

You should now see the :Klef library in your Blocks



To recreate Example One


To recreate Example Two Replace the FOREVER Loop with a nested If Else Loop. Assign Each Key & note. Refer to the back of the piano. 

These will probably be easier to read by opening the MakeCode Example file linked earlier. 

End of Make Code Blocks Tutorials

Go make something fun!


Once you've mastered those tutorials & you love MicroPython & if you want to get more into direct c-like arrays & address assignment...

Alternate (Experimental) MicroPython instructions. 

You'll need :   

  • a python editor (this tutorial uses Mu)
  • this Kitroink sample code from github
  • Micro:Bit
  • micro USB cable
  • one :Klef Piano

    Open MU

    LOAD the file off the Github repository. 


    Once you have the Code loaded, FLASH it to your Micro:BIt



    Unplug Micro:Bit, insert into the :Klef and then insert the micro USB into the KLEF PIANO not the microbit. It will give you an error otherwise. 


    You can also think about using the onboard breakouts to control things via jumper wires. 


    You will notice the default volume is quite LOUD.

    Now go make beautiful music all night long so your neighbors can hear. 



    October 26, 2018


    Posted in

    Canada Post Strike Update October 25

    Canada Post is again operating in Toronto, so we have enabled Canada Post as a shipping option.

    Warning:  if you are in any sort of time crunch, please select FedEx.  The Canadian Union of Postal Workers can target any location until the strike is over, so there is no telling when you will receive your package.

    The CUPW twitter feed seems to be the best source for keeping track of where they are striking.