Simple DIY Electronic Music Projects<p><strong>Pico Touch Board Audio</strong></p><p>I wanted to go back to my <a href="https://diyelectromusic.com/2025/03/02/pico-touch-board-pcb-design/" rel="nofollow noopener noreferrer" target="_blank">Pico Touch Board PCB Design</a> and see if there was a way to make it more stand-alone. The original design was to make it a MIDI controller, but that isn’t the only option.</p><p><a href="https://makertube.net/w/tADSyrPrUdR1mx7yKRXZTC" rel="nofollow noopener noreferrer" target="_blank">https://makertube.net/w/tADSyrPrUdR1mx7yKRXZTC</a></p><p><em><strong>Warning!</strong> I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!</em></p><p>These are the key Arduino tutorials for the main concepts used in this project:</p><ul><li><a href="https://diyelectromusic.com/2025/03/02/pico-touch-board-pcb-design/" rel="nofollow noopener noreferrer" target="_blank">Pico Touch Board PCB Design</a></li><li><a href="https://diyelectromusic.com/2021/07/11/arduino-pwm-output-filter-circuit/" rel="nofollow noopener noreferrer" target="_blank">Arduino PWM Output Filter Circuit</a></li></ul><p>If you are new to microcontrollers, see the <a href="https://diyelectromusic.wordpress.com/getting-started/" rel="nofollow noopener noreferrer" target="_blank">Getting Started</a> pages.</p><p><strong>Parts list</strong></p><ul><li><a href="https://diyelectromusic.com/2025/03/02/pico-touch-board-pcb-build-guide/" rel="nofollow noopener noreferrer" target="_blank">Pico Touch Board PCB</a> – built</li><li>Resistors: 1x 220Ω, 1x 1K</li><li>Capacitor: 1x 100nF ceramic, 1x 22uF electrolytic</li><li>Breadboard and jumper wires</li></ul><p><strong>The Circuit</strong></p><p>Most of the GPIO are linked out to the touch pads, but the three analog inputs are still available. They are added on to the header on the right hand side of the board at the top, so we can use one of these as an audio output.</p><p>Initially, I thought of connecting it to an 8Ω speaker. If I was using an Arduino then I’d use a 220Ω resistor in series to limit the current to less than 20mA. But as I’m using a Pico, the maximum current has to be a lot less. I seem to recall it is a little complicated, and there are some options, but I have a figure of around 4mA that I tend to work to. It is also running at 3.3V, which means that it would need an in series resistor of 3.3 / 0.004 = 825Ω. This would work, but the speaker will be really quiet!</p><p>So I ditched that idea (there is a software reason too, but I’ll talk about that in a moment) and went straight to a PWM output with a low-pass filter to try to give me some vaguely useful as a line-out signal.</p><p>I’ve not done the calculations, but instead went a bit “hand-wavy”, combing a 1K and 220Ω resistor to drop the voltage, along with a 100nF capacitor. I’ve also added a 22uF capacitor to remove the DC bias.</p><p>That seems to give me something useful, but as you can see from the trace below of a square wave PWM output, there is a lot of room for improvement!</p><p><strong>The Code</strong></p><p>I wanted to stick with Circuitpython, so my initial thought was to use simpleio.tone() to generate a tone based on a frequency from an IO pin. However, this has the problem that the code is blocking whilst the tone is playing which isn’t very useful.</p><p>Instead I went straight to synthio. It turns out that using synthio was actually a lot easier than the “simple” simpleio…</p><p>Here is the basic code to generate an ASR-shaped square wave on a PWM audio output on GPIO 28 based on the touch pads as input.</p><pre>import board<br>import touchio<br>import synthio<br>import audiopwmio<br>from adafruit_debouncer import Debouncer, Button<br><br>audio = audiopwmio.PWMAudioOut(board.GP28)<br>synth = synthio.Synthesizer(sample_rate=22050)<br>audio.play(synth)<br>synth.envelope = synthio.Envelope(attack_time=0.1, release_time=0.6, sustain_level=1.0)<br><br>touchpins = [<br> board.GP2, board.GP3, board.GP4, board.GP5,<br> board.GP6, board.GP7, board.GP8, board.GP9,<br> board.GP10, board.GP11, board.GP12, board.GP13,<br> board.GP14, board.GP15, board.GP16, board.GP17,<br> board.GP18, board.GP19, board.GP20, board.GP21, board.GP22<br>]<br><br>THRESHOLD = 1000<br>touchpads = []<br>for pin in touchpins:<br> t = touchio.TouchIn(pin)<br> t.threshold = t.raw_value + THRESHOLD<br> touchpads.append(Button(t, value_when_pressed=True))<br><br>while True:<br> for i in range (len(touchpads)):<br> t = touchpads[i]<br> t.update()<br> <br> if t.rose:<br> synth.press(60+i)<br><br> if t.fell:<br> synth.release(60+i)</pre><p><strong>Battery Power</strong></p><p>One last thing I wanted to explore was if it was possible to power the touchboard with batteries. I left in a number of power options, so for this one I’m using the 5V/GND pin header. I’ve included a couple of capacitors for smoothing, and need to add the 1N5817 diode as shown below.</p><p>This requires the following additional components:</p><ul><li>1x 1N5817 Schottky diode.</li><li>1x 100nF ceramic capacitor.</li><li>1x 47uF electrolytic capacitor.</li><li>Jumper wires.</li><li>3 or 4 battery box.</li></ul><p>The 5V/GND header pins connect to the Raspberry Pi Pico’s VSYS pin via the Schottky diode. The 1N5817 has a typical voltage drop of 0.45V, so combined with the Raspberry Pi’s accepted input voltage of 1.8V to 5.5V this means that ideally two or three AA batteries (at 1.5V each) would work. Four 1.2V rechargeables might be an option too.</p><p>It might be possible to get away with four 1.5V AAs, but that would give an input voltage of just over 5.5V, so I think that is probably pushing things too far. It might be a good use for some spent AAs though that are no longer reading a full 1.5V…</p><p>One of the downsides of battery power is that the touch works best when your fingers are at the same GND potential as the board. It works best if the GND pin of the (unpopulated) barrel jack is touched when using the board.</p><p><strong>Closing Thoughts</strong></p><p>With hindsight it would have been useful to have included a simple PWM output stage on the original board, but it is relatively straight forward to add one.</p><p>It might even be worth me making an add-on board that will connect to the header pins of the power and analog pins containing the simple passive filter components.</p><p>What is pretty impressive though, is how easy it is to use synthio with Circuitpython.</p><p>Kevin</p><p><a rel="nofollow noopener noreferrer" class="hashtag u-tag u-category" href="https://diyelectromusic.com/tag/circuitpython/" target="_blank">#circuitpython</a> <a rel="nofollow noopener noreferrer" class="hashtag u-tag u-category" href="https://diyelectromusic.com/tag/pwm/" target="_blank">#pwm</a> <a rel="nofollow noopener noreferrer" class="hashtag u-tag u-category" href="https://diyelectromusic.com/tag/raspberry-pi-pico/" target="_blank">#raspberryPiPico</a> <a rel="nofollow noopener noreferrer" class="hashtag u-tag u-category" href="https://diyelectromusic.com/tag/synthio/" target="_blank">#synthio</a> <a rel="nofollow noopener noreferrer" class="hashtag u-tag u-category" href="https://diyelectromusic.com/tag/touch/" target="_blank">#touch</a></p>