Category: DIY Projects

Arduino Motion Detecting Squirt Gun

Video Walkthrough


Learn the basics of controlling objects with your Smartphone through Bluetooth!


Parts List


Acquiring the Parts

Here’s what you will need:

TOTAL COST: ~$45.00

Step 1


Disassemble the Automatic Sprayer

Step 2


Wire Up The Arduino

Here is a schematic of the Arduino. You can download the Fritzing files by clicking on this link.

Screen Shot 2014-03-29 at 3.15.19 PM

Step 3


Add The Code

Here is a copy of the Arduino code to upload to your arduino. You can also download it by clicking on this link.


const int pirPower = 13;
const int pirIn = 12;
int motorPin1 = 3;

void setup(){
pinMode(pirPower, OUTPUT);
pinMode(pirIn, INPUT);
pinMode(motorPin1, OUTPUT);
digitalWrite(motorPin1, LOW);
digitalWrite(pirPower, HIGH);
}

void loop(){
int value= digitalRead(pirIn);
if (value == HIGH){
digitalWrite(motorPin1, HIGH);
delay(500);
digitalWrite(motorPin1, LOW);
}
}

Useful Links


Help support my channel:

http://www.patreon.com/tinkernut

Follow Tinkernut!
Google +
Facebook
Twitter

Posted on March 29, 2014 By admin With 0 comments

Motion Detecting Squirt Gun Prank

Video Walkthrough


Learn the basics of controlling objects with your Smartphone through Bluetooth!


Parts List

Acquiring the Parts

Here’s what you will need:

TOTAL COST: ~$25.00

Step 1


Disassemble the Air Freshner

Step 2


Disassemble the Automatic Sprayer

Step 3


Connect the Air Freshner to the Automatic Sprayer

Useful Links


Help support my channel:

http://www.patreon.com/tinkernut

Follow Tinkernut!
Google +
Facebook
Twitter

Posted on March 29, 2014 By admin With 0 comments

Control An RC Car With A Smartphone

Video Walkthrough


Learn the basics of controlling objects with your Smartphone through Bluetooth!


Parts List

Acquiring the Parts
Here’s what you will need:

TOTAL COST: ~$30.00

Step 1


Adding Bluetooth to the Arduino

  1. To get started on adding bluetooth to the Arduino, you can watch my Arduino Bluetooth Basics Tutorial
  2. For a wiring diagram, you can reference my Fritzing sketch. (You need to download Fritzing
    in order t. view this.)

    h-bridge-wiring

Step 2

Software

Android

  1. To find your bluetooth’s MAC address, a good program to use is called Ardudroid on the Google Play store.
  2. To control the car, Tolik777 has created a great app that you can download from here and install on your Anrdoid device.

Arduino

  1. The first thing you need to to is download the Arduino software for your computer.
  2. Then you need to copy this code to a new sketch and upload it to your Arduino device. Code provided by
 
#include "EEPROM.h"

#define D1 2          // direction of motor rotation 1
#define M1 3          // PWM left motor
#define D2 4          // direction of motor rotation 2
#define M2 5          // PWM right motor
#define HORN 13       // additional channel 1
//#define autoOFF 2500  // milliseconds after which the robot stops when the connection

#define cmdL 'L'      // UART-command for left motor
#define cmdR 'R'      // UART-command for right motor
#define cmdH 'H'      // UART-command for additional channel (for example Horn)
#define cmdF 'F'      // UART-command for EEPROM operation
#define cmdr 'r'      // UART-command for EEPROM operation (read)
#define cmdw 'w'      // UART-command for EEPROM operation (write)

char incomingByte;    // incoming data

char L_Data[4];       // array data for left motor
byte L_index = 0;     // index of array L
char R_Data[4];       // array data for right motor
byte R_index = 0;     // index of array R
char H_Data[1];       // array data for additional channel
byte H_index = 0;     // index of array H
char F_Data[8];       // array data for  EEPROM
byte F_index = 0;     // index of array F
char command;         // command

unsigned long currentTime, lastTimeCommand, autoOFF;

void setup() {
  Serial.begin(9600);       // initialization UART
  pinMode(HORN, OUTPUT);    // additional channel
  pinMode(D1, OUTPUT);      // output for motor rotation
  pinMode(D2, OUTPUT);      // output for motor rotation
  /*EEPROM.write(0,255);
  EEPROM.write(1,255);
  EEPROM.write(2,255);
  EEPROM.write(3,255);*/
  timer_init();             // initialization software timer
}

void timer_init() {
  uint8_t sw_autoOFF = EEPROM.read(0);   // read EEPROM "is activated or not stopping the car when losing connection"
  if(sw_autoOFF == '1'){                 // if activated
    char var_Data[3];
    var_Data[0] = EEPROM.read(1);
    var_Data[1] = EEPROM.read(2);
    var_Data[2] = EEPROM.read(3);
    autoOFF = atoi(var_Data)*100;        // variable autoOFF ms
  }
  else if(sw_autoOFF == '0'){        
    autoOFF = 999999;
  }
  else if(sw_autoOFF == 255){
    autoOFF = 2500;                      // if the EEPROM is blank, dafault value is 2.5 sec
  }
  currentTime = millis();                // read the time elapsed since application start
}
 
void loop() {
  if (Serial.available() > 0) {          // if received UART data
    incomingByte = Serial.read();        // raed byte
    if(incomingByte == cmdL) {           // if received data for left motor L
      command = cmdL;                    // current command
      memset(L_Data,0,sizeof(L_Data));   // clear array
      L_index = 0;                       // resetting array index
    }
    else if(incomingByte == cmdR) {      // if received data for left motor R
      command = cmdR;
      memset(R_Data,0,sizeof(R_Data));
      R_index = 0;
    }
    else if(incomingByte == cmdH) {      // if received data for additional channel
      command = cmdH;
      memset(H_Data,0,sizeof(H_Data));
      H_index = 0;
    }   
    else if(incomingByte == cmdF) {      // if received data for EEPROM op
      command = cmdF;
      memset(F_Data,0,sizeof(F_Data));
      F_index = 0;
    }
    else if(incomingByte == '\r') command = 'e';   // end of line
    else if(incomingByte == '\t') command = 't';   // end of line for EEPROM op
    
    if(command == cmdL && incomingByte != cmdL){
      L_Data[L_index] = incomingByte;              // store each byte in the array
      L_index++;                                   // increment array index
    }
    else if(command == cmdR && incomingByte != cmdR){
      R_Data[R_index] = incomingByte;
      R_index++;
    }
    else if(command == cmdH && incomingByte != cmdH){
      H_Data[H_index] = incomingByte;
      H_index++;
    }   
    else if(command == cmdF && incomingByte != cmdF){
      F_Data[F_index] = incomingByte;
      F_index++;
    }   
    else if(command == 'e'){                       // if we take the line end
      Control4WD(atoi(L_Data),atoi(R_Data),atoi(H_Data));
      delay(10);
    }
    else if(command == 't'){                       // if we take the EEPROM line end
      Flash_Op(F_Data[0],F_Data[1],F_Data[2],F_Data[3],F_Data[4]);
    }
    lastTimeCommand = millis();                    // read the time elapsed since application start
  }
  if(millis() >= (lastTimeCommand + autoOFF)){     // compare the current timer with variable lastTimeCommand + autoOFF
    Control4WD(0,0,0);                             // stop the car
  }
}

void Control4WD(int mLeft, int mRight, uint8_t Horn){

  bool directionL, directionR;      // direction of motor rotation L298N
  byte valueL, valueR;              // PWM M1, M2 (0-255)
  
  if(mLeft > 0){
    valueL = mLeft;
    directionL = 0;
  }
  else if(mLeft < 0){
    valueL = 255 - abs(mLeft);
    directionL = 1;
  }
  else {
    directionL = 0;
    valueL = 0;
  }
 
  if(mRight > 0){
    valueR = mRight;
    directionR = 0;
  }
  else if(mRight < 0){
    valueR = 255 - abs(mRight);
    directionR = 1;
  }
  else {
    directionR = 0;
    valueR = 0;
  }
   
  analogWrite(M1, valueL);            // set speed for left motor
  analogWrite(M2, valueR);            // set speed for right motor
  digitalWrite(D1, directionL);       // set direction of left motor rotation
  digitalWrite(D2, directionR);       // set direction of right motor rotation
  
  digitalWrite(HORN, Horn);           // additional channel
}

void Flash_Op(char FCMD, uint8_t z1, uint8_t z2, uint8_t z3, uint8_t z4){

  if(FCMD == cmdr){           // if EEPROM data read command
    Serial.print("FData:");       // send EEPROM data
    Serial.write(EEPROM.read(0));     // read value from the memory with 0 address and print it to UART
    Serial.write(EEPROM.read(1));
    Serial.write(EEPROM.read(2));
    Serial.write(EEPROM.read(3));
    Serial.print("\r\n");         // mark the end of the transmission of data EEPROM
  }
  else if(FCMD == cmdw){          // if EEPROM data write command
    EEPROM.write(0,z1);               // z1 record to a memory with 0 address
    EEPROM.write(1,z2);
    EEPROM.write(2,z3);
    EEPROM.write(3,z4);
    timer_init();             // reinitialize the timer
    Serial.print("FWOK\r\n");         // send a message that the data is successfully written to EEPROM
  }
}

Links

Follow Tinkernut!
Google +
Facebook
Twitter

 

Posted on March 15, 2014 By admin With 0 comments

Arduino Bluetooth Basics

Overview


This video will show you the basics of controlling an Arduino through bluetooth. Click the “Step” tags for a walkthrough!


Step 1

Acquiring the Parts
Here’s what you will need:

  • A Bluetooth Capable Smartphone (I’ll be using an Android).
  • An Arduino ($10.99)
  • An Arduino Bluetooth Module ($6.45)
  • An LED ($0.99)

Step 2

Wiring

You can download the Fritzing sketch here.

Screen Shot 2014-03-08 at 7.38.33 PM

Step 3

Software

Android

A good Android program for Arduino is called Ardudroid on the Google Play store.

 

Arduino

 
int ledPin = 13; 
int state = 0;
int flag = 0; 
 
void setup() {
 pinMode(ledPin, OUTPUT);
 digitalWrite(ledPin, LOW);
 
 Serial.begin(9600); // Default connection rate for my BT module
}
 
void loop() {

 if(Serial.available() > 0){
 state = Serial.read();
 flag=0;
 }

 if (state == '0') {
 digitalWrite(ledPin, LOW);
 if(flag == 0){
 Serial.println("LED: off");
 flag = 1;
 }
 }

 else if (state == '1') {
 digitalWrite(ledPin, HIGH);
 if(flag == 0){
 Serial.println("LED: on");
 flag = 1;
 }
 }
}

Links

Follow Tinkernut!
Google +
Facebook
Twitter

 

Posted on March 9, 2014 By admin With 0 comments

Urban Survival 101 [Youtube Nextup Collaberation]

This video will show you how to create a fully functioning stove out of junk. To be more specific, we’ll create a grill out of a coffee can, tin foil, a cooling rack, 9v battery and steel wool.

 

After learning how to make this, check out the Cooking With Jack Channel (www.youtube.com/jakatak69) to learn how to cook on it!

 

YOUTUBE NEXTUP CREATORS! COLLECT THEM ALL!

www.youtube.com/KidHaru

www.youtube.com/peterhollens

www.youtube.com/Techmaster8

www.youtube.com/Wrenthereaper

www.youtube.com/comediva

www.youtube.com/Cracked

www.youtube.com/emmymadeinjapan

www.youtube.com/Evelinicutza

www.youtube.com/nikkiphillippi

www.youtube.com/MamaNaturalBlog

www.youtube.com/CheckInTheMirror

www.youtube.com/riannstar

www.youtube.com/Cyr1216

www.youtube.com/MrRepzion

www.youtube.com/Soundlyawake

www.youtube.com/xperpetualmotion

www.youtube.com/PrettyMuchIt

www.youtube.com/shep689

www.youtube.com/StrengthProject

www.youtube.com/AVbyte

www.youtube.com/jakatak69

www.youtube.com/PaperPastels

www.youtube.com/gigafide

www.youtube.com/suburbanhomeboy

www.youtube.com/thenivenulls

www.youtube.com/recklessmike

www.youtube.com/JWatson2239

www.youtube.com/Nitrorcx

www.youtube.com/qbanguy

www.youtube.com/WTFfilmsFTW

Posted on February 17, 2013 By admin With 0 comments