# Raspberry Pi Halloween Costume Detector

## Overview

![](https://cdn-learn.adafruit.com/assets/assets/000/140/817/medium800/camera_edited_P1480458.jpg?1761678316 )

Build a wise cracking skull to MC your Halloween costume party. This project uses a Raspberry Pi 5 paired with a NoIR PiCamera and speaker bonnet. The Pi runs a Python script with OpenCV person detection. When a person crosses paths with the skull, a picture is [sent to Claude](https://docs.claude.com/en/docs/build-with-claude/vision) with a prompt requesting a kind hearted corny dad joke about the person's Halloween costume. The returned joke is sent through [Piper text to speech](https://github.com/OHF-Voice/piper1-gpl/blob/main/docs/API_PYTHON.md) and played through a speaker attached to the speaker bonnet.

https://youtube.com/shorts/Obxy4AvCO1w

All of the electronics mount to the back of a 3D printed skull plate. A back plate with M3-sized standoffs encloses the build and helps it stand upright.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/820/medium640/camera_edited_P1480461.jpg?1761683845)

## Parts
Featured
### Raspberry Pi 5 - 4 GB RAM

[Raspberry Pi 5 - 4 GB RAM](https://www.adafruit.com/product/5812)
The Raspberry Pi 5&nbsp;is the newest Raspberry Pi computer, and the Pi Foundation knows you can always make a good thing _better_! And what could make the Pi 5 better than the 4? How about a&nbsp;_faster_ processor, USB 3.0 ports, and an updated Gigabit Ethernet chip with PoE...

Out of Stock
[Buy Now](https://www.adafruit.com/product/5812)
[Related Guides to the Product](https://learn.adafruit.com/products/5812/guides)
![Angled shot of green Raspberry Pi 5 microcontroller.](https://cdn-shop.adafruit.com/640x480/5812-01.jpg)

Featured
### Raspberry Pi Camera Module 3 NoIR - 12MP 75 Degree Infrared Lens

[Raspberry Pi Camera Module 3 NoIR - 12MP 75 Degree Infrared Lens](https://www.adafruit.com/product/5659)
Raspberry Pi Camera Module 3 is a compact camera from Raspberry Pi. It offers an IMX708 12-megapixel sensor with HDR&nbsp;and features phase detection autofocus. Camera Module 3 is available in standard and wide-angle variants, both of which are available with or without an infrared cut...

In Stock
[Buy Now](https://www.adafruit.com/product/5659)
[Related Guides to the Product](https://learn.adafruit.com/products/5659/guides)
![Top Down Close Up Shot of the Raspberry Pi Camera Module 3 NoIR - 12MP 75 Degree Infrared Lens.](https://cdn-shop.adafruit.com/640x480/5659-06.jpg)

Featured
### Adafruit I2S 3W Stereo Speaker Bonnet for Raspberry Pi

[Adafruit I2S 3W Stereo Speaker Bonnet for Raspberry Pi](https://www.adafruit.com/product/3346)
Hey Mr. DJ! Turn up that Raspberry Pi mix to the&nbsp;_max_&nbsp;with this cute **3W Stereo Amplifier Bonnet for Raspberry Pi**. (It's not big enough to be an official HAT, so we called it a bonnet, you see?) It's the exact same size as a Raspberry Pi Zero but works...

In Stock
[Buy Now](https://www.adafruit.com/product/3346)
[Related Guides to the Product](https://learn.adafruit.com/products/3346/guides)
![Angled shot of long, rectangular speaker breakout board with pre-soldered green terminal blocks.](https://cdn-shop.adafruit.com/640x480/3346-09.jpg)

Featured
### Mono Enclosed Speaker with Plain Wires - 3W 4 Ohm

[Mono Enclosed Speaker with Plain Wires - 3W 4 Ohm](https://www.adafruit.com/product/4445)
Listen up! This single&nbsp; 2.8" x 1.2" speaker&nbsp;is&nbsp;the perfect addition to any audio project where you need 4 ohm impedance and 3W or less of power. We particularly like these speakers as they are small and enclosed for good audio volume and quality. This speaker _does..._

In Stock
[Buy Now](https://www.adafruit.com/product/4445)
[Related Guides to the Product](https://learn.adafruit.com/products/4445/guides)
![Enclosed Speaker with wires](https://cdn-shop.adafruit.com/640x480/4445-01.jpg)

Featured
### Diffused 10mm LED Pack - 5 LEDs each in 5 Colors - 25 Pack

[Diffused 10mm LED Pack - 5 LEDs each in 5 Colors - 25 Pack](https://www.adafruit.com/product/4204)
Need some chunky indicators? We are big fans of these diffused LEDs. They are fairly bright, so they can be seen in daytime, and from any angle. They go easily into a breadboard and will add that extra zing to your project.

Now you can get a pack of 25 with 5 different...

Out of Stock
[Buy Now](https://www.adafruit.com/product/4204)
[Related Guides to the Product](https://learn.adafruit.com/products/4204/guides)
![scattered pile of multi colored unlit LEDs ](https://cdn-shop.adafruit.com/640x480/4204-00.jpg)

Featured
### Through-Hole Resistors - 220 ohm 5% 1/4W - Pack of 25

[Through-Hole Resistors - 220 ohm 5% 1/4W - Pack of 25](https://www.adafruit.com/product/2780)
ΩMG! You're not going to be able to resist these handy resistor packs!&nbsp;Well, axially, they&nbsp;do all of the resisting for you!

This is a **25 Pack of 220Ω Resistors.** More specifically, they are **carbon film** , through-hole...

In Stock
[Buy Now](https://www.adafruit.com/product/2780)
[Related Guides to the Product](https://learn.adafruit.com/products/2780/guides)
![Angled shot of 25 Through-Hole Resistors - 220 ohm 5% 1/4W.](https://cdn-shop.adafruit.com/640x480/2780-00.jpg)

### Raspberry Pi 5 FPC Camera Cable - 22-pin 0.5mm to 15-pin 1mm

[Raspberry Pi 5 FPC Camera Cable - 22-pin 0.5mm to 15-pin 1mm](https://www.adafruit.com/product/5819)
This **300mm&nbsp;long** &nbsp; **camera cable** &nbsp;is specifically designed to work with the&nbsp; **Raspberry Pi 5** &nbsp;series.&nbsp;Just plug it into your Pi 5's camera port and then the other end into one of the official&nbsp;<a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/5819)
[Related Guides to the Product](https://learn.adafruit.com/products/5819/guides)
![Angled shot of Raspberry Pi 5 connected to HQ camera.](https://cdn-shop.adafruit.com/640x480/5819-03.jpg)

### Official Raspberry Pi Power Supply 5.1V 3A with USB C

[Official Raspberry Pi Power Supply 5.1V 3A with USB C](https://www.adafruit.com/product/4298)
The official Raspberry Pi USB-C power supply is here! And of course, we have 'em in classic Adafruit black! Superfast with just the right amount of cable length to get your Pi 4 projects up and running!

Best for use with Pi 4 series, [Pi...](https://www.adafruit.com/product/5814)

Out of Stock
[Buy Now](https://www.adafruit.com/product/4298)
[Related Guides to the Product](https://learn.adafruit.com/products/4298/guides)
![Angled shot of Official Raspberry Pi Power Supply 5.1V 3A with USB C with Power plug facing down. ](https://cdn-shop.adafruit.com/640x480/4298-04.jpg)

### Silicone Cover Stranded-Core Wire - 30AWG in Various Colors

[Silicone Cover Stranded-Core Wire - 30AWG in Various Colors](https://www.adafruit.com/product/2051)
Silicone-sheathing wire is super-flexible and soft, and its also strong! Able to handle up to 200°C and up to 600V, it will do when PVC covered wire wimps out. We like this wire for being extremely supple and flexible, so it is great for wearables or projects where the wire-harness has to...

Out of Stock
[Buy Now](https://www.adafruit.com/product/2051)
[Related Guides to the Product](https://learn.adafruit.com/products/2051/guides)
![Silicone Cover Stranded-Core Wire - 30AWG in Various Colors laid out beside each other. ](https://cdn-shop.adafruit.com/640x480/2051-01.jpg)

### Multi-Colored Heat Shrink Pack - 3/32" + 1/8" + 3/16" Diameters

[Multi-Colored Heat Shrink Pack - 3/32" + 1/8" + 3/16" Diameters](https://www.adafruit.com/product/1649)
Heat shrink is the duct tape of electronics which I guess makes this heat shrink the colorful and exciting duct tape they sell&nbsp;at craft stores. &nbsp;This heat shrink comes in six different colors - red, blue, green, yellow, white and the traditional black.

Each pack contains ten...

Out of Stock
[Buy Now](https://www.adafruit.com/product/1649)
[Related Guides to the Product](https://learn.adafruit.com/products/1649/guides)
![Array of many colorful heatshrink tubes.](https://cdn-shop.adafruit.com/640x480/1649-00.jpg)

### Black Nylon Machine Screw and Stand-off Set – M3 Thread

[Black Nylon Machine Screw and Stand-off Set – M3 Thread](https://www.adafruit.com/product/4685)
Totaling **420 pieces** , this **M3 Screw Set** &nbsp;is a must-have for your workstation.&nbsp;You'll have enough screws, nuts, and hex standoffs to fuel your maker tendencies&nbsp;for days on end! M3 size screws fit a number of&nbsp;Adafruit breakout/dev board...

Out of Stock
[Buy Now](https://www.adafruit.com/product/4685)
[Related Guides to the Product](https://learn.adafruit.com/products/4685/guides)
![Opened box showing many nylon screws](https://cdn-shop.adafruit.com/640x480/4685-01.jpg)

### Black Nylon Machine Screw and Stand-off Set – M2.5 Thread

[Black Nylon Machine Screw and Stand-off Set – M2.5 Thread](https://www.adafruit.com/product/3299)
Totaling 380 pieces, this **M2.5 Screw Set** &nbsp;is a must-have for your workstation.&nbsp;You'll have enough screws, nuts, and hex standoffs to fuel your maker tendencies&nbsp;for days on end! M2.5 size screws fit almost all of the Adafruit breakout/dev board mounting holes...

Out of Stock
[Buy Now](https://www.adafruit.com/product/3299)
[Related Guides to the Product](https://learn.adafruit.com/products/3299/guides)
![Black Nylon Screw and Stand-off Set with M2.5 Threads, kit box](https://cdn-shop.adafruit.com/640x480/3299-00.jpg)

### Part: M2 Screws
quantity: 1
Assortment Kit
[M2 Screws](https://www.amazon.com/Hapric-Assortment-Machine-Stainless-Washers/dp/B0D3X33XGB/?th=1)

# Raspberry Pi Halloween Costume Detector

## Circuit Diagram

![](https://cdn-learn.adafruit.com/assets/assets/000/140/773/medium800/camera_halloweenSkullFritz_bb.jpg?1761332899 )

- Plug the Speaker Bonnet into the GPIO header on the Pi 5
- Plug the camera ribbon cable into camera port 0 on the Pi 5
- Speaker positive to speaker right + (red wire)
- Speaker negative to speaker right - (black wire)
- LED cathode to Pi GND (black wire)
- LED anode to 220Ω resistor (red wire)
- 220Ω resistor to Pi GPIO 5 (red wire)

# Raspberry Pi Halloween Costume Detector

## 3D Printing

![](https://cdn-learn.adafruit.com/assets/assets/000/140/791/medium800/camera_edited_P1480398.jpg?1761595284 )

You can 3D print all of the parts for this project.&nbsp;The STL files can be downloaded directly below or from Printables.

[Printables Download](https://www.printables.com/model/1462323-raspberry-pi-halloween-costume-detector)
[halloween-skull-CAD.zip](https://cdn-learn.adafruit.com/assets/assets/000/140/816/original/halloween-skull-CAD.zip?1761673031)
Three mounting plates secure the electronics hardware and attach them to the skull.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/815/medium640/camera_edited_P1480414.jpg?1761600125)

The back plate has standoffs to connect to the front skull plate with M3 screws and protect the electronics.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/814/medium640/camera_edited_P1480410.jpg?1761600092)

# Raspberry Pi Halloween Costume Detector

## Claude API Key

This project uses the Claude API to analyze the image of the Halloween costume and generate a dad joke about the costume. You'll need an [Anthropic Console account](https://docs.claude.com/en/docs/get-started) to follow these steps.

If you don't want to use the Claude API, the project has fallbacks to work without it. You just won't be able to generate custom jokes for each image.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/775/medium800/camera_Screenshot_2025-10-24_153918.png?1761334816 )

Info: You need to buy API credits before you can generate an API key.

Navigate to [https://console.anthropic.com](https://console.anthropic.com) and log into your console account. If you haven't done so, you'll need to add API credits to your account by clicking the " **Buy credits**" button. The project is designed to use a minimal number of credits, you shouldn't need more than $1 to $2.

After adding credits, you can click the **Get API Key** button.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/778/medium800/camera_Screenshot_2025-10-24_153206.png?1761335143 )

This brings you to the API keys page. Click the **+ Create Key** button.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/777/medium800/camera_Screenshot_2025-10-24_153247.png?1761335134 )

In the **Name your key: box** , give your API key a name. Then click **Add**.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/780/medium640/camera_Screenshot_2025-10-24_153415.png?1761335314)

Warning: You cannot view your API key again after closing the "Save your API key" window! Make sure you copy the key and save it somewhere safe.

This opens a windows with your API key. Click the **Copy Key button** to copy your key text and then make sure you save it somewhere. **You cannot view the key again after closing this window!**

![](https://cdn-learn.adafruit.com/assets/assets/000/140/781/medium640/camera_Screenshot_2025-10-24_153523.png?1761335352)

# Raspberry Pi Halloween Costume Detector

## Speaker Bonnet Setup

Warning: 

Danger: 

# Setup Virtual Environment

If you are installing on the Bookworm version of Raspberry Pi OS or later, you will need to install your python modules in a virtual environment. You can find more information in the&nbsp;[Python Virtual Environment Usage on Raspberry Pi](https://learn.adafruit.com/python-virtual-environment-usage-on-raspberry-pi)&nbsp;guide. To Install and activate the virtual environment, use the following commands:

```terminal
sudo apt install python3-venv
python -m venv env --system-site-packages
```

To activate the virtual environment:

```terminal
source env/bin/activate
```

# Installer script

Luckily its quite easy to install support for I2S DACs on Raspbian.

[These instructions are totally cribbed from the PhatDAC instructions at the lovely folks at Pimoroni!](http://learn.pimoroni.com/tutorial/phat/raspberry-pi-phat-dac-install)

Run the following from your Raspberry Pi with Internet connectivity:

```terminal
sudo apt install -y wget
pip3 install adafruit-python-shell
wget https://github.com/adafruit/Raspberry-Pi-Installer-Scripts/raw/main/i2samp.py
sudo -E env PATH=$PATH python3 i2samp.py
```

![](https://cdn-learn.adafruit.com/assets/assets/000/129/696/medium800/adafruit_products_quickinstall.png?1714405053)

We've added an extra helper systemd script that will play quiet audio when the I2S peripheral isn't in use. This removes popping when playback starts or stops. It uses a tiny amount of CPU time (on a Pi Zero, 5%, on a Pi 2 or 3 its negligible). You don't need this on RetroPie because it never releases the I2S device, but it's great for Raspbian.

![](https://cdn-learn.adafruit.com/assets/assets/000/066/516/medium800/adafruit_products_image.png?1543384670)

You will need to reboot once installed.

![](https://cdn-learn.adafruit.com/assets/assets/000/044/812/medium800/adafruit_products_reboot.png?1501791755)

Warning: 

After rebooting, log back in and re-run the script again...It will ask you if you want to test the speaker. Say **y** es and listen for audio to come out of your speakers...

![](https://cdn-learn.adafruit.com/assets/assets/000/044/813/medium800/adafruit_products_spkrtest.png?1501791845)

If it sounds really distorted, it could be the volume is too high. However, in order to have volume control appear in Raspbian desktop or Retropie you must reboot a second time after doing the speaker test, with **sudo reboot**

Warning: 

Once rebooted, try running **alsamixer** and use arrow keys to lower the volume, 50% is a good place to start.

If you're still having audio problems, try re-running the script and saying **N** (disable) the `/dev/zero playback service`.

You can then go to the next page on testing and optimizing your setup. Skip the rest of this page on **Detailed**  **Installation** if the script worked for you!

# Detailed Install

If, for some reason, you can't just run the script and you want to go through the install by hand - here's all the steps!

## Update /etc/modprobe.d (if it exists)

Log into your Pi and get into a serial console (either via a console cable, the TV console, RXVT, or what have you)

Edit the raspi blacklist with

```terminal
sudo nano /etc/modprobe.d/raspi-blacklist.conf
```

![](https://cdn-learn.adafruit.com/assets/assets/000/032/629/medium800/adafruit_products_blacklist.png?1464031033)

 **If the file is empty, just skip this step**

However, if you see the following lines:

`blacklist i2c-bcm2708`  
`blacklist snd-soc-pcm512x `  
`blacklist snd-soc-wm8804`

![](https://cdn-learn.adafruit.com/assets/assets/000/032/630/medium800/adafruit_products_empty.png?1464031122)

Update the lines by putting a **#** before each line

![](https://cdn-learn.adafruit.com/assets/assets/000/032/631/medium800/adafruit_products_blacklisted.png?1464031154)

Save by typing **Control-X Y \<return\>**

## Disable headphone audio (if it's set)

Edit the raspi modules list with

```terminal
sudo nano /etc/modules
```

 **If the file is empty, just skip this step**

However, if you see the following line:

`snd_bcm2835`

![](https://cdn-learn.adafruit.com/assets/assets/000/032/632/medium800/adafruit_products_sndmod.png?1464031844)

Put a **#** in front of it

![](https://cdn-learn.adafruit.com/assets/assets/000/032/633/medium800/adafruit_products_nosnd.png?1464031943)

and save with **Control-X Y \<return\>**

## Create asound.conf file

Edit the raspi modules list with

```terminal
sudo nano /etc/asound.conf
```

This file ought to be blank!

![](https://cdn-learn.adafruit.com/assets/assets/000/032/634/medium800/adafruit_products_newasound.png?1464032034)

Copy and paste the following text into the file

```auto
pcm.speakerbonnet {
   type hw card 0
}

pcm.dmixer {
   type dmix
   ipc_key 1024
   ipc_perm 0666
   slave {
     pcm "speakerbonnet"
     period_time 0
     period_size 1024
     buffer_size 8192
     rate 44100
     channels 2
   }
}

ctl.dmixer {
    type hw card 0
}

pcm.softvol {
    type softvol
    slave.pcm "dmixer"
    control.name "PCM"
    control.card 0
}

ctl.softvol {
    type hw card 0
}

pcm.!default {
    type             plug
    slave.pcm       "softvol"
}
```

![](https://cdn-learn.adafruit.com/assets/assets/000/045/128/medium800/adafruit_products_asound.png?1502334751)

Save the file as usual

## Add Device Tree Overlay

&nbsp;Edit your Pi configuration file with

Info: For older versions of Raspberry Pi, edit /boot/config.txt instead.

```terminal
sudo nano /boot/firmware/config.txt
```

And scroll down to the bottom. If you see a line that says: `dtparam=audio=on`

![](https://cdn-learn.adafruit.com/assets/assets/000/032/636/medium800/adafruit_products_dtover.png?1464032257)

Disable it by putting a **#** in front.

Then add:

```auto
dtoverlay=max98357a
```

on the next line. Save the file and reboot your Pi with

```terminal
sudo reboot
```

# Raspberry Pi Halloween Costume Detector

## Python Virtual Environment Prep

As Carter writes in his [Python Virtual Environment Usage on Raspberry Pi guide](https://learn.adafruit.com/python-virtual-environment-usage-on-raspberry-pi/overview):

> Starting with the October 10, 2023&nbsp;[Bookworm release](https://www.raspberrypi.com/news/bookworm-the-new-version-of-raspberry-pi-os/)&nbsp;of the&nbsp;[Raspberry Pi OS](https://www.raspberrypi.com/software/), the use of&nbsp;[Python Virtual Environments](https://docs.python.org/3/tutorial/venv.html)&nbsp;(venv) when pip installing packages is required.&nbsp; **No more sudo pip**. This will break things and require learning new things. Yeah.

You will need to setup a Python virtual environment (venv) on your Raspberry Pi 5 for this project. Don't worry though! If you follow along with the guide step by step, you'll be just fine.

### Python Virtual Environment Usage on Raspberry Pi - Basic Venv Usage

[Python Virtual Environment Usage on Raspberry Pi](https://learn.adafruit.com/python-virtual-environment-usage-on-raspberry-pi)
[Basic Venv Usage](https://learn.adafruit.com/python-virtual-environment-usage-on-raspberry-pi/basic-venv-usage)
## Always venv

On the [Other Ideas page](https://learn.adafruit.com/python-virtual-environment-usage-on-raspberry-pi/other-ideas) in the venv guide, there is a tip for having the virtual environment enabled automatically at boot by editing the `.bashrc` file (`sudo nano .bashrc`) and adding this line to the bottom:

```python
source home/user/venv/bin/activate
```

Where `venv` is the name of your virtual environment. You can take this a step further by [adding the alias](https://learn.adafruit.com/python-virtual-environment-usage-on-raspberry-pi/usage-with-sudo#option-1-invoke-with-sudo-passing-environment-3157502) for running Python scripts as `sudo` to your `.bashrc` file as well:

```python
alias gogo='sudo -E env PATH=$PATH python'
```

You can change `gogo` to any command you want. This way, every time you boot up your Pi, you'll have your Python venv enabled and you'll be able to use your alias for running Python scripts.

![](https://cdn-learn.adafruit.com/assets/assets/000/135/648/medium800/raspberry_pi_20250228_15h44m50s_grim.png?1741103373)

# Raspberry Pi Halloween Costume Detector

## Installing Blinka on Raspberry Pi

Info: 

Warning: 

# Prerequisite Pi Setup!

In this page we'll assume you've already gotten your Raspberry Pi up and running and can log into the command line

Here's the quick-start for people with some experience:

1. Download the&nbsp;[latest Raspberry Pi OS or Raspberry Pi OS Lite](https://www.raspberrypi.org/software/operating-systems/)&nbsp;to your computer
2. [Burn the OS image to your MicroSD card](https://learn.adafruit.com/adafruit-raspberry-pi-lesson-1-preparing-and-sd-card-for-your-raspberry-pi)&nbsp;using your computer
3. [Re-plug the SD card into your computer (don't use your Pi yet!) and set up your wifi connection by editing supplicant.conf](https://learn.adafruit.com/raspberry-pi-zero-creation/text-file-editing)
4. [Activate SSH support](https://learn.adafruit.com/raspberry-pi-zero-creation/text-file-editing)
5. Plug the SD card into the Pi
6. If you have an HDMI monitor we recommend connecting it so you can see that the Pi is booting OK
7. Plug in power to the Pi - you will see the green LED flicker a little. The Pi will reboot while it sets up so wait a good 10 minutes
8. [If you are running Windows on your computer, install Bonjour support so you can use&nbsp; **.local** &nbsp;names, you'll need to reboot Windows after installation](https://learn.adafruit.com/bonjour-zeroconf-networking-for-windows-and-linux#microsoft-windows)
9. [You can then&nbsp; **ssh** &nbsp;into&nbsp; **raspberrypi.local**](https://learn.adafruit.com/adafruits-raspberry-pi-lesson-6-using-ssh)

[The Pi Foundation has tons of guides as well](https://projects.raspberrypi.org/en/projects/raspberry-pi-getting-started)

Danger: 

# Update Your Pi and Python

Run the standard updates:

```terminal
sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get install -y python3-pip
```

and upgrade setuptools:

```terminal
sudo apt install --upgrade python3-setuptools
```

Info: 

Warning: 

# Setup Virtual Environment

If you are installing on the Bookworm (released in 2023) or later version of Raspberry Pi OS, you will need to install your python modules in a virtual environment. You can find more information in the&nbsp;[Python Virtual Environment Usage on Raspberry Pi](https://learn.adafruit.com/python-virtual-environment-usage-on-raspberry-pi) guide. To Install and activate the virtual environment, use the following commands:

```terminal
cd ~
sudo apt install python3-venv
python3 -m venv env --system-site-packages
```

You will need to activate the virtual environment every time the Pi is rebooted. To activate it:

```terminal
source env/bin/activate
```

To deactivate, you can use `deactivate`, but leave it active for now.

# Automated Install

We put together a script to easily make sure your Pi is correctly configured and install Blinka. It requires just a few commands to run. Most of it is installing the dependencies.

```terminal
cd ~
pip3 install --upgrade adafruit-python-shell
wget https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/raspi-blinka.py
sudo -E env PATH=$PATH python3 raspi-blinka.py
```

If you are installing on an earlier version such as Bullseye of Raspberry Pi OS and not using a Virtual Environment, you can call the script like:

`sudo python3 raspi-blinka.py`

If you are installing an older version of Raspberry Pi OS, your system default Python is likely Python 2. If so, it will ask to confirm that you want to proceed. Choose&nbsp; **yes**.

![sensors_Python_Sys_Default.png](https://cdn-learn.adafruit.com/assets/assets/000/098/682/medium640/sensors_Python_Sys_Default.png?1610754382)

It may take a few minutes to run. When it finishes, it will ask you if you would like to reboot. Choose&nbsp; **yes**.

![sensors_Reboot_Now.png](https://cdn-learn.adafruit.com/assets/assets/000/098/683/medium640/sensors_Reboot_Now.png?1610754482)

Once it reboots, the connection will close. After a couple of minutes, you can reconnect.

![sensors_Connection_Closed.png](https://cdn-learn.adafruit.com/assets/assets/000/098/684/medium640/sensors_Connection_Closed.png?1610754544)

# Manual Install

If you are having trouble running the automated installation script, you can follow these steps to manually install Blinka.

### Enable Interfaces

Run these commands to enable the various interfaces such as I2C and SPI:

```terminal
sudo raspi-config nonint do_i2c 0
sudo raspi-config nonint do_spi 0
sudo raspi-config nonint do_serial_hw 0
sudo raspi-config nonint do_ssh 0
sudo raspi-config nonint do_camera 0
sudo raspi-config nonint disable_raspi_config_at_boot 0
```

### Install Blinka and Dependencies

Blinka needs a few dependencies installed:

```terminal
sudo apt-get install -y i2c-tools libgpiod-dev python3-libgpiod
pip3 install --upgrade adafruit-blinka adafruit-platformdetect
```

### Raspberry Pi 5 Adjustments

At the moment, RPi.GPIO is installed, which causes issues. Just remove it with the following command:

```terminal
pip3 uninstall -y RPi.GPIO
```

# Check I2C and SPI

The script will automatically enable I2C and SPI. You can run the following command to verify:

```terminal
ls /dev/i2c* /dev/spi*
```

You should see the response

`/dev/i2c-1 /dev/spidev0.0 /dev/spidev0.1`

![](https://cdn-learn.adafruit.com/assets/assets/000/056/782/medium800/sensors_ls.png?1530380749)

## Fixing CE0 and CE1 Device or Resource Busy Issue

In order to use the CE0 and CE1 pins in Python, you will need to disable them from OS usage. To do so, check out the [Reassigning or Disabling the SPI Chip Enable Lines](https://learn.adafruit.com/circuitpython-on-raspberrypi-linux/spi-sensors-devices#reassigning-or-disabling-the-spi-chip-enable-lines-3097985) section of this guide.

## Enabling Second SPI

If you are using the main SPI port for a display or something and need another hardware SPI port, you can enable it by adding the line

`dtoverlay=spi1-3cs`

to the bottom of **/boot/config.txt** and rebooting. You'll then see the addition of some /dev/spidev1.x devices:

![](https://cdn-learn.adafruit.com/assets/assets/000/059/554/medium800/sensors_image.png?1534951162)

## Pi 5 : Cannot determine SOC peripheral base address
comment out this line :

```auto
#dtparam=spi=on
```

# Blinka Test
Warning: 

Create a new file called **blinkatest.py** with **nano** or your favorite text editor and put the following in:

```auto
import board
import digitalio
import busio

print("Hello, blinka!")

# Try to create a Digital input
pin = digitalio.DigitalInOut(board.D4)
print("Digital IO ok!")

# Try to create an I2C device
i2c = busio.I2C(board.SCL, board.SDA)
print("I2C ok!")

# Try to create an SPI device
spi = busio.SPI(board.SCLK, board.MOSI, board.MISO)
print("SPI ok!")

print("done!")
```

Save it, make sure your virtual environment is activated, and run at the command line with:

```terminal
python3 blinkatest.py
```

You should see the following, indicating digital i/o, I2C and SPI all worked.

![](https://cdn-learn.adafruit.com/assets/assets/000/056/785/medium800/sensors_test.png?1530381767)

# Raspberry Pi Halloween Costume Detector

## Code the Detector

## Install the Required Libraries

You will need to install a few libraries and dependencies to run the Python script. In the terminal, enter:

```terminal
sudo apt install -y python3-opencv
sudo apt install -y opencv-data
pip install piper-tts
python3 -m piper.download_voices en_US-joe-medium
pip install anthropic
```

This installs OpenCV, the Piper text to speech (TTS) local model, the Piper voice used in the project and the Anthropic Python API.

## Download the Project Bundle

Once you've finished setting up your Raspberry Pi with Blinka and the library dependencies, you can access the Python code file by downloading the Project Bundle.

To do this, click on the **&nbsp;Download Project Bundle** &nbsp;button in the window below. It will download as a zipped folder.

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/Raspberry_Pi_Halloween_Costume_Detector/code.py

## Anthropic API Key

You'll need to add your API key that you created on the [Claude API Key guide page](https://learn.adafruit.com/raspberry-pi-halloween-costume-detector/claude-api-key) to the **code.py** file. At the top of the file, update the `ANTHROPIC_API_KEY` string:

```python
ANTHROPIC_API_KEY = "your-api-key-here"
```

### Raspberry Pi Halloween Costume Detector - Claude API Key

[Raspberry Pi Halloween Costume Detector](https://learn.adafruit.com/raspberry-pi-halloween-costume-detector)
[Claude API Key](https://learn.adafruit.com/raspberry-pi-halloween-costume-detector/claude-api-key)
## Run the Script

After downloading the Project Bundle, move the folder to your **/home/user** directory. Then, unzip the folder by **right-clicking** on the folder in the File Manager and selecting **Extract** or with your preferred command line tool. Keep the following file in the **/home/user** directory:

- **code.py**

To run **code.py** from the terminal in your Python virtual environment, you'll use this line in the terminal:

```terminal
sudo -E env PATH=$PATH python code.py
```

## How the Code Works

OpenCV is used to detect movement and identify when a person has entered the view of the camera. A preview screen is created to stream the camera feed to the desktop on the Pi.

```python
# Initialize detectors
upperbody_detector = cv2.CascadeClassifier(
                     "/usr/share/opencv4/haarcascades/haarcascade_upperbody.xml")
fgbg = cv2.createBackgroundSubtractorMOG2(detectShadows=False)

# Initialize camera
cv2.startWindowThread()
picam2 = Picamera2()
picam2.configure(picam2.create_preview_configuration(
                 main={"format": 'XRGB8888', "size": (640, 480)}))
picam2.start()
```

### Piper

The Piper TTS model is used for voice synthesis. The `SynthesisConfig()` function can be adjusted to customize how the voice sounds. You can try out different voices from Piper with this [browser tool](https://rhasspy.github.io/piper-samples/).

Two audio files are created before the loop, **hello.wav** and **halloween.wav** since these files will be used multiple times throughout the code. If these files already exist, then new files aren't created.

```python
# Initialize Piper voice
voice = PiperVoice.load("/home/pi/en_US-joe-medium.onnx")
syn_config = SynthesisConfig(
    volume=1.0,
    length_scale=1.5,
    noise_scale=1.2,
    noise_w_scale=1.5,
    normalize_audio=False,
)

# Check for and create audio files if they don't exist
def create_audio_file_if_needed(filename, text):
    """Create audio file if it doesn't exist"""
    if not os.path.exists(filename):
        print(f"Creating {filename}...")
        with wave.open(filename, "wb") as wav:
            voice.synthesize_wav(text, wav, syn_config=syn_config)
        print(f"{filename} created!")
    else:
        print(f"{filename} already exists.")

# Create the hello and halloween audio files
create_audio_file_if_needed("hello.wav", "Hello? Who goes there?")
create_audio_file_if_needed("halloween.wav", "Happy Halloween!")
```

### Functions

A few functions are used in the loop. The first, `encode_image()` encodes the JPEG image from the camera to base64 to send to the Anthropic API.

```python
def encode_image(image_path):
    """Encode image to base64 for Claude API"""
    with open(image_path, "rb") as image_file:
        return base64.standard_b64encode(image_file.read()).decode("utf-8")
```

`get_costume_joke()` sends the image to the API and prompts the API to return a dad joke about the costume. You can tweak the prompt to customize the response from Claude.&nbsp;

```python
def get_costume_joke(image_path):
    """Send image to Claude and get dad joke about costume"""
    print("Analyzing costume with Claude...")

    # Encode the image
    image_data = encode_image(image_path)

    # Send to Claude API
    message = client.messages.create(
        model="claude-sonnet-4-5-20250929",
        max_tokens=250,
        messages=[
            {
                "role": "user",
                "content": [
                    {
                        "type": "image",
                        "source": {
                            "type": "base64",
                            "media_type": "image/jpeg",
                            "data": image_data,
                        },
                    },
                    {
                        "type": "text",
                        "text": """Look at this image.
                        Your response must follow these rules exactly:

                        1. If you see a person in a Halloween costume, respond with ONLY a single-sentence cute,
                        family-friendly, encouraging, dad joke about the costume. Nothing else.

                        2. If you do NOT see a clear Halloween costume (empty room, unclear image, person in regular clothes, etc.),
                        respond with ONLY the character: 0

                        Examples of good responses:
                        - "Looks like that ghost costume is really boo-tiful!"
                        - "0"
                        - "I guess you could say that vampire costume really sucks... in a good way!"

                        Do not add any explanations, commentary, or descriptions. Just the joke or just 0.
                        """
                    }
                ],
            }
        ],
    )

    # Extract the joke from the response
    joke = message.content[0].text
    print(f"Claude's joke: {joke}")
    return joke
```

`play_audio_file()` plays audio files, like the pre-made **hello.wav** and **halloween.wav**. `speak_joke()` takes the returned text from Claude, passes it through Piper and then plays the created audio file.

```python
def play_audio_file(filename):
    """Play a pre-existing audio file"""
    print(f"Playing {filename}...")
    subprocess.run(["su", username, "-c", f"aplay {filename}"])

def speak_joke(joke_text):
    """Convert joke to speech and play it"""
    print("Generating speech...")

    wav_file = "joke.wav"

    # Generate audio with Piper
    with wave.open(wav_file, "wb") as wav:
        voice.synthesize_wav(joke_text, wav, syn_config=syn_config)

    print("Playing audio...")
    # Play the audio file (using aplay for Raspberry Pi)
    subprocess.run(["su", username, "-c", f"aplay {wav_file}"])
```

### The Loop

In the loop, the camera feed is streamed to the OpenCV window. When motion it detected, the frame is checked for the person detection. If a person is detected, then the LEDs turn on and the **hello.wav** file is played. A picture is taken and its sent to Claude with the costume joke prompt. When the joke is returned, its run through Piper and the joke audio file plays. If for whatever reason no joke is returned (API connection issue, no costume identified, etc), then the&nbsp; **halloween.wav** file is played instead. After this process, the LEDs turn off.

```python
while True:
    im = picam2.capture_array()
    grey = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)

    # Check for motion
    fgmask = fgbg.apply(im)
    motion_amount = cv2.countNonZero(fgmask)
    motion_detected = motion_amount > MOTION_THRESHOLD

    if motion_detected:
        motion_frame_count += 1
    else:
        motion_frame_count = 0

    if motion_frame_count >= MOTION_FRAMES_REQUIRED:
        # Detect upperbody
        bodies = upperbody_detector.detectMultiScale(grey, 1.1, 3)
        person_detected = len(bodies) > 0

        # Draw rectangles
        for (x, y, w, h) in bodies:
            cv2.rectangle(im, (x, y), (x + w, y + h), (0, 255, 0), 2)

        # Process if person detected and cooldown passed
        current_time = time.time()
        if person_detected and (current_time - last_capture_time) > COOLDOWN_SECONDS:
            print("Person detected!")

            # Turn on LED and play hello message
            led.value = True
            play_audio_file("hello.wav")

            im = picam2.capture_array()
            # Capture image
            timestamp = time.strftime("%Y%m%d-%H%M%S")
            file = f"costume_{timestamp}.jpg"
            cv2.imwrite(file, im)
            print(f"\nPicture saved: {file}")

            try:
                # Get joke from Claude
                the_joke = get_costume_joke(file)

                # If Claude returns 0, use the halloween fallback
                if the_joke.strip() == "0":
                    print("No costume detected, playing halloween.wav")
                    play_audio_file("halloween.wav")
                else:
                    # Speak the joke
                    speak_joke(the_joke)

            except Exception as e:
                print(f"Error: {e}")
                # Fallback to halloween.wav if something goes wrong
                play_audio_file("halloween.wav")

            # Turn off LED after processing
            led.value = False

            last_capture_time = current_time
            motion_frame_count = 0

    # Show motion amount
    cv2.putText(im, f"Motion: {motion_amount}", (10, 30),
               cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2)

    cv2.imshow("Camera", im)
    cv2.waitKey(1)
```

# Raspberry Pi Halloween Costume Detector

## Wiring

![](https://cdn-learn.adafruit.com/assets/assets/000/140/809/medium800/camera_edited_P1480379.jpg?1761599474 )

Two LEDs are used as a visual indicator that the skulls is recognizing the goblins and ghouls walking by. You'll connect the LED to the broken out GPIO pins on the speaker bonnet.

Solder a 220Ω resistors to each of the anodes on the LEDs. The anode is the longer leg of the two tegs of the LED.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/810/medium640/camera_edited_P1480383.jpg?1761599828)

Solder wires to the cathodes of each LED. The cathode is the shorter leg of the LED. Solder wires to the other end of the resistors on each LED.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/811/medium640/camera_edited_P1480386.jpg?1761599870)

Cover the exposed LED connections with heat shrink.

Gently heat the heat shrink.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/812/medium640/camera_edited_P1480391.jpg?1761599902)

Solder the cathode wires from the LEDs to GND on the speaker bonnet. Solder the anode wires from the LEDs to GPIO 5 on the speaker bonnet.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/813/medium640/camera_edited_P1480394.jpg?1761599927)

# Raspberry Pi Halloween Costume Detector

## Assembly

![](https://cdn-learn.adafruit.com/assets/assets/000/140/794/medium800/camera_edited_P1480416.jpg?1761598365 )

## Connect the Hardware
Plug the speaker bonnet into the Raspberry Pi GPIO header.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/795/medium640/camera_edited_P1480424.jpg?1761598744)

Insert the speaker wires into the right speaker terminal block. Speaker red wire to + and speaker black wire to -.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/796/medium640/camera_edited_P1480429.jpg?1761598818)

Insert the ribbon cable into the camera. The gold contacts should be facing up.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/797/medium640/camera_edited_P1480430.jpg?1761598965)

Insert the other end of the ribbon cable into the first MIPI port on the Raspberry Pi. The contacts should be facing towards the Ethernet port.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/798/medium640/camera_edited_P1480435.jpg?1761598998)

## Mounting Plates
Attach the speaker to the speaker mount with four M3 screws.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/799/medium640/camera_edited_P1480437.jpg?1761599086)

Attach the Raspberry Pi to the Pi mount using two M2.5 screws. Only attach it on the edge with the connectors opposite the GPIO header.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/800/medium640/camera_edited_P1480438.jpg?1761599111)

Attach the camera to the camera mount with four M2 screws.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/801/medium640/camera_edited_P1480440.jpg?1761599167)

## Skull
Attach the Raspberry Pi mount to the skull with three M2.5 screws.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/802/medium640/camera_edited_P1480445.jpg?1761599191)

![](https://cdn-learn.adafruit.com/assets/assets/000/140/803/medium640/camera_edited_P1480443.jpg?1761599199)

Attach the camera mount to the skull with three M2.5 screws. The camera lens will line up with the cutout in the lightning bolt.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/804/medium640/camera_edited_P1480446.jpg?1761599245)

![](https://cdn-learn.adafruit.com/assets/assets/000/140/805/medium640/camera_edited_P1480447.jpg?1761599254)

Attach the speaker mount to the skull behind the mouth with two M3 screws.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/806/medium640/camera_edited_P1480451.jpg?1761599345)

![](https://cdn-learn.adafruit.com/assets/assets/000/140/807/medium640/camera_edited_P1480450.jpg?1761599353)

Align the back plate stand-offs with the mounting holes on the skull. Connect the two together with seven M3 screws.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/808/medium640/camera_edited_P1480453.jpg?1761599380)

# Raspberry Pi Halloween Costume Detector

## Use

Warning: Make sure you've followed all of the steps in the guide to:


* Get your Claude API key
* Setup the speaker bonnet audio output
* Setup your Python virtual environment
* Install Blinka

<b>If you skip any of these steps the project will not work!</b>

https://youtu.be/cE0Z_2pcQrs

Power up the Raspberry Pi with a 5.1V/3A USB C power supply and run the script. You'll see the video preview appear on the desktop.

To avoid having to use an external display, you can use the [Raspberry Pi Connect software](https://www.raspberrypi.com/documentation/services/connect.html) to remotely log into your Pi and start a screen sharing session.

When a person is identified, the LED eyes will light up to let you know that the script is running. After a moment, you'll hear the Claude-generated joke come through the speaker. When the joke is done playing, the LEDs will turn off.

![](https://cdn-learn.adafruit.com/assets/assets/000/140/819/medium640thumb/camera_heroGif.jpg?1761683497)

If there are any problems with making a request to the Anthropic API (bad API key, connection error, unable to detect a costume, etc) then the "Happy Halloween" audio file will play instead. You'll be able to see what the actual error was in the terminal window for troubleshooting.

## API Reference Links

For more information on the API's used in this project, check out the links below:

[Claude Vision API Docs](https://docs.claude.com/en/docs/build-with-claude/vision)
[Piper TTS Python API Docs](https://github.com/OHF-Voice/piper1-gpl/blob/main/docs/API_PYTHON.md)

## Guide Products

### Raspberry Pi 5 - 4 GB RAM

[Raspberry Pi 5 - 4 GB RAM](https://www.adafruit.com/product/5812)
The Raspberry Pi 5&nbsp;is the newest Raspberry Pi computer, and the Pi Foundation knows you can always make a good thing _better_! And what could make the Pi 5 better than the 4? How about a&nbsp;_faster_ processor, USB 3.0 ports, and an updated Gigabit Ethernet chip with PoE...

Out of Stock
[Buy Now](https://www.adafruit.com/product/5812)
[Related Guides to the Product](https://learn.adafruit.com/products/5812/guides)
### Raspberry Pi Camera Module 3 NoIR - 12MP 75 Degree Infrared Lens

[Raspberry Pi Camera Module 3 NoIR - 12MP 75 Degree Infrared Lens](https://www.adafruit.com/product/5659)
Raspberry Pi Camera Module 3 is a compact camera from Raspberry Pi. It offers an IMX708 12-megapixel sensor with HDR&nbsp;and features phase detection autofocus. Camera Module 3 is available in standard and wide-angle variants, both of which are available with or without an infrared cut...

In Stock
[Buy Now](https://www.adafruit.com/product/5659)
[Related Guides to the Product](https://learn.adafruit.com/products/5659/guides)
### Adafruit I2S 3W Stereo Speaker Bonnet for Raspberry Pi

[Adafruit I2S 3W Stereo Speaker Bonnet for Raspberry Pi](https://www.adafruit.com/product/3346)
Hey Mr. DJ! Turn up that Raspberry Pi mix to the&nbsp;_max_&nbsp;with this cute **3W Stereo Amplifier Bonnet for Raspberry Pi**. (It's not big enough to be an official HAT, so we called it a bonnet, you see?) It's the exact same size as a Raspberry Pi Zero but works...

In Stock
[Buy Now](https://www.adafruit.com/product/3346)
[Related Guides to the Product](https://learn.adafruit.com/products/3346/guides)
### Mono Enclosed Speaker with Plain Wires - 3W 4 Ohm

[Mono Enclosed Speaker with Plain Wires - 3W 4 Ohm](https://www.adafruit.com/product/4445)
Listen up! This single&nbsp; 2.8" x 1.2" speaker&nbsp;is&nbsp;the perfect addition to any audio project where you need 4 ohm impedance and 3W or less of power. We particularly like these speakers as they are small and enclosed for good audio volume and quality. This speaker _does..._

In Stock
[Buy Now](https://www.adafruit.com/product/4445)
[Related Guides to the Product](https://learn.adafruit.com/products/4445/guides)
### Diffused 10mm LED Pack - 5 LEDs each in 5 Colors - 25 Pack

[Diffused 10mm LED Pack - 5 LEDs each in 5 Colors - 25 Pack](https://www.adafruit.com/product/4204)
Need some chunky indicators? We are big fans of these diffused LEDs. They are fairly bright, so they can be seen in daytime, and from any angle. They go easily into a breadboard and will add that extra zing to your project.

Now you can get a pack of 25 with 5 different...

Out of Stock
[Buy Now](https://www.adafruit.com/product/4204)
[Related Guides to the Product](https://learn.adafruit.com/products/4204/guides)
### Through-Hole Resistors - 220 ohm 5% 1/4W - Pack of 25

[Through-Hole Resistors - 220 ohm 5% 1/4W - Pack of 25](https://www.adafruit.com/product/2780)
ΩMG! You're not going to be able to resist these handy resistor packs!&nbsp;Well, axially, they&nbsp;do all of the resisting for you!

This is a **25 Pack of 220Ω Resistors.** More specifically, they are **carbon film** , through-hole...

In Stock
[Buy Now](https://www.adafruit.com/product/2780)
[Related Guides to the Product](https://learn.adafruit.com/products/2780/guides)
### Raspberry Pi 5 FPC Camera Cable - 22-pin 0.5mm to 15-pin 1mm

[Raspberry Pi 5 FPC Camera Cable - 22-pin 0.5mm to 15-pin 1mm](https://www.adafruit.com/product/5819)
This **300mm&nbsp;long** &nbsp; **camera cable** &nbsp;is specifically designed to work with the&nbsp; **Raspberry Pi 5** &nbsp;series.&nbsp;Just plug it into your Pi 5's camera port and then the other end into one of the official&nbsp;<a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/5819)
[Related Guides to the Product](https://learn.adafruit.com/products/5819/guides)
### Official Raspberry Pi Power Supply 5.1V 3A with USB C

[Official Raspberry Pi Power Supply 5.1V 3A with USB C](https://www.adafruit.com/product/4298)
The official Raspberry Pi USB-C power supply is here! And of course, we have 'em in classic Adafruit black! Superfast with just the right amount of cable length to get your Pi 4 projects up and running!

Best for use with Pi 4 series, [Pi...](https://www.adafruit.com/product/5814)

Out of Stock
[Buy Now](https://www.adafruit.com/product/4298)
[Related Guides to the Product](https://learn.adafruit.com/products/4298/guides)

## Related Guides

- [Adafruit Speaker Bonnet for Raspberry Pi](https://learn.adafruit.com/adafruit-speaker-bonnet-for-raspberry-pi.md)
- [RGB LED Matrix Cube with 25,000 LEDs](https://learn.adafruit.com/rgb-led-matrix-cube-for-pi.md)
- [Feather RP2040 DVI Video Synth](https://learn.adafruit.com/feather-rp2040-dvi-video-synth.md)
- [CircuitPython Trombone Champ Controller](https://learn.adafruit.com/circuitpython-trombone-champ-controller.md)
- [LED Matrix Scoreboard](https://learn.adafruit.com/led-matrix-scoreboard.md)
- [Automatic Naughty Cat Detector using Lobe](https://learn.adafruit.com/naughty-cat-detector-using-microsoft-lobe.md)
- [Color Sensing Music Player](https://learn.adafruit.com/color-sensing-music-player.md)
- [Raspberry Pi Zero Stand](https://learn.adafruit.com/raspberry-pi-zero-stand.md)
- [Getting Started with Microsoft Azure and CircuitPython](https://learn.adafruit.com/getting-started-with-microsoft-azure-and-circuitpython.md)
- [Star Trek LCARS Display](https://learn.adafruit.com/star-trek-lcars-display.md)
- [No-Code IKEA Vindriktning Air Quality Sensor Hack with Adafruit IO](https://learn.adafruit.com/no-code-ikea-vindriktning-hack-with-qt-py-esp32-s3-and-adafruit-io.md)
- [Traffic Light Conference Badge](https://learn.adafruit.com/traffic-light-conference-badge.md)
- [How to Make Animated Graphics for Hologram Displays](https://learn.adafruit.com/how-to-make-animated-graphics-for-hologram-displays.md)
- [PiTFT Python + Pillow Animated Gif Player](https://learn.adafruit.com/pitft-linux-python-animated-gif-player.md)
- [BLE Light Switch with Feather nRF52840 and Crickit](https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840.md)
- [Qualia S3 Compass](https://learn.adafruit.com/qualia-s3-compass.md)
