Category Archives: How-to

How To Replace A Key Fob Battery

Today’s automobiles are more like computers with wheels. As such, modern conveniences like keyless entry and ignition are the new standard, but eventually, your key fob’s battery will die–necessitating a replacement. Dealerships often charge over-inflated prices to replace a single CR2025 battery in under five minutes. In this video, learn how to replace a key fob battery and save a lot of time and headache!


CR2025 Battery

Warranty Voiding Tool Kit

Mego 2XL Robot Teardown

The Mego 2XL Robot is an interesting piece from the very beginning of interactive electronic toys. The 1970s 2XL incorporated little more than a modified 8-track player to provide hours of entertainment on specially-formatted cassette tapes. In this Mego 2XL teardown, we’ll look at how the toy was built, the basic working mechanism, and attempt to diagnose a 2XL not working.


2XL Documents (contains US Patent and component data sheets)

How To Set Up OctoPi

I have a couple of new 3D printers that I need to build OctoPi servers for, so in this video, we’ll walk through how to set up OctoPi and attach it to most 3D printers.

OctoPi is available from

Etcher is available for Mac, Windows, and Linux at

Benchy Quick Print by Thumper72 is available on Thingiverse

How To Use A Custom Wake Word With Google Assistant

The new voice assistants like Siri, Cortana, Alexa, and Google (itself?) are becoming more and more ubiquitous as we race toward a “Star Trek”-style omnipresent computing interface, but what if you don’t like invoking the name of your chosen corporate overlord when you use the assistant’s features? What if you could speak “Okay, Computer” into an Apple mouse like Scotty did? In this video, I’ll show you how to set up a custom wake word with your voice assistant using a platform called “Snowboy”.



Google AIY Voice Kit

Raspberry Pi 3B+ (with appropriate SD card and power supply)



Snowboy GitHub

GassistPi GitHub

How To Set Up Google AIY

How To Set Up Google Assistant On The Matrix Creator Development Board

Google Actions Console

Google Developer Console

How To Set Up Snowboy On Raspberry Pi:

Install the Sox, PortAudio, and PyAudio dependencies
sudo apt-get install python-pyaudio python3-pyaudio sox
pip install pyaudio

Install Swig by compiling from source
tar -xvf swig-3.0.10.tar.gz
sudo apt-get install libpcre3 libpcre3-dev
cd swig-3.0.10
./configure --prefix=/usr\
--without-clisp \
--without-maximum-compile-warnings &&

make install &&
install -v -m755 -d /usr/share/doc/swig-3.0.10 &&
cp -v -R Doc/* /usr/share/doc/swig-3.0.10

Install the Atlas library
sudo apt-get install libatlas-base-dev

Verify audio recording and playback work
arecord -f cd -d 5 test.wav
aplay test.wav

Clone the Snowboy repo

Compile the Snowboy Python wrapper
cd snowboy/swig/Python

Run the Snowboy demo with the “Snowboy” wake word
cd snowboy/src/examples/Python
python /home/pi/snowboy/resources/models/snowboy.umdl

How To Set Up GassistPi On Google AIY:

Clone the GassistPi repo
git clone

Install the AIY hat configuration
sudo chmod +x ./GassistPi/audio-drivers/AIY-HAT/scripts/
sudo ./GassistPi/audio-drivers/AIY-HAT/scripts/
sudo reboot
sudo chmod +x ./GassistPi/audio-drivers/AIY-HAT/scripts/
sudo ./GassistPi/audio-drivers/AIY-HAT/scripts/

Confirm that your audio still works
speaker-test -t wav

From here, you’re going to use the credentials as well as the project and device IDs created when you first set up the Google AIY kit. Refer to the how-tos above if you haven’t gotten this far yet.

Run the installer script (this will take a while)
sudo chmod +x ./GassistPi/scripts/
sudo ./GassistPi/scripts/

As the script finishes, you will be presented with a unique URL for authentication. Copy that URL into a browser, sign in to Google, copy the authentication code, and paste that at the prompt in the terminal.

You can now run Google Assistant via GassistPi which allows intricate customization options as well as custom wake words via Snowboy. Configure these options by using a text editor with ~/GassistPi/src/config.yaml

Run Google Assistant with the following command:
/home/${USER}/env/bin/python -u /home/${USER}/GassistPi/src/ --project_id [your project ID] --device_model_id [your device ID]

How To Set Up Google Assistant On The Matrix Creator Development Board

The Matrix Creator is an IoT-centric development board that comes with a wide array of goodies that facilitate hardware development such as an FPGA, various accelerometer and environmental sensors, IR transceivers, and even an 8-microphone array that can be used for echolocation as well as omnidirectional listening. It’s this microphone array that makes the Matrix Creator (and it’s smaller sibling, the Matrix Voice) an ideal platform for developing your own AI assistant! In this video, we’ll look at installing and setting up Google Assistant and see how it compares to the dedicated AIY hat from a previous video.


Raspberry Pi 3B+ (with appropriate SD card and power supply)

Matrix Creator


Matrix Labs GitHub

Installing the Matrix kernel modules:

Add the repository key
wget | sudo apt-key add -

echo "deb $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/matrixlabs.list

sudo apt-get update
sudo apt-get upgrade

Install the packages
sudo apt install matrixio-creator-init

Reboot and install the kernel modules
sudo apt install matrixio-kernel-modules

Reboot and install the Google Assistant SDK per their instructions:

Now, you could run the Google Assistant at this point and everything will work just fine, but the fine folks at Matrix Labs actually put together a nice little application that adds color-changing lights and other little niceties to the stock Assistant installation

Clone the Matrix Google Assistant repo

git clone

Then run the program using the project and model IDs from the SDK setup
~/google-assistant-matrixio/google-matrixio-assistant-hotword --project_id [your-dev-project-id] --device_model_id [your-model-id]

Assistant will run and respond to the standard “OK, Google” or “Hey, Google” hotwords.

How To Set Up The Google AIY Voice Kit

AI voice assistants are the latest new hotness to come out of Silicon Valley, but before they were in every electronics department, they were much the exclusive playground of the DIY tinkerer. With kits like Google’s AIY line, hackers and makers can build their own voice assistants with little more than the good ol’ Raspberry Pi! In this video, I’ll walk you through how to set up the Google AIY Voice kit on a Raspberry Pi and run one of the demo python scripts to start building your own voice interfaces!


Google AIY Voice Kit

Raspberry Pi 3B+ (with appropriate SD card and power supply)


AIY Custom Raspbian

Google Developer Console


If you’re having trouble with segmentation faults crashing the Python demos, invoke these commands as Pi to install the earlier Google Assistant Library Python modules:

pip3 install google-assistant-library==1.0.0
pip3 install google-assistant-library

If you’re receiving the following error message

File "/home/pi/AIY-projects-python/src/aiy/assistant/", line 75, in _credentials_flow_interactive
webbrowser.register('chromium-browser', None, webbrowser.Chrome('chromium-browser'), -1)
TypeError: register() takes from 2 to 3 positional arguments but 4 were given

Then change line 75 in /home/pi/AIY-projects-python/src/aiy/assistant/auth_helpers.pyto the following:

webbrowser.register('chromium-browser', None, webbrowser.Chrome('chromium-browser'), preferred=True)

Be sure to keep the indentation and spacing the same as the original as it the code is sensitive.

Anet ET4 3D Printer Assembly and Review

Anet is one of the many 3D printer manufacturers to come out of the Big Rock Candy Mountain of Shenzhen, China, but they have made a name for themselves by developing high-quality printers at relatively low price points. They still remain relatively unknown in the US, so to help spread the word, they sent me a review unit of their new ET4 FDM printer. In this video, I’ll walk through how to assemble the Anet ET4 3D Printer and highlight a few features that stand out as I put it together.

The Anet ET4 is all-metal FDM 3D printer that made with an industrial grade 32bit motherboard and comes mostly assembled. It supports auto-leveling, resume printing and filament detection and comes with a more stable and compact construction design.


Check out the rest of Anet’s line here

Check out more of Anders’s music here

Arduino Basics Lesson 3-3: DIY Calculator

For the “Arduino For Kooks” course, I recommend you get the Arduino Starter Kit available here.

As we’ve learned throughout this series, a microcontroller like the one on the Arduino is basically a rudimentary computer that can execute instruction sets very quickly because it doesn’t have to load all those pesky applications and operating systems. What better capstone for this basic course than to combine everything that we’ve learned so far and build our own rudimentary mathematical computation device: a simple calculator!

For this calculator, we’re going to use a basic 4×4 matrix keypad and attach it to the Arduino in such a way that we only need to use 8 pins to cover the functions of 16 individual switches!

The Circuit:

Connect the character LCD and potentiometer as we learned in the Liquid Crystal Ball project, using the Arduino pins shown in the diagram. You can use a breadboard to create busses for +5V and GND.

Connect the pins of the keypad to pins D0-D8 on the Arduino as shown.

The Sketch:

#include //Header file for LCD from
#include //Header file for Keypad from

const byte ROWS = 4; // Four rows
const byte COLS = 4; // Three columns

// Define the Keymap
char keys[ROWS][COLS] = {


byte rowPins[ROWS] = { 0, 1, 2, 3 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte colPins[COLS] = { 4, 5, 6, 7 }; // Connect keypad COL0, COL1 and COL2 to these Arduino pins.

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // Create the Keypad

const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; //Pins to which LCD is connected
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

long Num1,Num2,Number;
char key,action;
boolean result = false;

void setup() {
lcd.begin(16, 2); //We are using a 16
2 LCD display
lcd.print("DIY Calculator"); //Display a intro message
lcd.setCursor(0, 1); // set the cursor to column 0, line 1
lcd.print("-CircuitDigest"); //Display a intro message

delay(2000); //Wait for display to show info
lcd.clear(); //Then clean it

void loop() {

key = kpd.getKey(); //storing pressed key value in a char

if (key!=NO_KEY)

if (result==true)


void DetectButtons()
lcd.clear(); //Then clean it
if (key=='') //If cancel Button is pressed
{Serial.println ("Button Cancel"); Number=Num1=Num2=0; result=false;}

if (key == '1') //If Button 1 is pressed
{Serial.println ("Button 1");
if (Number==0)
Number = (Number
10) + 1; //Pressed twice

if (key == '4') //If Button 4 is pressed
{Serial.println ("Button 4");
if (Number==0)
Number = (Number10) + 4; //Pressed twice

if (key == '7') //If Button 7 is pressed
{Serial.println ("Button 7");
if (Number==0)
Number = (Number
10) + 7; //Pressed twice

if (key == '0')
{Serial.println ("Button 0"); //Button 0 is Pressed
if (Number==0)
Number = (Number10) + 0; //Pressed twice

if (key == '2') //Button 2 is Pressed
{Serial.println ("Button 2");
if (Number==0)
Number = (Number
10) + 2; //Pressed twice

if (key == '5')
{Serial.println ("Button 5");
if (Number==0)
Number = (Number10) + 5; //Pressed twice

if (key == '8')
{Serial.println ("Button 8");
if (Number==0)
Number = (Number
10) + 8; //Pressed twice

if (key == '#')
{Serial.println ("Button Equal");
result = true;

if (key == '3')
{Serial.println ("Button 3");
if (Number==0)
Number = (Number10) + 3; //Pressed twice

if (key == '6')
{Serial.println ("Button 6");
if (Number==0)
Number = (Number
10) + 6; //Pressed twice

if (key == '9')
{Serial.println ("Button 9");
if (Number==0)
Number = (Number10) + 9; //Pressed twice

if (key == 'A' || key == 'B' || key == 'C' || key == 'D') //Detecting Buttons on Column 4
Num1 = Number;
Number =0;
if (key == 'A')
{Serial.println ("Addition"); action = '+';}
if (key == 'B')
{Serial.println ("Subtraction"); action = '-'; }
if (key == 'C')
{Serial.println ("Multiplication"); action = '
if (key == 'D')
{Serial.println ("Devesion"); action = '/';}


void CalculateResult()
if (action=='+')
Number = Num1+Num2;

if (action=='-')
Number = Num1-Num2;

if (action=='')
Number = Num1

if (action=='/')
Number = Num1/Num2;

void DisplayResult()
lcd.setCursor(0, 0); // set the cursor to column 0, line 1
lcd.print(Num1); lcd.print(action); lcd.print(Num2);

if (result==true)
{lcd.print(" ="); lcd.print(Number);} //Display the result

lcd.setCursor(0, 1); // set the cursor to column 0, line 1
lcd.print(Number); //Display the result


If you have completed all 9 lessons in this course, then you have completed the Arduino for Kooks basic-level course! You have learned most of the wiring and programming rudiments necessary to go on and build your very own projects with the Arduino platform!

As a reward for your efforts, I have designed a “merit badge” that you can attach to your EDC, patch wall, or a sweet hacker jacket. You’ve worked hard to achieve it, so show off your new skill set!


Arduino Basics Lesson 3-1: Ultrasonic DME

For the “Arduino For Kooks” course, I recommend you get the Arduino Starter Kit available here.

Now that we’ve learned the basics of digital and analog signalling on an Arduino, let’s start exploring with different kinds of sensors. The ultrasonic sensor module is a rudimentary SONAR device that emits and detects a particular high-frequency sound pulse. We can use this pulse to determine the location and relative position of objects.

The Circuit:

Using jumpers, connect +5V on the Arduino to VCC on the sensor and GND to GND. Connect the sensor’s Trigger and Echo pins to the Arduino at D2 and D4 respectively.

The Sketch:

const int trigPin = 2;
const int echoPin = 4;
void setup() {
void loop()
long duration, inches, cm;
pinMode(trigPin, OUTPUT);
digitalWrite(trigPin, LOW);
digitalWrite(trigPin, HIGH);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
Serial.print("in, ");
long microsecondsToInches(long microseconds)
{return microseconds / 74 / 2;
long microsecondsToCentimeters(long microseconds)
{return microseconds / 29 / 2;}

Arduino Basics Lesson 2-3: (Liquid) Crystal Ball

For the “Arduino For Kooks” course, I recommend you get the Arduino Starter Kit available here.

The Arduino, despite its simplicity, is a very powerful electronics platform and it can do so much more than blink LEDs or make noises with a buzzer. In this project, we’re going to connect a simple character LCD to the Arduino and use it to display some randomly selected custom text.

The Circuit:

Start by connecting +5V and GND to their respective busses on the breadboard. Use a jumpers to connect one side of a tactile switch to +5V and the other side to D8. Also connect a 10KR resistor to GND to act as a pull-down and prevent the pin from floating.

Connect a 10KR rotary potentiometer’s + and – pins to +5V and GND respectively while connecting the drain pin to pin 3 on the LCD. Finally, connect the LCD pins as shown in the schematic below:

The Sketch:


LiquidCrystal lcd(12,11,5,4,3,2); // generates an instance in the lcd

const int switchPin = 6;
int switchState = 0;
int prevSwitchState = 0;
int reply;

void setup() {

pinMode(switchPin, INPUT);
lcd.print("I AM THE GREAT");
lcd.setCursor(0,1); // changes the Cursor to continue writing in the second row

void loop() {

if (switchState != prevSwitchState) {
if (switchState == LOW) {
reply = random(8);
lcd.clear(); // clears the screen

switch(reply){ // the program will enter the case
assigned to the switch
case 0:
case 1:
lcd.print("It's probable");
case 2:
lcd.print("It is certain");
case 3:
lcd.print("Outlook good");
case 4:
lcd.print("It is unclear");
case 5:
lcd.print("Ask again");
case 6:
lcd.print("I have no idea");
case 7: