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!

PARTS/TOOLS:

CR2025 Battery

Warranty Voiding Tool Kit

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 OctoPrint.org

Etcher is available for Mac, Windows, and Linux at Balena.io

Benchy Quick Print by Thumper72 is available on Thingiverse

3D Printing a Coffee Mug Cupholder Adapter

Ever notice how your coffee mugs NEVER fit in the standard cup holder–often leading to catastrophic spills, burnt legs, and general angsty bad days? Is that just me? Fear no more, for I have solved this particular conundrum with a little bit of ingenuity and a healthy dose of 3D printing! Let’s 3D print a solution to this age-old problem of oversized coffee mugs and undersized sofa cupholders!

Want to remix this design (or just build your own?) Download the STL files

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.

REVIEW VIDEO COMING SOON!

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 https://www.arduino.cc/en/Reference/LiquidCrystal
#include //Header file for Keypad from https://github.com/Chris--A/Keypad

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

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

{'7','8','9','D'},
{'4','5','6','C'},
{'1','2','3','B'},
{'','0','#','A'}
};

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)
DetectButtons();

if (result==true)
CalculateResult();

DisplayResult();
}

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=1;
else
Number = (Number
10) + 1; //Pressed twice
}

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

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

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

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

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

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

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

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

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

if (key == '9')
{Serial.println ("Button 9");
if (Number==0)
Number=9;
else
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 = '/';}

delay(100);
}
}

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

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

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

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
}

Congratulations!

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!

CLICK HERE TO ORDER YOUR BADGE

Arduino For Kooks Merit Badge

Congratulations on completing the Arduino for Kooks course in Arduino basics! As a reward for your efforts, you are eligible to wear this exclusive merit badge to show off your achievement and new skill set! This design is based on the Arduino Community Logo as I am not affiliated with Arduino the company. It’s going to be a hexagonal design so you can wear it with future badges in a sweet honeycomb design, but it looks just as good paired with other organizations’ badges, too!

The badge isn’t ready yet, but it will be soon! I’m working through the manufacturing process, and I will let you know once they’re ready! They’re going to measure about 1.5-2 inches across, and I’m looking to have the price point somewhere around $3US plus shipping, so let me know if you are interested in nabbing one of the first! You can check up on the progress via Instagram @theairbornesurfer

Harbor Freight LED Parts Harvest

In this video, we’re going to teardown a few of Harbor Freight’s LED lighting products to harvest the parts for some other projects. In particular, I’m interested in different LED form factors to add some variety to Project Eros, so we will be tearing apart a switch light, a small flashlight, and an adhesive puck light to have at their innards and see what we can salvage from them. Which one will have the most useful parts? The answer may surprise you!

Check out the rest of Project Eros here

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() {
Serial.begin(9600);}
void loop()
{
long duration, inches, cm;
pinMode(trigPin, OUTPUT);
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(100);
}
long microsecondsToInches(long microseconds)
{return microseconds / 74 / 2;
}
long microsecondsToCentimeters(long microseconds)
{return microseconds / 29 / 2;}

What Is Electrodermal Activity?

Skin conductance, galvanic skin response, electrodermal activity: What is the phenomenon that describes how electricity is conducted across human skin? In this video, we’ll take a quick look at the history and the mechanism of electrodermal activity, how it’s used, and whether we can trust the results. If you want to know how a lie detector works, how a love tester works, or how an e-meter works, then sit down for a quick primer!

Get the Arduino code, bill of materials, and more on element14.com/presents

Check out the rest of Project Eros here

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:

#include

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() {
lcd.begin(16,2);

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

void loop() {
switchState=digitalRead(switchPin);

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

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

}

Adventitious Geekery and other distractions created or curated by Matthew "Atari" Eargle