WS2812B Neopixels were used for this project. These LEDs contain an IC that allows for each LED to be individually addressable. This is ideal for showing the volume of each individual frequency band by turning on additional LEDs as volume increases.
The MSGEQ7 chip is a CMOS IC that is essential for audio equalization. Using an audio input, the chip splits the frequency spectrum into a set of 7 frequency bands. After the passband filters divide the spectrum into the seven bands, peak detectors establish the DC values that will be passed when a multiplexed band is selected. The DC output is then sent to the microcontroller through IC pin 3.
The bands are read by reading the lowest frequency band and passing a DC value to the microcontroller. The chip Strobes and the next frequency band is read on the rising edge. This is continued until all 7 bands have been read. The chip is then Reset.
To build the circuit, the msgeq7 datasheet revealed the supporting resistors and capacitors needed externally to use the chip. This simply consisted of a filtering capacitors and current limiting resistors placed throughout the circuit. Below is a capture taken straight from the msgeq7 datasheet. It contains the suggested hardware implementation for utilizing the chip.
After creating the schematic, each pin was referenced to a specific pin on an Arduino Uno. This microcontroller has the same microprocessor and pinout, but also has much more open-source support. Below is the schematic our team created for tying the msgeq7 chip circuitry into an arduino uno pinout to match the Xplained Mini board.
To create the printed circuit board (PCB) layout, Upverter.com contained a library with an Arduino Uno body with correctly placed headers. This allowed for the msgeq7 circuitry to be placed onto the forked Uno layout. The final result is an equalizer shield for an Arduino Uno that has stereo inputs. The top copper of the single sided PCB was poured to connect a common ground for the schematic. This allowed for maximum heat dissipation as well as fewer traces to map. Below is the PCB layout our team created for our equalization board. This allows the user to use this board as a shield for the Xplained Mini or an Arduino Uno.
When coming up with the design of the piano, we wanted to be able to cover one octave of naturals, the white keys on a piano, and be able to change the octave that is being played, as a standard piano has seven. As such, we would need eight pushbuttons to serve as our keys and either a seven or eight position rotary switch to be able to change the octave. LEDs were also implemented after the switches to show the user which tone is played from the buzzer.
The switch and LED series was created by putting 5V on one leg of the switch and a 220Ω resistor on the opposite corner. This resistor is then in series with the anode of the LED and a wire connecting to the ATMega328P board. Another 220Ω resistor is placed between the cathode of the LED and connected to ground. The configuration of the LED is key as current can only flow from the anode to the cathode of a diode. In the initial design, there was not a resistor between the cathode and ground. The LED would light up, but a sound would not consistently come from the buzzer. Placing the second resistor resulted in a tone being played every time the button was pressed. The LED also served to let us know when the tone would be played. The signal that the board receives from pressing the button is a square wave with either a value of 1 or 0. The LED is on when the value is 1 and off when it is 0, the speaker plays the tone during the falling edge of the wave. In other words, when the wave drops from 1 to 0, the proper tone is played. These are all plugged into pins PD0-PD7.
The transistor is needed to control when the solenoid retracts from lock into unlock. 12 Volt 1.25 A power supply required because the specific solenoid used operates with 12 Volt 1 A. The 12 key keypad uses up seven pins and connected to PortD. DDRD was set to receive input from 12 key keypad and outputs on pin connected to transistor and for servo rotations, PortA and Port B set to output.
The fundamental principle behind the laser harp is that a laser shines on a photoresistor making the resistance in the photoresistor close to 0 ohm, and when the a finger is blocking the laser from making contact with the photoresistor, the resistance goes to almost 200k ohm. By using the photoresistors as pulldown resistors in parallel with another set of resistors, the voltage divider rule can be applied to determine what the voltage values will be when the laser is broken. High and low voltages can be sent to the Atmega328p to determine when to play a note.
Continue reading Laser Harp – Schematic
Schematic representing SIMON deep neural network used to categorize images:
Schematic and picture of SIMON Xplained Mini board and LCD display module in final configuration:
Flowchart diagram for high-level SIMON product description:
Here we have our circuit schematic for our project. Initially designed by Evan McManus and drawn in AutoCAD 2019 by Brian Popham.
And here is a picture of the project:
To give a brief explanation of the project, we are using two SN76489AN PSGs (Programmable Sound Generators) to output 6 square waves channels, and two noise channels, which is driven by an independent Crystal Oscillator. We are using the Arduino based Teensy 3.5 board to receive native USB MIDI events. Our code is set to handle these events when they occur, such as Note On or Note Off, and will then interpret the messages, translate them into data the PSGs can read, and then output them to the PSGs. This is then handled by the PSGs, which then sends audio data to a 3.5 mm jack with bridged audio connections.
Still with us? If so, congrats!
You survived! Hope you enjoy our project!
To display the fft output values, a setBar function was created. This function receives the value for which frequency column to modify and the data for that frequency set. Six strip color variables are set corresponding to the six rows of the LED grid along with a variable threshold for modifying gain. Because the LEDs follow a zig-zag pattern, the LED position values increase for every other column and decrease for the rest as you count from the base of the enclosure to the top. This can be illustrated through a table.
54 53 . . . . . . 18 17 6 5
55 52 . . . . . 19 16 7 4
56 51 . . . . . 20 15 8 3
57 50 . . . . . . 21 14 9 2
58 49 . . . . . . 22 13 10 1
59 48 47 36 35 24 23 12 11 0
An issue arises if you set the LED n value to the column number multiplied by 6. This will invert the direction of the column lighting in every odd numbered column. To address this, the odd numbered columns have a bottom LED value of 6*column+5 which correctly sets the second column base LED n value to 11 (1*6+5). Then you count down as you increase in the column.
To create our circuit for the temperature controlled DC fan, we built off the existing schematics used in labs 3 and 4. Our hardware includes an LCD, AtMega 328p board, temperature controlled sensor, fan, battery pack, transistor, two diodes, and multiple resistors at varying resistances. Challenges encountered wile wiring the circuit included changing our original plan to run the whole circuit off of the 6V battery pack. We found that this set up was not achievable due to the fan needing to pull more voltage from the circuit than we intended. To combat this issue, we decided to run just the fan off of the 6V battery pack and run the remainder of the circuit off of the USB. After much trial and error working with our circuit and varying resistors, we were able to find the optimal set up for the transistor used in the circuit while also finding that we needed to replace our original fan with a smaller spare fan that was in the lab room.
Each controller consisted of one XplainedMini board and a sliding potentiometer mounted in a wooden casing. The sliding potentiometer was a PS45L-R02BR10K model which varied resistance from 0-10kΩ, with a sliding range of 45mm. It was chosen because the range of resistance was broad enough to produce many values, allowing the virtual paddle to move in “real time”. Another reason this specific potentiometer was used was its visual appeal and compatibility with a breadboard. The ability to easily insert and remove the device streamlined the design process, where any shortcomings could be easily corrected. A 10kΩ resistor was connected, in series, to the potentiometer’s voltage pin. This extra resistor was used to vary the voltage; without it, the voltage would have been a constant +5V and the virtual paddles would not move.