Teensy Drum Synthesizer

I’ve recently started to learn about and practice with Teensy’s audio library, and their companion shield.  The reason that I have gone this route is that the Mozzi library uses lower fidelity DACs that result in too much noise, even though they promise 12 bits.  There are just too many artifacts.

I have built a simple drum synthesizer using the amazing audio design tool from PJRC – which you have to check out!  https://www.pjrc.com/teensy/gui/

Here is the project I’v built using brass strips as keys – simple on/off but responsive keys to the digital inputs of a Teensy 3.2 digital inputs (4-8).

 

And here is the input prototype, made from yardsticks, thin hobby plywood and brass strips:

 

The audio design tool is a simple front end for arduino sketches to enable hooking up audio components/signal processing blocks quickly and integrate into a sketch.  Here is the block diagram for this project:

 

Way cool, isn’t it!  Finally, I coded it into the Arduino IDE with a polling mechansim for the 5 switches, and the source file is “sD_tAd_419.ino” and it creates incredible sounds, especially for 5 second note times.

 

Posted in How To | Comments Off

Step Sequencer Using Mozzi

Recently completed is a step sequencer that combines many different subsystems to yield a nice sounding and playful platform.  We hope that this provides enough documentation so that when I come back to this project, I can actually get up to speed quickly and accurately.  I have decided to document projects both on line via 47meters & via a paper file to keep at my home office.  Here is what the project looks like – the whole system:

Below is the schematic for the project.  Basically it consists of a filter module and a rail splitter block.  The filter module consists of a first order LPF at 7 KHz, followed by a Sallen-Key second order filter at at 8 KHz, followed by another first order LPF at 7 KHz.

Here is the wiring on the white board:

[Software Architecture] – [ Digital Realization] – [ Analog System] – [ Audio Output ]

The project looks like the following two images.  Note, that I think that the so called ‘white boards’, or ‘poke boards’, or ‘solder-less breadboards’ provides an amazing almost permanent construction medium.  I really believe that unless you plan mass production, that you stick with white boards.

I will start with the important Software Architecture (lifted from the Mozzi playbook):

Update Control

The system design consists of a sequence array that contains the notes and their relative position (all notes in MIDI integer values), which is part of a loop that tests a ‘note ready’ condidiont.  If this is satisfied, the the note frequencies are updated, and the next note cycle is initiated.

And the table for the Digital Pins:

Update Audio

This cycle, run at very high speed is responsible for the DAC response to the note(s) instantaneous value, the envelop value, and an overall mixer value to balance the sound between multiple oscillators.

Here is the filter used to reconstruct the audio and filter out excessive (out of band noise):

Just to make sure it was working properly, here is the frequency response, showing approximately a 4th order Low Pass Filter:

Low Pass Filter Response of 4th Order at 8 KHz

 

Posted in How To | Comments Off

ARM Capacitance Sensor

The Teensy 3.2 is an amazing small Arduino, and it uses a powerful ARM processor running at 96 MHz.  One of the benefits of this part is that it has a multitude of sensor inputs (on the order of 12) that can be used as switches or similar sensors.

This is a plot from a sketch with approximately 1 ms sample rate (I think it is more like 10 ms sample rate because I was simulating a button press).  I plan to use this as a synthesizer input for generation of electronic music.  Note the baseline is 1000 units, which is much higher than a normal open pin value of 17 or so.  This is due to the length of wires, the layout and the brass pad of approximately .5 x .8 inches.

The C++ (Arduino) code used to create this is, and the plot was performed in the LibreOffice application Calc.
void setup(void)
{
Serial.begin(115200);
}

void loop(void)
{
Serial.println(touchRead(23));
delay(1);
}

Posted in Arduino, Commonplace, Hobbies, How To | Tagged , , , | Comments Off

Amazon Headphones & Amplifier

Amazon has a pair of very inexpensive on the ear headphones that I thought would be perfect for a variety of low fidelity uses where I did not want to bother with in the ear/earbud type transducers.  Also, it provides a good balance of noise blocking, comfort and bass response.  These headphones, sold under their ‘Basics’ label are very inexpensive and highly regarded (what ever that means) by the Amazon customers that evaluated them.  They can be found at: https://www.amazon.com/AmazonBasics-Lightweight-On-Ear-Headphones-Black/dp/B00NBEWB4U  And they have an average rating of 4.3 of 5.0.

Also, I wanted to build a simple, optimized amplifier to drive these headphones for a variety of uses from Arduino projects (Mozzi based music synthesizer to amateur radio applications), but their specifications were not readily available.  In this post we will describe the headphones and then the amplifier used to drive them.

The over the ear headphones have a diaphragm size of 36 mm and an impedance of approximately 32 Ohms.  By using a simple flat plate coupler and an inexpensive sound pressure meter (not well calibrated, but probably close) the sensitivity was measured as 72mv at 1 KHz to generate 94 dB SPL.  This should be checked, but is directionally correct.

 

The schematic shows the use of two unity gain, low voltage followers as drivers.  One is a virtual ground, the other is a unity gain follower.

 

Here is what the circuit looks like functioning as a follower after the Teensy 3.2 that I am using to run some Mozzi sound synthesis routines.  The circuit, using TLV2462 Op Amps (really great low voltage op amps), can generate almost 1.2 VRMS which generates almost 116 dB SPL with these headphones, which is plenty loud off of a 5 volt supply!  Note that I put the headphones in parallel, so it is 16 ohms and the output is current limited.

Posted in Arduino, Commonplace, Hobbies, How To | Tagged , , , , | Comments Off

Posting Photos in Lightroom CC

I’ve switched to using Adobe’s CC photo sharing facility for sharing photographs with others.  Although you can not add text, you can show a nice ‘light table’ image of all photos at once, and you can then click on photos that you like.

Here are the instructions on how to do this from Lightroom’s help:

Step 1 of 6
Sign in to Lightroom
From the Lightroom desktop app, click “Get started with Lightroom on mobile” in the top left corner of the workspace.
Click “Sign In” and enter your Adobe credentials or create an Adobe user ID and password, if you don’t already have one.

Step 2 of 6
Sync collections
When you sync a collection in Lightroom desktop, you share your photo collection on Lightroom on the web and in Lightroom on mobile.
In the Lightroom desktop app, click the arrow next to Collections to see a list of your photo collections. As you hover your mouse to the left of a collection, the Sync icon appears (as shown). Click the Sync icon for the collections you wish to share.
Step 3 of 6
View your collection on Lightroom on the web
Go to Lightroom on the web. On this page, select “Try Lightroom on the web” and sign in with your Adobe user ID and password.
Tip: To do this from Lightroom desktop, right-click (Windows) or control-click (Mac) the collection you wish to share, and in the context menu, select Lightroom mobile Links > View on web.

Posted in How To, Photography | Tagged , , | Comments Off

BMP180 Barometric Sensor, Sparkfun Serial Seven Segment & Feather Cortex M0 Processor

Project for portable Arduino work that also allows integration and experimentation with BMP180 Barometric Sensor breakout board.  It also has a pushbutton input and a photo transistor, and a voltage divider to measure current.  I plan to use this in the future to measure current draw for Arduinos and also the KX3.

Original documentation is from Oct 6, 2016 and is recorded in the Green notebook.  This project incorporates some unusual libraries and should be a benchmark/standard for future projects.  The libraries include:
  • The hardware uses a small 5cm x 7cm substrate board, on which the feather and s7s is mounted.  The various components are also attached to the substrate
  • The BMP180 is attached to the feather breadboard area
  • The substrate board is attached to a Mintz tin by high strength loop and hook adhesive pads – on on Mintz tin,  and the other on the substrate

The software looks like:

  • Adafruit Unified Sensor Library
  • SERCOM Library to allow use of multiplexed hardware IO as the Feather does not do software serial (also includes pin Peripheral function)
  • Standard Seven Segment library, but uses SERCOM, not software serial
  • Arduino Code:  hwSer_180_s7s_f_nov12a, stored in the Ubuntu and Mac Book Air computers
  • The Feather sometimes requires the use of the reset button to load new software

The code looks like the following:

  • Setup  the serial ports, the pressure sensor, and the seven segment display
  • Displays the code date of 1112
  • Loop: gets sensor data (if valid), and then prints it to the console monitor and then formats it for display on the seven segment, and displays the pressure and temperature alternating every second. 
  • The temperature is in degrees f, and the pressure is in millibars

Schematic Diagram of the system:

 

 

Posted in Arduino, Commonplace, Hobbies, How To, Projects | Tagged , , , , | Comments Off

Python on Pi

Recently, I have added a sensor shield (Sense Hat) to an Raspberry Pi3 that has an 8×8 array of neoPixel LEDs.  As a simple challenge, I wanted a python script to display the real time quotes of a stock, using the scrolling API that came with the shield.

Sense Hat & RPi3

This time I used a distributed development environment, and I think I will never go back to doing development on the Pi unless forced to do so.  I used Microsoft Visual Code to develop the python script, and then Filezilla to transfer the source to the pi.  After loading python updates, I then use ssh to run the script and the display is output on the shield.

The mechanical configuration consists of the Sense Hat simply plugging into the RPi, and the sandwich attached to a space frame made from aluminum robotics extrusions.  The RPi is attached to the space frame using the ultra strong hooks and loops bonding system by 3M.  Note that the system looks ‘upside down’.  This was intentional since it minimizes cables coming out of odd places, and improves the looks.

Steps:

  • SSH 10.0.0.xx -l pi /yes / password.  Fill in xx with the actual network address of the pi on your local LAN.
  • python py927.py.  This command executes the most current version on the pi.  This file also prints out the same data as being displayed on the serial console, if you choose to further debug the program.
Posted in Commonplace, Hobbies, How To, Raspberry Pi | Tagged , , | Comments Off

Using nRF24 RF Wireless Link from Nordic

Another learning project based on this Nordic Semiconductor product, NRF24L01 chip.  Nordic, RF, 2.4 GHz part with really flexible and high bandwidth radio performance for digital sensor data.

Purchased a 6 pack from Amazon for very little Dollars – maybe only $4 per circuit board and trying to set up.  From the problem solving post from 5 years ago, here are some steps:

  • Review prior projects – have we done this before?
  • Look at Safari and Amazon for answers – are there books on this topic?
  • Research physical books – look at the physical library
  • Search internet – Arduino, Wikis, Specialist sites, then general search
  • Search YouTube – find gurus and experts who have series, then individuals

Well, I hit gold with the 4th bullet, internet search where I landed on an Arduino wikispaces site that has a number of posts on the nRF24L01 chip, including a page on how to solve problems with the device.

Although I was keen to dual bypass the Nordic breakout board and connect it the the 3.3 VDC pin of the Arduino Pro Mini (3.3 V, 8 MHz), it turns out that this probably was the problem.  I connected both devices to my lab supply of 3.3 VDC, and the test routines that I loaded worked immediately!  First time!

  • Routine:  YourDuinoStarter Example: Simple nRF24L01 radio
  • Source:  arduino-infowikispaces.com/Nrf24L01 – 2.4GHz – HowTo (check spaces!)

Now on to integrating this with a sensor for remote data logging.  Will be using BMP180 sensor to monitor pressure and temperature.

Posted in Arduino, How To, Problem Solving | Tagged , , , | Comments Off

C++ Programming Errors

In working on some Arduino projects, the primary language of sketches is C++, though hidden under the Arduino IDE.  In order to be more efficient, I’d like to understand more about how errors creep into designs, so that they can be avoided in the future.

Early days in programming, syntax errors at compile time are more frequent, and many times they are a barrier – usually taking much less to debug than runtime errors, but time consuming nevertheless.

Compile Errors – Header

  • include the wrong header file
  • delay() not in scope (need to add <Arduino.h>
  • include header file after reference to type
  • not include header file for each function
  • no need to include file if in same folder as .ino file
  • SoftwareSerial object not declared in this scope (resolved by passing class objects as parameters)

Compile Errors – Scope

  • variable scope defined inside case statement (should be outside)
  • typo – printLN, should be println
  • typo – used wrong variable name (buttonTime versus button1Time)

Installation Errors

  • Should install ubuntu applications in Home, not in Downloads

Runtime Errors

  • Logical error – ‘getAge’ object should not be called until button pressed and flag set (keep logic simple)
  • Syntax error – did not update variable holding member data after updating it (avoid new variables)
  • Syntax error – referred to wrong member attribute (timePB versus _pinTime)

 

 

 

Posted in Arduino, How To, Problem Solving | Tagged , , | Comments Off

Arduino Installation IDE on Ubuntu 16.04

What a day installing and removing and installing the Arduino IDE on the new Z170/i5 computer that was built over the last three days.  I learned quite a bit on the journey and the purpose of this blog is to briefly highlight the steps and pitfalls.

  1. Downloaded Arduino IDE 1.7.10 for Linux64 (this was a mistake, because the Teensyduino application, which interfaces the IDE to Teensy 3.2 Arduinos is not compatible with 1.7, so I had to download 1.6.8).  READ ERROR MESSAGES from Teensyduino!
  2. Java was missing so I needed to install this – jre default
  3. Modified permissions of ‘dial out’ and ‘TTYACMO’ (note this varies from install to install) READ ERROR MESSAGES!
  4. Got AVRDude error messages because I did not select the right processor (selected Pro Mini 168 and should have been 368)  READ ERROR MESSAGES!
  5. Installed 1.6.8, installed Teensyduino 1.28, and then 49 rules – I put the Arduino app in the Home folder to prevent R/W error messages when they were in usr/local (though I now discovered the issue was probably not protection, but that I did not have 1.6.8 downloaded)

Thanks to Sliverhoof on Reddit & Snackeye’s blog post on installing Arduino and Teensyduino.

Posted in Arduino, Commonplace, Hobbies, How To, Problem Solving, Projects | Tagged , , | Comments Off