I've got hundreds of Arduino libraries that we maintain in my 'libraries' folder, and it can very quickly get difficult to maintain them. There's 4 issues I spent an inordinate amount of time on!
First issue is that whenever a library is updated, the IDE does not delete the previous version, but keeps both around...after a few years this ends in a lot of cruft.
Secondly, libraries downloaded via the IDE are placed into a folder in the format arduino_nnnnn where n is a number, so you don't really know what library is inside it, making the first issue hard to clean up
Thirdly - for Adafruit libraries, they are
git clone'd into the library folder which means I sometimes end up in a branch that I'm working on, and then submit a PR. Days later I've forgotten to change back into my main branch, losing out on any merged updates!
Finally - there's constant updates to our libraries, and the IDE does alert me when this happens - which means I need to do a git pull - but in hundreds of libraries this takes a long time to go to each folder and run the git pull command.
THUS a script! This python code does a number of clean up tasks, I only have to run it a few times a week and it will keep my arduino libraries folder nice n tidy. Thanks to ChatGPT4 Sept 25 for the assist, it made the scripting faster (note I did make some changes beyond what GPT4 wrote)
Google Coral's USB Accelerator (https://coral.ai/docs/accelerator/get-started) currently doesn't work on the Raspberry Pi OS Bookworm. In order to get the USB Accelerator to work we need to do a few extra things like install Python 3.9 and create a python virtual environment.
sudo apt-get install -y build-essential tk-dev libncurses5-dev libncursesw5-dev libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev libssl-dev libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev libffi-dev
Build Python from scratch
tar xf Python-3.9.18.tar.xz
sudo make altinstall
Make a virtual environment
Python-3.9.18/python -m venv --system-site-packages tf
Next we can install Pycoral
echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update
sudo apt-get install libedgetpu1-std -y
sudo usermod -aG plugdev <YOUR_USER_NAME>
sudo ./tf/bin/pip3 install --extra-index-url https://google-coral.github.io/py-repo/ pycoral
Install any extra python libraries
sudo ./tf/bin/pip3 install opencv-python
Run the python virtual environment
At this point you should be able to use the USB Accelerator against the pycoral repo: https://github.com/google-coral/pycoral.git
An I2S stereo audio DAC with an internal master clock PLL and a charge pump for direct-coupled ground-centered audio output.
The TV Backlight illuminates the wall behind the TV display to reduce eye strain. The backlight extends the background of the screen image by watching the color near an edge of the display. To reduce distraction, the color and brightness are integrated over time to avoid sudden changes.
The project code reads the AS7341 spectrometer sensor's eight visible light channels to determine the backlight target color. Using a Euclidean "color distance" comparison, the backlight color is slowly changed to match the target color, within a specified tolerance.
The spectrometer sensor settings are adjusted for relatively low display light levels. The sensor's internal amplifier gain is set to maximum and the integration step and time values are adjusted to maintain a moderately fast conversion rate. Also, rather than just analyzing red, green, and blue components, all eight visible light channels are used to increase the accuracy and resolution of color measurements.
In this configuration, just one of the sensor's channels can reach a count value of near 13k, producing a composite 8-channel resolution that approaches 8x1032 color combinations, much larger than the 17x106 (24-bit) color resolution of the NeoPixel strip. A color count to RGB converter helper reads the three primary color sensor channels, scales the count, and produces an RGB888 (24-bit) color value that's compatible with NeoPixels.
To assist in finding a position near the TV screen for the sensor, the Feather M4's on-board NeoPixel mimics the readings in real-time, albeit at a slightly lower brightness than the illumination strip NeoPixels.
Test video: https://youtu.be/yFqbalF0FGw
- Build a camouflaged enclosure and vertical mounting wands for the NeoPixel strips.
- Investigate animating the NeoPixel strip color change.
- For home security, enable the NotFlix (Fake TV) code when the TV display is dark for 5 minutes or more.
This project reaches the obligatory Doom adaptation in the third act, but takes some interesting twists and turns along the way…
The Adafruit Controllable Four Outlet Power Relay Module is a very neat piece of hardware (if you live in a 120 volt AC country). It has a pair of contacts on the side that can take a wide range of voltages to switch electrical loads on and off. This is just what my wife wanted, a method to remotely control power outlets to some gear in her office.
But how to switch it remotely. WiFi relies on connectivity that might get hacked over the internet in our view. Bluetooth seems more secure (maybe local hacking is possible, but our locality isn't a concern). I initially picked up an Adafruit Feather ESP32-S3. But CircuitPython Bluetooth doesn't work for UART/Serial profile. I want to, for proof of concept, use the Adafruit Bluefruit LE Connect application (available for iOS and Android) to send codes for on and off. That limits my choices to the Nordic nRF52840-based microcontroller boards.
A CircuitPython Community Bundle color palette and list brightness setter and normalizer tool.
The Ibanez FL9 Flanger Service Guide was compiled from a collection of original and obsolete information to create a useful guide for maintaining this unique guitar pedal. Credit must be given to the authors of the original 1980s era Service Manual NO. 002 that was used as a template for this updated guide.
We live in a breezy area that abuses flags, wind socks, and our patio garden wind chime collection. To keep the collection of wind chimes working, we are always looking for better materials for the annual chime repair ritual.
We recently ditched the UV-resistant nylon fishing line that was usually used for repairs. Despite the UV rating, the nylon line would decay in the sun after a few months. We tried something new (to us) this season; replaced the nylon line with 1/32” stainless steel cable and aluminum crimp ferrules. We're expecting it to stay strong and last a great deal longer.
For lightweight loads such as the hangers for individual chime tubes, the ferrules were sliced in half with a utility knife. The cable was cut to length and ferrules were crimped in place using a ratcheting crimping pliers' 28AWG die. The crimping pliers (Adafruit PID#1213) have a combination die for 28AWG, so only the larger portion of the die was used. Crimping pliers designed specifically for this purpose are available.
Unicomp Mini M with CircuitPython
Unicomp is the heir to the IBM Buckling Spring legacy. This style of keyboard has a distinctive sound & feel which some people just can't get enough of. I'm one of them, having used a crusty old Model M for at least a decade at work.
Their "Mini M" is an 87-key ("tenkeyless") layout, and in late summer 2023 the controller was replaced with a board that has a Raspberry Pi Pico soldered on to it.
It's too soon for me to have formed a strong opinion about this keyboard, though I will note that the cable seems to be in the category of "incredibly cursed": It is a USB A-A cable, which should not exist. If your computer is USB-C only you're entering dongle city, but, you're probably used to that.
In this mini-guide, you'll learn how to replace the factory firmware with a fully customizable CircuitPython firmware. Of course, once you have the controller in UF2 bootloader mode, you could also use Arduino or Pico-SDK to program it with the software of your choice.
Note that this involves opening up the keyboard enclosure and there is always the possibility that you will damage the keyboard while doing so.
A popular gift to new parents is baby board books! Not only are they great for chewing on (good source of fiber), they are also a nice way to introduce early literacy. We also have a 'subscription box of the quarter' which comes with a variety of board books
However, all these books are in English - and if you're trying to expose your lil one to another language it can be challenging to get books in the second language if it isn't a popular one in your country. In this case, we wanted to have some Hebrew language books (the weather-control-machine instruction manual is in Hebrew so it is important for our kiddo to read fluently). We were able to pick up some Hebrew books from the Israel Bookshop - and the library also has some options! But, library books must be returned unchewed and imported books are not inexpensive. We also had lots of gifted books, already... so let's convert them to be bilingual with help from ChatGPT4
We're close to publicly releasing UART support for Adafruit.io and WipperSnapper. This would enable a device running WipperSnapper to initialize a physically connected UART device, such as the PM2.5 Air Quality Sensor and Breadboard Adapter Kit - PMS5003, and send its data to Adafruit.io. As always with WipperSnapper firmware, this is all performed without requiring a user to write code.
Below is a sneak peek of the following, but how did we get to this result over the course of a month? What went into adding a feature to Adafruit.io and WipperSnapper Firmware?
Just finished live streaming this week. We highlighted last week's learn guide, Talking D20, and showed off clear resin parts (Thanks to PhilB!). Pedro showed off his Dual-Extruded D20 and mentioned the STLs for 3D printers with multi-material capabilities.
For the prototyping segment, Pedro show his foam-core Tombstone and a 64x32 RGB Matrix. It'll use the matrix FeatherWing and PropMaker RP2040 Feather. Feature wise, it'll have text and graphics displayed on the matrix with accompanying sound FX and a servo-controlled crow triggered with a TOF sensor. Liz Clark will be collaborating with him to write the code in CircuitPython.
I'm working on a synth guitar using PropMaker RP2040 Feather with two 1x4 NeoKey QT boards, rotary QT encoders, speaker, switches and a strum mechanism. Liz will also be collaborating with me on the code, which will be done in CircuitPython using the SynthIO library.
For this week's Timelpase Tueday segment, we were both surprised with the tBulb product from toolmoon. It's a really neat USB powered lightbulb that is meant for attaching to a 3D printed base. Their thingiverse profile has tons of in-house designs that look amazing! Their product is also available to purchase on amazon.
Community makes this week was mostly props, which always fun to see!