Using Mozzi Library With 5 Potentiometers

by Dorahan in Circuits > Arduino

63463 Views, 180 Favorites, 0 Comments

Using Mozzi Library With 5 Potentiometers

IMG_20140509_185155.jpg

Getting Started

The goal of this project was to create filters and controls to that can manipulate sound that is being generated through an Arduino. Normally Arduino can only generate simple tones that are not useful if you are trying to achieve complex sounds and do sound manipulation. In order to do this project Mozzi library was used. This library helps Arduino to create complex sounds and also have real time input. Mozzi does all the job for you in the background with a non-blocking code that allows you to have multiple inputs at the same time.


What you need

  1. Arduino
  2. Mozzi Library
  3. 100K Potentiometes - x5
  4. Male headers
  5. Female headers
  6. 1/8" Audio Jack
  7. Audio Cable
  8. Speaker


What is an Arduino?

Arduino is a tool for making computers that can sense and control more of the physical world than your desktop computer. It's an open-source physical computing platform based on a simple microcontroller board, and a development environment for writing software for the board.

Arduino can be used to develop interactive objects, taking inputs from a variety of switches or sensors, and controlling a variety of lights, motors, and other physical outputs. Arduino projects can be stand-alone, or they can communicate with software running on your computer (e.g. Flash, Processing, MaxMSP.) The boards can be assembled by hand or purchased preassembled; the open-source IDE can be downloaded for free.

For more information check out:

http://arduino.cc/en/Guide/Introduction

Setting Up Mozzi Library

Screen Shot 2014-05-16 at 8.56.07 PM.png

What is Mozzi?

Currently your Arduino can only beep like a microwave oven. Mozzi brings your Arduino to life by allowing it to produce much more complex and interesting growls, sweeps and chorusing atmospherics. These sounds can be quickly and easily constructed from familiar synthesis units like oscillators, delays, filters and envelopes. You can use Mozzi to generate algorithmic music for an installation or performance, or make interactive sonifications of sensors, on a small, modular and super cheap Arduino, without the need for additional shields, message passing or external synths.

Check out Mozzi:

http://sensorium.github.io/Mozzi/

Download Mozzi Library:

http://sensorium.github.io/Mozzi/

Setting Up

Once you download the Mozzi library, unzip the file and put it in your Arduino➞libraries folder. Quit Arduino (if open) and reopen it. You should now be able to see Mozzi in the list under Arduino➞Sketch➞Import Library and also under the examples.

Putting It Together - 1

5376e2fd26ece28a4e00003e.jpg
5376e27126ece21f7c000031.jpg
5376e38d26ece2bc3700002a.jpg
IMG_20140506_210037.jpg
IMG_20140506_211316.jpg
IMG_20140506_211750.jpg

Potentiometers

First get 5 pairs of 100K potentiometers. The middle output of the potentiometer is always the analog output. The other 2 outputs on the left and right are either power (5V) or ground. Solder your red, black and white wires on to the potentiometers. After get enough of male headers and solder them to the ends of each wire. This will make it easier to put it together on the Arduino afterwards. The reason that I did not solder the wires on a proto shield is to make it removable so it can be replaced with a different kind of input like sensors.

Putting It Together - 2

IMG_20140506_202308(2).jpg
IMG_20140506_211210.jpg
IMG_20140506_211421.jpg
IMG_20140506_212447.jpg
IMG_20140506_214205.jpg

Audio

Get your Audio Jack and solder a white wire to one of the positive outputs and solder the black wire to the negative output. After solder male headers to each end of the wires, same as the ones we did for the potentiometers.

To figure out the positive and negative outputs of the Audio Jack, check out these images:

Audio Jack image 1

Audio Jack image 2

Female headers

I created this part to have a terminal where I can connect all my power or my ground connections, but this is not the best way of doing it. I would recommend using an Arduino proto shield with a breadboard to connect everything together. If you would like to do it the quick and easy way I did it, then solder the bottom parts of the female headers together so they all connect with each other. After solder on male header to the bottom to connect it to the Arduino.

Connect All the Pieces

5376ef8b26ece28b71000086.jpg
IMG_20140509_185210.jpg

  1. First of all connect all of your potentiometers to Arduino. Get all the white wires and connect them to the ANALOG IN starting from A0 up to A4. It does not matter which potentiometer comes first.
  2. Connect all the black wires to one of the terminals we have created and connect that terminal to Ground (GND) on the Arduino.
  3. Connect all the red wires to the other terminal and connect that one to Power (5V).


Connect the Audio parts

Get the Audio Jack you have soldered the wires on and connect the white wire to pin ~9 on the DIGITAL (PWM~). After connect the black wire to the Ground terminal where we connected all the other black wires on or to any other Ground (GND) pin.

Now your audio output is almost ready. Plug in one end of your audio cable to your audio jack and the other end to your speaker.

Upload and Run the Arduino Sketch

I have used an already existing sketch (code) from the Mozzi library that only works with 3 inputs. I tweaked the code a little bit and added more inputs to manipulate and control the sound.

Open up your Arduino software and open the example sketch: File ➞ Examples ➞ Mozzi ➞ Knob_LightLevel_x2_FMsynth

Upload and run the sketch.

Your first 3 potentiometers will be able to control 3 different effects.

  1. Carrier Frequency
  2. Intensity
  3. Modulation Rate


Now downlod and upload the sketch I tweaked. In this sketch there are now 2 extra controls and also some value changes to the maximum and minimum control values for the initial 3 effects. One of the extra controls now effects the modulation and frequency level at the same time in a smaller scale enabling the new set of frequency scale to be generated.

int freqVal = mozziAnalogRead(LDR3_PIN); // value is 0-1023
int FRQ = mapThis(freqVal);

carrier_freq * mod_ratio * FRQ;

FRQ is the new control value that I added to the code.

The second control effect the intensity with a new scale of values.

int knob2 = mozziAnalogRead(LDR4_PIN); // value is 0-1023
int knob2Val = mapThis(knob2);
fm_intensity = ((long)LDR1_calibrated * knob2Val * (kIntensityMod.next()+128))>>8;

knob2Val is the control value.

Enjoy.