Welcome to the Pololu Blog, where we provide updates about what we and our customers are doing and thinking about. This blog used to be Pololu president Jan Malášek’s Engage Your Brain blog; you can view just those posts here.
Erich, a professor at the Lucerne University of Applied Sciences and Arts in Switzerland, posted to our forum about a circuit he designed for the robots he’s building based on our Zumo chassis for his embedded system programming course. His Zumos are retrofitted with our micro metal gearmotors with extended backshafts and optical encoder board. The custom circuit he designed converts the analog output of our optical encoder boards to digital waveforms, which makes them more easily interpreted by microcontrollers and other devices. His board uses a Digital-to-Analog Converter (Microchip’s MCP4728) and four op-amps (Microchip MCP6004) to generate the modified quadrature output. The DAC can be controlled directly over I²C and can be calibrated automatically. After verifying that it works, Eric ordered a bunch more boards to use in his course:
We look forward to seeing how they work with the Zumos!
You can read more about Erich’s signal processing boards on this blog post from his website. You can follow the progression of the robots used in his course by visiting these forum posts:
March 2013: Zumo Robot with FRDM-KL25Z Board
September 2013: Zumo Robot with Pololu Plug-in Modules
October 2013: Zumo Robot with Pololu Plug-in Modules, assembled
December 2013: Zumo Tournament Videos
We are now carrying four exciting new sensors from Interlink Electronics:
- 0.25″-diameter circle, short tail force-sensing resistor (FSR)
- 0.6″-diameter circle, short tail FSR
- 1.4″ × 0.4″ force-sensing linear potentiometer (FSLP) strip
- 4.0″ × 0.4″ customizable-length FSLP strip
The two force-sensing resistors (or FSRs, for short) are short-tail versions of the small, circular FSRs we already carry, which allows them to be integrated into applications with tighter space constraints. These sensors act just like variable resistors that depend on the applied pressure, so you can put them into a simple voltage divider circuit and measure the force on them with a single analog-to-digital (ADC) microcontroller input.
|0.6″-diameter short-tail force sensing resistor (FSR) next to a 0.6″-diameter FSR with a standard tail.|
The two force-sensing linear potentiometers (or FSLPs) take the force-measuring functionality of FSRs and add in the ability to detect the location of the force, all while being an entirely passive component that is incredibly easy to use.
|The two force-sensing linear potentiometers (FSLPs).|
These FSLPs are exciting because they enable fun new touch interfaces, not only for you to interact with your project but for your project to interact with the world. We decided to make a quick demo for the Las Vegas Mini Maker Faire 2014 to show just how easy it was to do something cool with this sensor. The video at the top of this blog post shows the demo in action.
In the demo, a 4.0″×0.4″ FSLP is used with an Arduino Uno R3 to meassure the position and pressure of the user’s finger. (For applications where space is tight, smaller modules like our Arduino-compatible A-Star Micro can be directly substituted for the Uno.) Using the strip requires four connections to a microcontroller and one additional resistor. Two of the required connections must be analog inputs. Four connections for one sensor might seem like a lot to deal with, but step-by-step procedures in section 5 of the sensor’s integration guide (513k pdf) make it easy to get the sensor working, and the Arduino code used in this demo is available on github to help get you started. A diagram of the connections made between the sensor, Arduino, and LED strip in this demo are shown below.
The connections shown in the diagram also work with the shorter 1.4″×0.4″ FSLP (referred to as “standard FSLP” in the integration guide), though the pin numbers that correspond to each of the sensors outputs (SL, D1, and D2) are different for the two sizes of FSLP. The pin numbers for each FSLP can be seen in Figure 9 of the FSLP Integration Guide. In the guide the 4.0″×0.4″ FSLP is referred to as a “10 cm FSLP”.
Once the Arduino reads the position and pressure data from the sensor, it sends signals to a WS2812B addressable LED strip that control the number of LEDs that turn on and their color. The further along the strip your finger moves the greater the number of LEDs that light up, and the more pressure you apply the more the color of all the LEDs changes from blue to red.
To make the demo easy to transport and able to be left on all day, a 9V wall adapter was used to power the Arduino and 5V step-down regulator. The power connections from the regulator’s 5V output to the power input of the LED strip were also simplified by using a DC barrel jack to terminal block adapter and a DC barrel plug to terminal block adapter. The structure of the demo was laser cut from 1/8″ clear acrylic, and aluminum standoffs were used as spacers.
If you guys do something cool with our force-sensing linear potentiometers or resistors, we’d love to hear about it!
Nick Moxley made a DIY seat mover (with two degrees of freedom) and shared his build on our forum. This racing simulator is powered by two of our Jrk 12v12 USB Motor Controllers with Feedback and controlled from the popular XSimulator software. The picture below shows Nick’s jrk motor controllers, which he modified by adding heat sinks for additional cooling.
This is one impressive build that I highly recommend checking out, especially if you are interested in making your own DIY racing simulator. You can find details about the parts he used (including where he found some of them) as well as many pictures documenting different parts of his build in Nick’s post on the Inside Sim Racing forum. A shorter version of this can be found in Nick’s post on our forum.
We posted about a Simulink library for the Zumo robot recently, and now a tutorial that teaches you how to use that library to program a Zumo robot with Simulink is available on the Adafruit Learning System. The guide walks you through setting up a Simulink model to make the Zumo follow a specific trajectory, then loading the generated code onto the Zumo to see it run.
Related post: Zumo robots programmed with Simulink by MathWorks
MathWorks, the producer of technical computing software including MATLAB and Simulink, has released a Simulink library for the Zumo robot. The library provides blocks that represent all of the sensors and peripherals on our Zumo robot for Arduino, making it possible to program an Arduino-controlled Zumo robot using Simulink.
These Simulink-programmed Zumo robots have made a few appearances on MathWorks’ MakerZone blog. This article discusses the math behind programming a robot to follow a line, modeling the control system as a harmonic oscillator.
MathWorks also used several Zumos as part of a demonstration at the Robot Zoo, part of the 2014 Cambridge Science Festival. You can read more about their Zumo demonstration, as well as their other robot exhibits, in their recap of the event.
Related post: How to program a Zumo robot with Simulink
We now have a second distributor in China: TinySine, an electronics manufacturer and retailer located in Hefei, Anhui province. They are initially carrying several of our products including the Maestro, Wixel, and A-Star.
TinySine, also known as Tinyos Electronics, ships worldwide with several express services as well as the low-cost Hongkong Post, so they are worth considering for your next project, wherever you are located. Please let them know if there is a Pololu part that you would like to see in their shop!
Level shifting is a common issue when interfacing multiple microcontrollers or other digital logic devices. For example, you cannot directly connect an Arduino running at 5 V to the Wixel, which runs at 3.3 V. Our Wixel Shield for Arduino contains several level-shifting circuits to help you do this.
In some cases, such as connecting a digital sensor output to your microcontroller, a simple voltage divider or transistor inverter might be good enough. However, in many cases a better solution is necessary. I²C, for example, is a common protocol that makes use of a bidirectional communication line. Luckily, a relatively simple circuit consisting of a MOSFET and two pull-up resistors can be used for general-purpose bidirectional level shifting:
|Schematic of a single bidirectional logical level shifter.|
We have used this level shifter circuit on many of our breakout boards operating at a lower voltage, such as the MinIMU-9. It works like this:
- When Lx, the lower-voltage input, is driven low, the MOSFET turns on and the zero passes through to Hx.
- When Hx, the higher-voltage input, is driven low, Lx is also driven low through the MOSFET’s body diode, at which point the MOSFET turns on.
- In all other cases, both Lx and Hx are pulled high to their respective logic supply voltages.
The circuit works for any pair of voltages (within the limitations of the MOSFET) and can be used with most common bidirectional and unidirectional digital interfaces, including I²C, SPI, and asynchronous TTL serial. You can read more about it in NXP’s application note on I²C bus level-shifting techniques.
Today we released a logic level shifter board featuring four of these bidirectional channels:
Our board can convert signals as low as 1.5 V to as high as 18 V and vice versa, so you can use it for almost any logic-level signals that you might encounter in your project. It is also, as far as we know, the smallest bidirectional logic level conversion board out there:
Note the use of a more internationally-appropriate size reference than our traditional U.S. quarter. After we put together this image, nobody believed that the board was actually that small, but we verified it several different ways to make sure.
Anyway, with this board’s small size, low cost, and versatility, we think it is something that everyone should have in their toolbox. For more information or to order, see the product page.
Get FREE copies of Circuit Cellar magazine’s May issue and Elektor magazine’s May issue with your order, while supplies last. To get your free issues, enter the coupon codes CIRCUIT0514 and ELEKTOR0514 into your shopping cart. The magazines will add 6 ounces and 7 ounces, respectively, to the package weight when calculating your shipping options.
Looking for a way to pump up your next project? Let the Muscle Sensor v3 from Advancer Technologies do the heavy lifting!
This small, easy-to-use, 1″ × 1″ board measures muscle activation via electric potential; this is referred to as electromyography (EMG). The sensor measures, filters, rectifies, and amplifies the electrical activity of a muscle; as the muscle flexes, the output voltage increases, resulting in a simple analog signal that can easily be read by any microcontroller with an analog-to-digital converter (ADC), such as our A-Star or an Arduino.
|Muscle Sensor v3 with included hardware.|
The engineers here were pretty excited to play with these when we got our first samples, as many of us hadn’t used anything like it before. While thinking of various ways to test the sensor, a few of us remembered this ridiculously awesome video of Terry Crews making music with his muscles. (Gets me every time! #MuscleEnvy.) Without getting ahead of ourselves, we decided to try something much quicker and more straightforward with some of our electronics.
In the demonstration video at the beginning of this post, you can see the muscle sensor in action as it measures the muscle activity of my bicep. The demo uses the muscle sensor with a Maestro servo controller to update the position of a hobby RC servo based on how hard I flex. The setup was very simple; the analog output signal from the muscle sensor is connected directly to channel 0 on the Maestro, and the two boards share a common ground. The muscle sensor is powered by two 1S LiPo batteries and the Maestro and servo (connected to channel 1) are powered from a separate 6 V battery pack.
|Here I am modeling with electrodes on my bicep for the Muscle Sensor v3.|
The Maestro script we used is very similar to the “Using an analog input to control servos” example script provided in the Maestro user’s guide with a couple of modifications. We changed the scaling of the input channel (since our signal was from 0 V to 3.7 V) as well as the channel numbers to match our setup. The whole script is only a few lines long:
# Sets servo 1 to a position based on the analog input of the Muscle Sensor v3. begin 0 get_position # get the value of the muscle sensor's signal connected to channel 0 6 times 4000 plus # scale it to roughly 4000-8092 (approximately 1-2 ms) 1 servo # set servo 1 accordingly repeat
We can’t wait to see all of the amazing things you come up with when you engage your brain (and your muscles) with this sensor!