Fork me on GitHub

Project Notes

#290 PissOff

An angry barking blue-in-the-face mad proximity sensor - Boldport Club Project #9, November 2016.

Here’s a quick video of it in action:

Build

Notes

PissOff is the Boldport Club Project #9 (November 2016). It is a collaboration with LuckyResistor.

The core subsystems of the project:

  • 3.3V linear regulator provides power for all components
  • SD card adapter for audio file retrieval
  • an infrared (IR) transmitter and receiver
  • audio mixer and low-pass filter
  • audio amplifier and speaker
  • ARM Cortex-M0+ microprocessor to tie it all together

PissOff_arrival

Parts

Ref Item Qty
IC2 Kinetis E series, ARM Cortex-M0+ SOIC20 32 bit MCU, NXP MKE04Z8VWJ4 x1
IC1 Audio power amplifier SOIC8 IC, TI TPA301DR x1
J9 microSD SMD card socket, MOLEX 1051620101 x1
VR1 50KΩ SMD trimmer, Bourns TC33X-2-503E x1
  29mm round speaker, Pro-signal ABS-205-RC x1
  3xAAA battery holder with switch, TruPower SBH431-1AS x1
IC3 3.3V LDO voltage regulator, Diodes AP2210K-3.3TRG1 x1
D1 5mm IR phototransistor (black lens), Multicomp OFT-5301 x1
D2 5mm IR diode (blue lens), Kingbright L-7113F3BT x1
IC4 n-channel SOT23 SMD MOSFET transistor, ON Semiconductor 2N7002ET1G x1
C4,6 0.1µF 0805 SMD ceramic capacitor, Multicomp MC0805B104K500CT x2
C1,2,3,5,7 1µF 0805 SMD ceramic capacitor, Multicomp MC0805F105Z160CT x5
R2,3,8,10,12,13,14,15,16,18,19 8.2KΩ 0805 SMD resistor, Multicomp MCWR08X8201FTL x11
R4,6,7,22,23 1KΩ 0805 SMD resistor, Multicomp MCWR08X1001FTL x5
R9,11,spare 220Ω 0805 SMD resistor, Multicomp MCWR08X2200FTL x3
R1,5,20,21,24,25,26 47KΩ 0805 SMD resistor, Multicomp MCWR08X4702FTL x7
R17 33Ω through-hole resistor, Multicomp MF25 33R x1
D3 Yellow 0805 SMD LED, Kingbright KPT-2012YC x1
  20AWG wire, Belden 566-8020 14cm

PissOff_parts

Using Solder Paste and Stencils

While you can hand-solder the project, it also presents a nice opportunity to experiment with reflow techniques.

I found this great tutorial from sparkfun, everything I need to know to do a decent job of my first reflow with stencil:

Stenciling Tutorial

Reflow Assembly

I decided to try my hand at some reflow. I’m using the stencil from OSH Stencils, some 63/37 solder paste and a hand-held hot air gun.

Stencil and board taped down with kapton in an ad-hoc PCB frame:

assembly_setup

Solder paste applied, all components mounted:

assembly_placement

After reflow with hand-held hot-air gun:

assembly_reflow

At this stage I did a full continuity check on all soldered components to make sure the reflow had produced reliable connections. I only found two problems:

  • one of the capacitors got dislodged at some point and wasn’t properly connected on one terminal
  • pin 11 of the microprocessor wasn’t making a good connection

No problem - couple of dabs of solder paste and reflow - now all good!

Overall, the reflow assembly process worked brilliantly:

  • much faster than I could have done it by hand soldering with an iron
  • I doubt I could have soldered the SD card socket by hand without a great deal of pain
  • the final result looks great - almost like it came out of a factory

Next to final assembly:

  • through-hole components with an iron
  • hot-glue for the speaker and battery pack attachment

And here it is, ready to test:

PissOff_build

Code

The microcontroller comes preloaded with the correct code, and works out of the box. To investigate the sources, or compile a derivitive work, see the source code on GitHub.

First I’ll get this started with the preloaded code…

Preparing the SD Card

@fuchs has provided a PissOff default disk image with a barking dog sound. The RaspberryPi guide to installing disk images is a good resource for instructions no how to prepare the SD card. I’m using a Mac, so these are the appropriate instructions.

Using Disk Utility to verify and identify the SD card:

sd_verify

First Attempt

I first tried with a very old 128MB microSD card, formatted as “MS-DOS (FAT)” in the MacOSX Disk Utility tool.

Copying the disk image to the device:

$ diskutil list
...
/dev/disk3
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *127.1 MB   disk3
   1:                 DOS_FAT_32 UNTITLED                127.1 MB   disk3s1

$ diskutil unmountDisk /dev/disk3
Unmount of all volumes on disk3 was successful

$ sudo dd bs=1m if=disk.img of=/dev/rdisk3
0+1 records in
0+1 records out
342016 bytes transferred in 0.026458 secs (12926740 bytes/sec)

$ diskutil eject /dev/disk3
Disk /dev/disk3 ejected

So far so good, but no sound when I try it in the PissOff.

Note: read on for two solutions and the underlying problem finally identified and resolved.

Serial Debugging

Time to connect up a serial debugger! Serial connections are on J4. The PCB conveniently has offset holes, so a pin header can be simply inserted with press-fit. I’m using a USB Serial adapter with a 3.3v logic level mode. Only 3 wire connections are required:

USD Serial Adapter J4
RXD tx
TXD rx
GND gnd

Here is the adapter connected:

PissOff_serial_debug

The problem is immediately apparent. The disk is mounted but the processor can’t read any blocks. The troubleshooting guide is a good reference for the debug interface.

sd_fail

Second Attempt

From reports I’ve seen in the Boldport Slack, not all SD cards work with the PissOff. The main factor seems to be older/smaller capacity cards that probably don’t support SDHC correctly.

So I tried again with a newer 64Gb SD card, formatted as “MS-DOS (FAT)” in the MacOSX Disk Utility tool:

$ diskutil list
...
/dev/disk3
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *67.1 GB    disk3
   1:                        EFI EFI                     209.7 MB   disk3s1
   2:       Microsoft Basic Data TEST                    66.9 GB    disk3s2

$ diskutil unmountDisk /dev/disk3
Unmount of all volumes on disk3 was successful

$ sudo dd bs=1m if=disk.img of=/dev/rdisk3
0+1 records in
0+1 records out
342016 bytes transferred in 0.026458 secs (12926740 bytes/sec)

$ diskutil eject /dev/disk3
Disk /dev/disk3 ejected

And it works! Here’s the serial debug output for an alarm sequence:

sd_success

Trying again with an old SDIO Card

Here’s why the BoldportClub slack channel rules: the SD card support issue was finally resolved by @pastva:

I found why pissoff can't play files from small cards (2GB).
Serial debug revealed that READ_MULTIPLE_BLOCK (CMD18) returns error code.
I found that SDHC cards are addressed in terms of 512 byte blocks, non SDHC card expects byte address.
To fix it SDcard::startMultiRead method has to multiply startBlock by 512 for non SDHC cards (or << 9).

Then @fuchs created a non-SDHC card image: piss-off-disk-no-hc

I tried this image with the 128Mb SDIO card (that failed in my first attempt), and it works just fine!

Copying the image to the SD card:

$ diskutil list
...
/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *127.1 MB   disk2
   1:                 DOS_FAT_32 UNTITLED                127.1 MB   disk2s1
$ diskutil unmountDisk /dev/disk2
Unmount of all volumes on disk2 was successful

$ sudo dd bs=1m if=disk_non_hc.img of=/dev/rdisk2
0+1 records in
0+1 records out
342016 bytes transferred in 0.274037 secs (1248064 bytes/sec)

$ diskutil eject /dev/disk2
Disk /dev/disk2 ejected

Successful initialisation and alarm with the new image on a very old 128Mb SD card:

sd_success_no_hc

So it turns out my older (failing) SD cards only supported SDIO, not SDHC.

Schematics

The schematic is nicely documented on the card includedin the kit. Note two errata:

  • the IR LED is labelled D2 on the schematic but D5 on the PCB silkscreen
  • IC2 pin labelling is a little off in the schematic: missing PTB4; PTB5,6,7 offset by one and an erroneous “Enable” label inserted

Schematic-p1 Schematic-p2

As part of verifying the circuit, I redrew the schematic in Fritzing:

Schematic

Credits and References

About LEAP#290 BoldportPCB DesignNXP

This page is a web-friendly rendering of my project notes shared in the LEAP GitHub repository.

Project Source on GitHub Return to the LEAP Catalog
About LEAP

LEAP is my personal collection of electronics projects - usually involving an Arduino or other microprocessor in one way or another. Some are full-blown projects, while many are trivial breadboard experiments, intended to learn and explore something interesting.

Projects are often inspired by things found wild on the net, or ideas from the many great electronics podcasts and YouTube channels. Feel free to borrow liberally, and if you spot any issues do let me know or send a pull-request.

NOTE: For a while I included various scale modelling projects here too, but I've now split them off into a new repository: check out LittleModelArt if you are looking for these projects.

Project Gallery view the projects as an image gallery Notebook reference materials and other notes Follow the Blog follow projects and notes as they are published in your favourite feed reader