Near Field Audio Speaker
Project data
Status Implemented
Made Yes
Tools soldering iron, 3d printer
Uses Speaker, Near Field Audio Receiver
OKH Manifest Open Know-How Manifest Download

"Implemented" is not in the list (Idea, Designed, Modelled, Prototyped, Verified, Deployed, Commercialized) of allowed values for the "Status" property.

The goal of this project is to create an open source portable speaker utilizing Near Field Audio as its primary input source.

Background and Problem Statement[edit | edit source]

Most portable speakers operate wirelessly via the Bluetooth communication protocol. Near Field Audio is an alternative technology that sacrifices range for power efficiency and cost effectiveness. It also allows for devices not compliant with Bluetooth to be used assuming they have a speaker output of their own. The goal of this project is to create a portable speaker utilizing Near Field Audio as its primary input source. The box is designed in FreeCAD and completely 3D printed making modification simple.

Goals[edit | edit source]

To realize this Near Field Audio Speaker, the following goals should be met

  • The project must be simple and have a low barrier to replication
  • Any parts used must be 3D printed or readily accessible
  • The cost to build the speaker must be $100 or less
  • The project must be open source

Construction Choices[edit | edit source]

Electronics[edit | edit source]

To receive audio wirelessly a receiver is needed. With Near Field Audio (NFA) this is done via an electromagnet. In the case of this project, a 5mm in diameter 8mm length piece of soft iron was wrapped in ~4000 turns of 42 AWG enameled copper wire. While this was constructed in house, similar electromagnets can be found online for purchase. For it to receive a signal simply output an electromagnetic signal from another device in close proximity (5cm in this case). For the purposes of this project the electromagnetic signal is output from a phone speaker.

The power of the signal the received is too low for direct audio reproduction, meaning amplification is needed. Any digital audio amplifier should work. For this project a PAM8403 was used as it is low power, efficient, and inexpensive. Any other digital audio amplifier should accomplish the same thing, but would have different power requirements thus requiring different parts for power delivery. Attaching the receiver to the input of the PAM8403 allows for greatly amplified audio playback.

The power requirements of the PAM8403 are quite small, only requiring a stable 5V input. This was achieved via 3.7V Lipo battery and DC-DC voltage booster. Charging the battery is done via a Lipo charging board matching the requirements of the battery. For this project a MT3608 was used to charge the battery while a TP4056 was used to boost the voltage back to 5V. Both parts were chosen for their availability and low cost.

Of course to actually produce any sound speaker drivers are needed. In our case with the PAM8403 we are limited to two 3W 4 Ohm speaker drivers if we want to access their full power. With the parts chosen here, the playback is substantially amplified with good audio quality.

It also is a good idea to include an on/off switch, capacitor in parallel with PAM8403 power input, and some polyfil.

Box[edit | edit source]

The speaker box is made of both 100% infill PETG and bronze infused PLA. This design choice is intended to reduce unintentional resonance. Each side on the speaker is its own printable model to allow for easy printing and construction. All panels are 0.25 inches thick except for the back, that being 0.1 inches thick.

Box Parts[edit | edit source]

Bottom Panel
Front Panel
Side Panel
SideIO Panel
Top Panel
Back Panel
Receiver Stand

Validation[edit | edit source]

The speaker has been tested by comparing its wireless and wired input frequency response. This was primarily done through an Arduino NANO and the Arduino FHT library as well as an FFT capable oscilloscope. The speaker is proven to be accurate between 200Hz and 16KHz for wireless input and between 200Hz and 18KHz wired at minimum.

200Hz Wireless Input
200Hz Wired Input
2000Hz Wireless Input
2000Hz Wired Input
16KHz Wireless Input
16KHz Wired Input

Validation Code[edit | edit source]

/*
fht_adc_serial.pde
guest openmusiclabs.com 7.7.14
example sketch for testing the fht library.
it takes in data on ADC0 (Analog0) and processes them
with the fht. the data is sent out over the serial
port at 115.2kb.
*/
# define LIN_OUT 1 // use the lin output function
# define FHT_N 256 // set to 256 point fht
# include <FHT.h> // include the library

void setup() {
	Serial.begin(115200); // use the serial port
	TIMSK0 = 0; // turn off timer0 for lower jitter
	ADCSRA = 0xe5; // set the adc to free running mode, clock divided by 32 for a sample rate of ~33.5KHz
	ADMUX = 0x40; // use adc0
	DIDR0 = 0x01; // turn off the digital input for adc0
}

void loop() {
	while(1) { // reduces jitter
		cli();	// UDRE interrupt slows this way down on arduino1.0
		
		for (int i = 0 ; i < FHT_N ; i++) { // save 256 samples
			while(!(ADCSRA & 0x10)); // wait for adc to be ready
			ADCSRA = 0xf5; // restart adc
			byte m = ADCL; // fetch adc data
			byte j = ADCH;
			int k = (j << 8) | m; // form into an int
			k -= 0x0200; // form into a signed int
			k <<= 6; // form into a 16b signed int
			fht_input[i] = k; // put real data into bins
		}
		fht_window(); // window the data for better frequency response
		fht_reorder(); // reorder the data before doing the fht
		fht_run(); // process the data in the fht
		fht_mag_lin(); // take the output of the fht
		sei();
		//Serial.println("start");
		for (byte i = 0 ; i < FHT_N/2 ; i++) {
			Serial.print(fht_lin_out[i]); // send out the data
			Serial.print(" ");
		}
		Serial.println();
	}
}

Future Development[edit | edit source]

Project development has concluded, but there remains possible improvements.

  • Reduce receiver strength slightly to reduce noise
  • Implement faraday cage doubling as speaker driver grill
  • Add 3.5mm output
  • Reduce box panel depth to 0.1 inches and print solely in metal infused filament
  • Combine receiver stand and left side panel
  • redimension box to make better use of volume

Bill Of Materials[edit | edit source]

To build a Near Field Audio Speaker of the same spec, the following parts are necessary:

Name Cost
PAM8403 $4
Pair of 3 W 4 Ohm Speaker Drivers $10
TP4056 $6
MT3608 $5
3.7 V 2200 mAh Li-Po battery $13
Equivalent Electromagnet $5
Total ~ $43

The price calculated here is a high estimate. All of these parts are cheaply available with the caveat of a longer shipping time.

Circuit Layout[edit | edit source]

To assemble, the following basic schematic can be followed.

Speaker Circuit

Acknowledgements[edit | edit source]

The Near Field Audio Speaker team would like to thank Dr. Shane Oberloier for greatly aiding in many design choices as well as sourcing tools and resolving many project roadblocks. The team would also like to thank the OSHE LiDAR team for leaving there miniUSB cable in the lab when we forgot ours. The team would also like to thank Nicholas Whisman for allowing us to use one of his Arduino NANOs. The team would also like to thank Katty and Jon Neill for inspiring this project.

Page data
Type Project
Keywords speaker, near field audio, nfa, near field, near field audio speaker, induction speaker
Published 2021
License CC-BY-SA-4.0
Affiliations Michigan Tech Open Source Hardware Enterprise
Impact Number of views to this page and its redirects. Updated once a month. Views by admins and bots are not counted. Multiple views during the same session are counted as one. 18
Cookies help us deliver our services. By using our services, you agree to our use of cookies.