Motion Plug code updates

Seb Madgwick IMU demoDemo by SebMadgwick

Our Dutch collaborator, Jean-Claude Wippler, recently pointed us to more polished code on GitHub for the MPU9250 (Motion Plug). This board uses the Invensense MPU9250 and includes 3 axis: accelerometers, gyros, and magnetometer. The software was written for something called rpicopter, work that appears to be significant group effort to us.

Screen shot 2015-04-01 at 2.39.57 PM

We have simplified the Arduino sketch and turned it into an Arduino library. The library only supports hardware I2C pins on whatever Arduino or Atmega chip you’re using, because it uses 400khz high speed I2C. There are settings for the low-pass filter which only affects the Gyro, as far as we can see. It default is 188Hz (defined in inv_mpu.cpp). The library also supports the Teensy.

The library outputs Yaw, Pitch, and Roll (standard orientation headings in the flying business) smoothed out in an almost magical way. This comes courtesy of some very fancy math functions.

“A quaternion is a four-dimensional complex number that can be used to represent the
orientation of a rigid body or coordinate frame in three-dimensional space.” says Sebastian O.H. Madgwick, who wrote the sensor fusion algorithms which bear his name.

In any case, all the quaternions are now hidden out of sight (in mpu.cpp), the library works really well, and the Arduino sketch is easier to read and modify.

By Nadya on March 31, 2015.

RFM69 Radios

New Radios!

The RFM69CW radio module by HopeRF is a compact, powerful radio transceiver module for swapping data packets in the 868 MHz ISM band, using standard and enhanced FSK modulation. The radio is great for sub-compact designs; just 4mm of mounted height from using an SMD precision crystal.

Though consuming a similar level of power, the RFM69CW receiver section can decode fainter signals than the classic RFM12B, so it has better receive sensitivity. The transmitter section *maximum* output power is +13dBm, considerably higher than the +5dBm of the RFM12B. The current drain at these (adjustable) higher power settings is correspondingly higher though. With the better receiver sensitivity, many applications will not need to use the higher transmit power settings, potentially saving on battery life.

Compared with the RFM12B, pairs of RFM69 modules will generally have greater range and/or better penetration of walls/ceiling than when using pairs of the classic RFM12B.

The physical module is compatible with the PCB footprint on all current JeeNodes and JeeLinks. For details of the fast-evolving level of software support, see this Forum topic on the JeeLabs forum.

Control is via a fast SPI bus with reduced loading on the microcontroller, another nice advantage with the radio. The recommended power supply range of 1.8 < Vdd < 3.6 V can squeeze almost the last energy out of depleting batteries without needing a boost converter.

An antenna must be connected to RFM69 module – for 868 MHz, an 82-mm (quarter wavelength) wire can be used (not included). Operation without an antenna at the higher transmitter power levels risks permanent damage to the output stages.

Marking Convention: a yellow spot on the top of the transceiver chip indicates optimized for the 868 MHz ISM band. You can have confidence that you are building your project with a fully functional module!

Summary:

  • More transmit power than the RFM12B (but more current required).
  • Better sensitivity on receive.
  • An RF signal strength is available
  • Fits the current RF12B footprint
  • The JeeLabs driver fully supports the radio with only one definition change at the top of a sketch.
  • RFM69 and RFM12B radios may be mixed in a JeeNode network and talk to each other.

For detailed specifications, see HopeRF’s RFM69CW documentation.

The RFM Board provides convenient signal breakout with an option for connecting to 5V power systems.

Digital Smarties (The JeeLab Shop) stocks a 868 MHz version of these modules with EU prices. Both Modern Device and Digital Smarties (Jeelab Shop) have the 434 versions.

Right now we are selling these on RRM12B boards and JeeNode kits.

By Paul Badger on March 19, 2015.

Maxbotix Ultrasonic Rangefinder MB1013 (1mm Resolution) Proveout

A month or so ago we decided to carry the Maxbotix’s line of ultrasonic rangefinders (the MB1010, MB1013, and the MB1200 are the models we have currently stocked).  The MB1013 in particular caught our eye in its claim to have a resolution of 1mm, so we decided to put it to the test. We lashed together a test rig with two panels (of plywood) that are raised and lowered by three drive shafts of 1/32″ threaded rod (pictured below).

mb1013_mounting

mb1013_rig

mb1013_closeup

The board has two holes in the opposite corners that make mounting to a surface a no-brainer. We quickly proved out the analog output using a 5v power supply and a multimeter, but we wanted the most precise measurement. Opting for the serial (digital) output  reading with an Arduino- both methods are covered in the Maxbotix tutorial. For ease of documentation, we hooked up the Arduino to an LCD driven by our LCD117 board, for an easy three wire interface to the LED. This was just handy way to get feedback without a laptop or desktop. Actually the USB cable in the picture below snakes about 10 ft to the nearest desktop in our shop.

mb1013_rig_closeup

Our threaded rod was 32 threads per inch, which is equivalent to 24.4 mm, so one thread represents 32 threads per inch / 25.4 mm per in. or 1.25984 threads per millimeter. This allowed us to index the jig 1.25 turns per unit and not have a lot of error, with an error of .246 threads per 25 turns. In any case we indexed all the way through one inch,

Our results showed that it does indeed have a 1mm resolution, meaning that 1 1/4 turns did actually correspond with a Maxbotix output of 1mm! Our algorithm kept the readings consistent with the range up until around 620mm – where the sensor’s output started to report smaller values than the measured distance, ending up 8-10mm ahead of where it was supposed to be at 582 mm. Maxbotix cuts off the serial output of the sensor at 300mm (11.8″) so one could speculate that the error in the electronics started to be a factor in the measurement, which lead to Maxbotix to cut off the specification at 300mm.

mb1013_chart

 

Check out the raw data here.

The max range and cone shapes vary from the sensors we have available. They could be used for things like a parking sensor (found in most modern cars), self-navigating robots, or a suit that helps you navigate blind. Maxbotix has done a great job  of taking ultrasonic measuring technology and pushing itas far as they can in accuracy, range and sensing properties (sensing cones) in these very low-cost sensors. Here’s a line up of the models we carry at Modern Device.

MB1010 LV-MaxSonar®-EZ1 – Least Expenisve, good starter ($27.97USD)

MB1013 HRLV-MaxSonar®-EZ1 – Highest Resolution (1mm)

MB1200 XL-MaxSonar®-EZ0 – Longest Range (300in)

UPDATE: 2/2

We got in contact with the good people at Maxbotix and showed them our research. They were pleased to see us exhibiting their equipment, and gave us some feedback on our setup…

First, I reviewed your test setup and thought you did a pretty good job. As such there is a variable that can make a big difference in your testing results. This is the temperature compensation and the location of measurement. Going though a vertical column of air is known to typically have temperature variation from the top vs the bottom. This change in temperature can affect the temperature compensation of the sensor and lead to some inaccuracies. For best accuracy, it is recommended to use a MaxTemp mounted half way between the target and sensor so that you have the most accurate temperature reading. Even one or two degrees c will have an effect on the reported range. 

You can view more on the MaxTemp at this link http://www.maxbotix.com/Ultrasonic_Sensors/MB7955.htm.

By Britton on January 28, 2015.

New Product – ExtraCore MD – Alarmingly tiny Arduino Clone!

Dustin Andrews created the first ExtraCore Arduino which is the size of a postage stamp. We sold the first batch we had, and by that time, the original was extinct as Dustin had moved on to another job and didn’t want to make more. We decided to respin the board with a few improvements and a smaller chip. The result of our efforts is in the shop  here .

The ExtraCoreMD, as we’re calling it, is a minuscule form factor Arduino clone, ideal for applications where space and weight need to be kept to a minimum- aircraft, robotics, fashion, wearables. The size of the board is .92″ x .825″ (21mm x 23mm), and it is manufactured on 1.3mm PCB for a sleek height profile of only .09″ (2.2mm). The board is small enough to conceal in jewelry, or DIY musical greeting cards, or wearable tech, if you’re crafty.

Programming is through our USB BUB or any standard FTDI cable, unlike the first ExtraCore. We also made one non-fatal mistake in the boards, although we are revising them immediately. The labels on the VCC and Vin are just swapped.

We cooked up a quick example app, just to prove out the board, using 18 pins (all the I/O except RX & TX) LED’s with a basic loop. Keep posted for more experiments using this board.

 

There are more details on the product page: http://moderndevice.com/product/extracoremd/

We’re giving away ten of the boards, with orders over ten dollars. Use coupon code EXTRACOREMD.

By Britton on January 23, 2015.

New Product Bundle: Jeelabs Mini Starter Kit!

jeelabs_bundle

We are introducing a starter kit for JeeLab’s JeeLink and JeeNode SMD!

This Jeelabs Mini Starter Kit kit comes with everything you need to start working with wireless communication. We have also included a USB BUB II to interface with the JeeNode SMD. All products are surface mount and require little assembly to attach headers. We can also solder all headers on both the JeeNode SMD and the BUB II for an additional charge.

Save 25% off both the Jeenode SMD and the JeeLink, and 28% off the USB BUB II when you purchase them bundled together!

If you for some reason decide to get to different frequencies please let us know in the customer comments upon checkout. The kit will not work together if you purchase two different frequency modules.

By Britton on December 29, 2014.

Free Shipping Every Weekend!

We offer Free USPS First Class Domestic shipping every weekend for orders over $10 to help you save a few bucks here or there. We tend to start the weekend early, so Free Shipping gets activated around 3pm EST Friday, and deactivated at 10am Monday. If for some reason the option is not available, please feel free to contact us and we will fix that!

Despite offering this for quite some time, I have noticed that not everyone takes advantage of this offer. When checking out, make sure you select the option “Free Shipping on Weekends, Domestic US only.” Please note that orders that are over 13oz in weight are not eligible for First Class Mail, and you will have to use another option.

By Britton on December 5, 2014.

Wires, more wires, in all gender combinations

40wire_jumper_MM40wire_jumper_FM40wire_jumper_FF

These are 12″ long ribbon-wire jumper cables suitable for a wide variety of temporary or permanent wiring tasks. These are much more robust than flexible breadboard wires which are fine for quick prototypes, but do not hold up to soldering.

We’re even including some double-long male headers with the female pins, as handy gender changers.

They’re in the shop and ready to go.
I’m giving away ten of ten of them for free. Use coupon code RIBBON_WIRES. Limited to one per person on orders over $10.

By Paul Badger on November 4, 2014.

A hybrid power connector

2.1mmBarrelPlug

You love screw terminals. You love barrel jacks.

These things seem so standard to you, so convenient, and you dream of their lovechild, a sweet hybrid of convenience, solder-free terminals coupled with that 2.1mm silver power plug that powers myriad devices (e.g. Arduinos and most of the boards we sell).

Believe or not – this slightly monstrous adapter lives!  Soldering standard barrel plugs onto wall-adapter and battery-pack wires is not rocket science, but there are two principle challenges:

  1. You have to put the barrel plug insulator onto the wires, in the correct direction, BEFORE you solder the wires.
    This simple act is cunningly easy to forget and evades me a fair percentage of the time I solder plugs on wall warts and guitar cords. So I end up with a perfect solder joint on the connector, and the insulating sleeve is lying on the bench, and I have to do it all twice.
  2. The other challenge is soldering well enough, and making tidy enough solder joints, so that the sleeve will slide down over the wires and screw on. This never bothers me anymore, but it often taxes my student’s soldering abilities.

This screw-terminal power plug eliminates both problems, perhaps at the expense of aesthetics. Also you don’t really have much strain relief with this jack, but it could easily be added with hot glue or epoxy putty. Perhaps at the further expense of aesthetics.

This also a great way to reuse all those power adapters in your junk box.

We have a short tutorial on using the plug below.

2.1mmBarrelPlug

 

Unscrew the terminals,

Tin the wall-adapter or battery-holder wires, Tinning the wires is not strictly necessary but is a good idea.

Insert the wires into the adapter. The marked “+” terminal is positive. This is way more standard than center-negative. Center-negative adapters do exist, but not in Arduino land. Double check your specs and the polarity.

redwire

And screw the terminal back down again.

hands-screwing

If you’re seeking permanence, the wires can be soldered in place, though it takes a while. (this iron is off, use a hot one for best results).

soldered

 

It’s ready to go in the shop here! It’s never too early for nerd gifts for the holidays.

By Nadya on September 30, 2014.

Creating a script to set your color palettes in Eagle.

Screen shot 2014-09-26 at 10.17.26 PM

A beautiful palette in Eagle. It’s still a work in progress.

This is tutorial to make a script that will set your color palettes in Eagle. Eagle has horrible (and limited) default colors and users have been complaining about them, and the lack of color palette functionality for the last 15 years, with absolutely no response. According to the managers at CadSoft the next revision is slated to fix some of the multitude of interface issues that are wrong with Eagle. (Don’t get me going again…)  If you agree with me, you might wander over to the Eagle support forums at Element 14, and speak up about fixing the color palette, as well as storing color palettes in files.

Anyway here’s how to make a groovy script that will set your favorite palette colors. One use for a script of this type is to reset your colors if they should ever become compromised, but you can also move color palettes between computers, and include them with files that you send to others, so that they can see your beautiful work in the colors in which it was created. To set the color palettes in Eagle, just run the script.

(Sorry these are the mac instructions – windows shouldn’t be that much different. I think the file name for .eaglerc might be different. Feel free to mod my instructions for Windows  and repost.)

• The first step is to edit one of the Eagle palettes to your taste and add some better colors. Don’t forget that the colors are arranged in vertical pairs in the palette. When you choose the top color in the pair in which to have a layer displayed, when the layer is selected, Eagle will use the bottom color of the pair to display the selected/active item in the layer.. If you choose the bottom color in the pair for the layer, elements do not change color when selected. So colors directly above each other in pairs should usually have a great deal in common. I usually make the selected color brighter (more saturated to you artists out there), and more opaque, assuming that when you select an item, you generally want it to pop out at you.

• Once you have finished your masterpiece palette,  quit Eagle. This is important because Eagle has some bizarre ideas of when to write files, so lots of information is stored and then written out when you quit. If the program crashes, well, you lose :)

• Open the Terminal and type the command “cd ~” (no quotes) That will get you to your home folder just in case the terminal
doesn’t open with your home folder as the current directory

• Next type the command “ls -la” (no quotes)
That will list all the files including invisible files – which .eaglerc is, since it begins with a period.

• Look for a line similar to this
-rw-r–r–     1 userName  admin      29110 Sep 26 20:29 .eaglerc

If you find .eaglerc all should be well.

• issue the terminal command “less .eaglerc”

• When the file opens in the terminal, use the arrow keys to scroll through the file (it takes a while!) until you find
a line like this:
Palette.0.0 = “0xFF000000″

These are the palette entries.
Palette.0.x entries are the black background
Palette.1.x entries are the background
Palette.2.x entries are the grey or colored background

You can copy any of the palettes for your script, or just one. I only use the white background, so I just copied the 1.x entries etc.
One strategy if you didn’t want to change the black and white palette default colors would be to change the colored background.

Copy the palette/s you want. Paste it into a text editor.  At this point you can exit the terminal if you want.

• Next you need to use the text editor of your choice to search and replace commands to change the text from the form

“Palette.1.1 = “0xB43232C8″

to the form
“set palette 1 0xB43232C8;”

If you have any practice at all searching and replacing, this should only take four or five steps of search/”replace all”, to whip the text into the correct form.

next append the entries:
“set palette black;”     before the black palette entries
“set palette white;”     before the white palette entries
“set palette colored;”   before the colored palette entries

you can add blank lines if you want for formatting – they are ignored.
comments may be added with a # sign beginning the line and ending with a semicolon

•    Here’s the head of my file for an example.

# MyDefaultColors.scr;
# Set the default colors in Eagle Cad;
# colors are stored in .eaglesrc in your home directory;
# open that file and copy the current colors;
# Then edit in a text editor to the proper format;

set palette white;
# you can’t change index 0 in the white palette;
set palette 1 0xB41CC2FE;
set palette 2 0xB4002400;
set palette 3 0xB4008080;
set palette 4 0x96CE0029;
set palette 5 0xB4800080;
.
.
.

• That’s it – save your file as “MyDefaultEagleColors.scr” or anything you wish, just be sure to use a “.scr” extension.

If you get an error in Eagle when you run the script with Run Script  you probably just have a formatting error. You can get an example of a working script from the  “defaultcolors.scr” script in the Eagle/scr folder, to get the syntax right.

Happy palette making. This will give you a way of transporting your colors between computers and sending to others to view your Eagle files as you created them.

Remember you don’t have to get the palette right the first time, you can repeat the process any time, although it is a little tedious. In the meantime, you might speak up in the Eagle  Forums at Element 14 and ask for a load and save button in the set palette window, which would make this tutorial blissfully obsolete.

By Paul Badger on September 26, 2014.