Ks0080(81, 82)keyestudio Maker Learning Kit for Arduino

From Keyestudio Wiki
Jump to: navigation, search

keyestudio Maker Learning Kit for Arduino


thumb

1. Kit Introduction

Want to have enormous fun? Want to DIY some projects? Want to be more creative and more imaginative? Want your child to learn science while having fun? As long as you are willing to create, dare to experience new things, have a passion for scientific experiments, this maker kit is your best tailored choice!
Maker learning kit is a DIY kit for scientific experiments based on ARDUINO. Together with controller, sensors, electronic components, you can build different DIY projects. It can not only enhance operational ability of teenagers, but also develop their imagination and creativity.
Children who are into DIY can learn electronics, physics, science knowledge and software programming while playing; teachers can use it to achieve innovative teaching; makers can use it for design verification of product prototype.

2. Kit Contents

No. Product Name Quantity Picture
1 NO Board with KS0080 Kit 1
1 UNO R3 with KS0081 Kit 1
thumb
1 256O R3 with KS0082 Kit 1
thumb
1 LED - Red 10
thumb
2 LED - Yellow 10
thumb
3 LED - Blue 10
thumb
4 LED - Green 10
thumb
5 LED - RGB 2
thumb
6 220 Ω Resistor 20
thumb
7 100K Ω Resistor 20
thumb
8 1K Ω Resistor 20
thumb
9 4.7K Ω Resistor 20
thumb
10 47K Ω Resistor 20
thumb
11 47K Ω Resistor 20
thumb
12 101 Ceramic Capacitor 10
thumb
13 103 Ceramic Capacitor 10
thumb
14 22 Ceramic Capacitor 10
thumb
15 104 Ceramic Capacitor 10
thumb
16 100uf16V Electrolytic Capacitor 10
thumb
17 10uf16V Electrolytic capacitor 10
thumb
18 Button 6
thumb
19 Yellow Round Cap 3
thumb
20 Blue Round Cap 3
thumb
21 4007 Diode 5
thumb
22 4007 Diode 2
thumb
23 8550 Transistor 2
thumb
24 1-digit 7-seg LED (small) 1
thumb
25 4-digit 7-seg LED (small) 1
thumb
26 Dot Matrix (small) 1
thumb
27 5V Relay 1
thumb
28 TIP122 Triode 1
thumb
29 Crystal Oscillator 1
thumb
30 801S Sensor 1
thumb
31 Highly Sensitive MIC 1
thumb
32 Rotary Encoder 1
thumb
33 DHT11 Temperature and Humidity 1
thumb
34 LM35 Temperature Sensor 1
thumb
35 Flame Sensor 1
thumb
36 Ball Tilt Sensor 2
thumb
37 103 Thermistor 1
thumb
38 Photoresistor 2
thumb
39 103 Variable Resistor 2
thumb
40 4N35 1
thumb
41 NE555P 1
thumb
42 DS1302 1
thumb
43 74HC595 IC 2
thumb
44 Active Buzzer 1
thumb
45 Passive Buzzer 1
thumb
46 Fan Leaf 1
thumb
47 Fan Motor 1
thumb
48 9G Servo Motor 1
thumb
49 I2C 1602 LCD 1
thumb
50 USB Cable 1m 1
thumb
51 Breadboard Wires 1*65 1
thumb
52 Male to Female Dupont Line 20
thumb
53 400-hole Breadboard 1
thumb
54 Round Head Screw M3*6MM 4
thumb
55 Chassis 1
thumb
56 Remote Control 1
thumb
57 Resistor Chip 1
thumb
58 Joystick Module 1
thumb
59 IR Receiver 1
thumb
60 PIR Motion Sensor 1
thumb
61 Button Module 1
thumb
62 TEMT6000 Sensor 1
thumb
63 Steam Sensor 1
thumb
64 Ultrasonic Sensor 1
thumb
65 Battery Case 1
thumb

3. Project List

Project 1: Hello World
Project 2: LED Blinking
Project 3: Breathing LED
Project 4: PWM Light Control
Project 5: Traffic Light
Project 6: LED Chasing Effect
Project 7: Button-controlled LED
Project 8: Responder
Project 9: Passive Buzzer
Project 10: Photo Resistor
Project 11: Flame Sensor
Project 12: Analog Temperature (Thermistor)
Project 13: A Cup with Temperature Indicator
Project 14: Magical Light Cup
Project 15: Vibration Switch
Project 16: Sound-control Light
Project 17: Voltmeter
Project 18: Rotary Encoder
Project 19: 5V Relay
Project 20: Mos Tube Driving Motor
Project 21: NE555 Timer
Project 22: Counting Your Number
Project 23: Displaying Your “0”
Project 24: Changing Numbers
Project 25: DHT11 Temperature and Humidity Sensor
Project 26: Driving Your Servo Motor
Project 27: Choosing Your Favorite Color
Project 28: IR Remote Control
Project 29: 4*4 Button Module
Project 30: I2C 1602 LCD
Project 31: DS1302 Real Time Clock Module
Project 32: Making Your Body An Alarm Clock
Project 33: Getting Your Distance with Ultrasonic
Project 34: TEMT6000 Ambient Light Sensor
Project 35: Steam Sensor

4. Project Details

Project 1: Hello World


thumb
Introduction:

As for starters, we will begin with something simple. In this project, you only need an Arduino and a USB cable to start the "Hello World!" experiment. This is a communication test of your Arduino and PC, also a primer project for you to have your first try of the Arduino world!

Hardware Required:
1. Arduino board x1
2. USB cable x1

Sample Code:
After installing driver for Arduino, let's open Arduino software and compile code that enables Arduino to print "Hello World!" under your instruction. Of course, you can compile code for Arduino to continuously echo "Hello World!" without instruction. A simple If () statement will do the instruction trick. With the onboard LED connected to pin 13, we can instruct the LED to blink first when Arduino gets an instruction and then print "Hello World!”.

int val;//define variable val
int ledpin=13;// define digital interface 13
void setup()
{
Serial.begin(9600);// set the baud rate at 9600 to match the software set up. When connected to a specific device, (e.g. bluetooth), the baud rate needs to be the same with it.
pinMode(ledpin,OUTPUT);// initialize digital pin 13 as output. When using I/O ports on an Arduino, this kind of set up is always needed.
}
void loop()
{
val=Serial.read();// read the instruction or character from PC to Arduino, and assign them to Val.
if(val=='R')// determine if the instruction or character received is “R”.
{  // if it’s “R”,    
digitalWrite(ledpin,HIGH);// set the LED on digital pin 13 on. 
delay(500);
digitalWrite(ledpin,LOW);// set the LED on digital pin 13 off.    
delay(500);
Serial.println("Hello World!");// display“Hello World!”string.
}
}

Result:

thumb
Click serial port monitor,Input R,LED 13 will blink once,PC will receive information from Arduino: Hello World Hello World


thumb
After you choose the right port, the experiment should be easy for you!


Project 2: LED Blinking


thumb
Introduction:

Blinking LED experiment is quite simple. In the "Hello World!" program, we have come across LED. This time, we are going to connect an LED to one of the digital pins rather than using LED13, which is soldered to the board. Except an Arduino and an USB cable, we will need extra parts as below:

Hardware Required:
1.Arduino Board *1
2.USB Cable *1
3.Red M5 LED*1
4.220Ω Resistor*1
5.Breadboard*1
6.Breadboard Jumper Wires

Connection Diagram:
We follow below diagram from the experimental schematic link. Here we use digital pin 10. We connect LED to a 220 ohm resistor to avoid high current damaging the LED.

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample Code:

int ledPin = 10; // define digital pin 10.
void setup()
{
pinMode(ledPin, OUTPUT);// define pin with LED connected as output.
}
void loop()
{
digitalWrite(ledPin, HIGH); // set the LED on.
delay(1000); // wait for a second.
digitalWrite(ledPin, LOW); // set the LED off.
delay(1000); // wait for a second
}

Result:
After downloading this program, in the experiment, you will see the LED connected to pin 10 turning on and off, with an interval approximately one second.
The blinking LED experiment is now completed. Thank you!


Project 3: Breathing LED


thumb
Introduction:
After the first two projects, I believe you’ve grown familiar with Arduino. In this project, we will use LED to do something else, simulating breath. Sounds cool? Well, let’s get on with it. We will still be using the same hardware form project 2.

Hardware Required:
Arduino board *1
USB Cable *1
Red M5 LED*1
220Ω Resistor*1
Breadboard*1
Breadboard Jumper Wires

Connection Diagram:

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample Code:

int ledPin = 11; // define digital pin 11
void setup()
{
pinMode(ledPin, OUTPUT);// define LED pin as output
}
void loop()
{
for (int a=0; a<=255;a++)// set the LED to be brighter gradually 
{
analogWrite(ledPin,a); // turn on LED, regulate light brightness, ranging from 0-255, 255 is the brightest
delay(10); // wait for 0.01S
}
for (int a=255; a>=0;a--) // set LED to be dimming gradually
{
analogWrite(ledPin,a); // turn on LED, regulate light brightness, ranging from 0-255, 255 is the brightest
delay(10); // wait for 0.01S
}
delay(1000);// wait for 1S
}

Result:
LED becomes brighter gradually, wait for 0.01S, then dimming gradually, wait for 1S, and then cycles on, just like the LED is breathing.


Project 4: PWM Light Control


thumb
Introduction:

PWM, short for Pulse Width Modulation, is a technique used to encode analog signal level into digital ones. A computer cannot output analog voltage but only digital voltage values such as 0V or 5V. So we use a high resolution counter to encode a specific analog signal level by modulating the duty cycle of PMW. The PWM signal is also digitalized because in any given moment, fully on DC power supply is either 5V (ON), or 0V (OFF). The voltage or current is fed to the analog load (the device that uses the power) by repeated pulse sequence being ON or OFF. Being on, the current is fed to the load; being off, it's not. With adequate bandwidth, any analog value can be encoded using PWM. The output voltage value is calculated via the on and off time. Output voltage = (turn on time/pulse time) * maximum voltage value

thumb
PWM has many applications: lamp brightness regulating, motor speed regulating, sound making, etc. The following are the three basic parameters of PMW:
thumb
1. The amplitude of pulse width (minimum / maximum)
2. The pulse period (The reciprocal of pulse frequency in 1 second)
3. The voltage level(such as:0V-5V)
There are 6 PMW interfaces on Arduino, namely digital pin 3, 5, 6, 9, 10, and 11. In previous experiments, we have done "button-controlled LED", using digital signal to control digital pin, also one about potentiometer. This time, we will use a potentiometer to control the brightness of the LED.

Hardware Required:
1. Potentiometer*1
2. Red M5 LED*1
3. 220Ω resistor
4. Breadboard*1
5. Breadboard jumper wires*several

The input of potentiometer is analog, so we connect it to analog port, and LED to PWM port. Different PWM signal can regulate the brightness of the LED.
Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample Code:
In the program compiling process, we will use the analogWrite (PWM interface, analog value) function. In this experiment, we will read the analog value of the potentiometer and assign the value to PWM port, so there will be corresponding change to the brightness of the LED. One final part will be displaying the analog value on the screen. You can consider this as the "analog value reading" project adding the PWM analog value assigning part. Below is a sample program for your reference.

int potpin=0;// initialize analog pin 0
int ledpin=11;//initialize digital pin 11(PWM output)
int val=0;// Temporarily store variables' value from the sensor
void setup()
{
pinMode(ledpin,OUTPUT);// define digital pin 11 as “output”
Serial.begin(9600);// set baud rate at 9600
// attention: for analog ports, they are automatically set up as “input”
}
void loop()
{
val=analogRead(potpin);// read the analog value from the sensor and assign it to val
Serial.println(val);// display value of val
analogWrite(ledpin,val/4);// turn on LED and set up brightness(maximum output of PWM is 255)
delay(10);// wait for 0.01 second
}


thumb

Result:
After downloading the program, when we rotate the potentiometer knob, we can see changes of the displaying value, also obvious change of the LED brightness on the breadboard.


Project 5: Traffic Light

Introduction: In the previous program, we have done the LED blinking experiment with one LED. Now, it’s time to up the stakes and do a bit more complicated experiment-traffic lights. Actually, these two experiments are similar. While in this traffic lights experiment, we use 3 LEDs with different color other than 1 LED.

Hardware Required:
1. Arduino board *1
2. USB cable *1
3. Red M5 LED*1
4. Yellow M5 LED*1
5. Green M5 LED*1
6. 220Ω resistor *3
7. Breadboard*1
8. Breadboard jumper wires* several

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample Code:
Since it is a simulation of traffic lights, the blinking time of each LED should be the same with those in traffic lights system. In this program, we use Arduino delay () function to control delay time, which is much simpler than C language.

int redled =10; // initialize digital pin 8.
int yellowled =7; // initialize digital pin 7.
int greenled =4; // initialize digital pin 4.
void setup()
{
pinMode(redled, OUTPUT);// set the pin with red LED as “output”
pinMode(yellowled, OUTPUT); // set the pin with yellow LED as “output”
pinMode(greenled, OUTPUT); // set the pin with green LED as “output”
}
void loop()
{
digitalWrite(greenled, HIGH);//// turn on green LED
delay(5000);// wait 5 seconds
digitalWrite(greenled, LOW); // turn off green LED
for(int i=0;i<3;i++)// blinks for 3 times
{
delay(500);// wait 0.5 second
digitalWrite(yellowled, HIGH);// turn on yellow LED
delay(500);// wait 0.5 second
digitalWrite(yellowled, LOW);// turn off yellow LED
} 
delay(500);// wait 0.5 second
digitalWrite(redled, HIGH);// turn on red LED
delay(5000);// wait 5 second
digitalWrite(redled, LOW);// turn off red LED
}

Result:
When the uploading process is completed, we can see traffic lights of our own design.
Note: this circuit design is very similar with the one in LED chase effect.
The green light will be on for 5 seconds, and then off., followed by the yellow light blinking for 3 times, and then the red light on for 5 seconds, forming a cycle. Cycle then repeats.
Experiment is now completed, thank you.


Project 6: LED Chasing Effect


thumb
Introduction:
We often see billboards composed of colorful LEDs. They are constantly changing to form various effects. In this experiment, we compile a program to simulate chase effect.

Hardware Required:
Arduino Board *1
USB Cable *1
Red M5 LED *6
220Ω Resistor *6
Breadboard Jumper Wires

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample Code:

int BASE = 2 ;  // the I/O pin for the first LED
int NUM = 6;   // number of LEDs

void setup()
{
   for (int i = BASE; i < BASE + NUM; i ++) 
   {
     pinMode(i, OUTPUT);   // set I/O pins as output
   }
}

void loop()
{
   for (int i = BASE; i < BASE + NUM; i ++) 
   {
     digitalWrite(i, LOW);    // set I/O pins as “low”, turn off LEDs one by one.
     delay(200);        // delay
   }
   for (int i = BASE; i < BASE + NUM; i ++) 
   {
     digitalWrite(i, HIGH);    // set I/O pins as “high”, turn on LEDs one by one
     delay(200);        // delay
   }  
}

Result:
You can see the LEDs blink by sequence.


Project 7: Button-controlled LED


thumb
Introduction:
I/O port means interface for INPUT and OUTPUT. Up until now, we have only used its OUTPUT function. In this experiment, we will try to use the input function, which is to read the output value of device connecting to it. We use 1 button and 1 LED using both input and output to give you a better understanding of the I/O function. Button switches, familiar to most of us, are a switch value (digital value) component. When it's pressed, the circuit is in closed (conducting) state.

Hardware Required:
Arduino Board *1
USB Cable *1
Button Switch*1
Red M5 LED*1
220Ω Resistor*1
10KΩ Resistor*1
Breadboard*1
Breadboard Jumper Wires

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample Code:
Now, let's begin the compiling. When the button is pressed, the LED will be on. After the previous study, the coding should be easy for you. In this program, we add a statement of judgment. Here, we use an if () statement. Arduino IDE is based on C language, so statements of C language such as while, switch etc. can certainly be used for Arduino program. When we press the button, pin 7 will output high level. We can program pin 11 to output high level and turn on the LED. When pin 7 outputs low level, pin 11 also outputs low level and the LED remains off.

int ledpin=11;// initialize pin 11
int inpin=7;// initialize pin 7
int val;// define val
void setup()
{
pinMode(ledpin,OUTPUT);// set LED pin as “output”
pinMode(inpin,INPUT);// set button pin as “input”
}
void loop()
{
val=digitalRead(inpin);// read the level value of pin 7 and assign if to val
if(val==LOW)// check if the button is pressed, if yes, turn on the LED
{ digitalWrite(ledpin,LOW);}
else
{ digitalWrite(ledpin,HIGH);}
}

Result:
When the button is pressed, LED is on, otherwise, LED remains off. After the above process, the button controlled LED experiment is completed. The simple principle of this experiment is widely used in a variety of circuit and electric appliances. You can easily come across it in your every day life. One typical example is when you press a certain key of your phone, the backlight will be on.


Project 8: Responder

Introduction:
After completing all the previous experiments, we believe you will find this one easy. In this program, we have 3 buttons and a reset button controlling the corresponding 3 LEDs, using 7 digital I/O pins. 

Hardware Required:
Arduino Board *1
USB Cable *1
Button Switch*4
Red M5 LED*1
Yellow M5 LED*1
Green M5 LED*1
220Ω Resistor*3
10KΩ Resistor*4
Breadboard*1
Breadboard Jumper Wires

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample Code:
Program is simple. You control the buzzer by outputting high/low level. 

int redled=8;     // set red LED as “output”
int yellowled=7;  // set yellow LED as “output”
int greenled=6;   // set green LED as “output”
int redpin=5;     // initialize pin for red button
int yellowpin=4;  // initialize pin for yellow button
int greenpin=3;   // initialize pin for green button
int restpin=2;   // initialize pin for reset button
int red;
int yellow;
int green;
void setup()
{
pinMode(redled,OUTPUT);
pinMode(yellowled,OUTPUT);
pinMode(greenled,OUTPUT);
pinMode(redpin,INPUT);
pinMode(yellowpin,INPUT);
pinMode(greenpin,INPUT);
}
void loop()  // repeatedly read pins for buttons
{
red=digitalRead(redpin);
yellow=digitalRead(yellowpin);
green=digitalRead(greenpin);
if(red==LOW)RED_YES();    
if(yellow==LOW)YELLOW_YES();
if(green==LOW)GREEN_YES();
}

void RED_YES()// execute the code until red light is on; end cycle when reset button is pressed
{
  while(digitalRead(restpin)==1)
  {
   digitalWrite(redled,HIGH);
   digitalWrite(greenled,LOW);
   digitalWrite(yellowled,LOW);
  }
  clear_led();
}
void YELLOW_YES()// execute the code until yellow light is on; end cycle when reset button is pressed
{
  while(digitalRead(restpin)==1)
  {
  digitalWrite(redled,LOW);
  digitalWrite(greenled,LOW);
  digitalWrite(yellowled,HIGH);
  }
  clear_led();
}
void GREEN_YES()// execute the code until green light is on; end cycle when reset button is pressed
{
  while(digitalRead(restpin)==1)
  {
  digitalWrite(redled,LOW);
  digitalWrite(greenled,HIGH);
  digitalWrite(yellowled,LOW);
  }
  clear_led();
}
void clear_led()// all LED off
{
  digitalWrite(redled,LOW);
  digitalWrite(greenled,LOW);
  digitalWrite(yellowled,LOW);
}

Result:
When the button is pressed first, the corresponding LED will be on!
Then press the REST button to reset.
After the above process, we have built our own simple responder.


Project 9: Passive Buzzer


thumb
Introduction:
We can use Arduino to make many interactive works of which the most commonly used is acoustic-optic display. All the previous experiment has something to do with LED. However, the circuit in this experiment can produce sound. Normally, the experiment is done with a buzzer or a speaker because buzzer is more simpler and easier to use. The buzzer we introduced here is a passive buzzer. It cannot be actuated by itself, but by external pulse frequencies. Different frequencies produce different sounds. We can use Arduino to code the melody of a song, which is quite fun and simple.

Hardware Required:
Arduino Board *1
USB Cable *1
Passive Buzzer*1
Breadboard*1
Breadboard Jumper Wires

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample Code:

int buzzer=8;// select digital IO pin for the buzzer
void setup() 
{ 
pinMode(buzzer,OUTPUT);// set digital IO pin pattern, OUTPUT to be output 
} 
void loop() 
{ unsigned char i,j;//define variable
while(1) 
{ for(i=0;i<80;i++)// output a frequency sound
{ digitalWrite(buzzer,HIGH);// sound
delay(1);//delay1ms 
digitalWrite(buzzer,LOW);//not sound
delay(1);//ms delay 
} 
for(i=0;i<100;i++)// output a frequency sound
{ digitalWrite(buzzer,HIGH);// sound
digitalWrite(buzzer,LOW);//not sound
delay(2);//2ms delay 
}
} 
}

Result:
After wiring and uploading program, the buzzer rings.


Project 10: Photo Resistor


thumb

Introduction:
After completing all the previous experiments, we acquired some basic understanding and knowledge about Arduino application. We have learned digital input and output, analog input and PWM. Now, we can begin the learning of sensors applications.
Photo resistor (Photovaristor) is a resistor whose resistance varies according to different incident light strength. It's made based on the photoelectric effect of semiconductor. If the incident light is intense, its resistance reduces; if the incident light is weak, the resistance increases. Photovaristor is commonly applied in the measurement of light, light control and photovoltaic conversion (convert the change of light into the change of electricity).
Photo resistor is also widely applied to various light control circuit, such as light control and adjustment, optical switches etc.
thumb
We will start with a relatively simple experiment regarding photovaristor application. Photovaristor is an element that changes its resistance as light strenth changes. So we will need to read the analog values. We can refer to the PWM experiment, replacing the potentiometer with photovaristor. When there is change in light strength, there will be corresponding change on the LED.

Hardware Required:
Arduino Board *1
USB Cable *1
Photo Resistor*1
Red M5 LED*1
10KΩ Resistor*1
220Ω Resistor*1
Bread Board*1
Bread Board Jumper Wires

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample Code:
After the connection, let's begin the program compiling. The program is similar to the one of PWM. For change detail, please refer to the Sample Code below.

int potpin=0;// initialize analog pin 0, connected with photovaristor
int ledpin=11;// initialize digital pin 11, output regulating the brightness of LED
int val=0;// initialize variable va
void setup()
{
pinMode(ledpin,OUTPUT);// set digital pin 11 as “output”
Serial.begin(9600);// set baud rate at “9600”
}
void loop()
{
val= map(analogRead(potpin),0,1023,0,255);
Serial.println(val);// display the value of val
analogWrite(ledpin,val);// turn on the LED and set up brightness(maximum output value 255)
delay(10);// wait for 0.01 
}

Result:
After uploading the program, you can change the light strength around the photovaristor and see corresponding brightness change of the LED. Photovaristors has various applications in our daily life. You can make other interesting interactive projects based on this one.


Project 11: Flame Sensor


thumb
Introduction:
Flame sensor (Infrared receiving triode) is specially used on robots to find the fire source. This sensor has high sensitivity to flame.

Working Principle:
Flame sensor is made based on the principle that infrared ray is highly sensitive to flame. It has a special infrared receiving tube designed to detect fire, and then convert the flame brightness to fluctuating level signal. The signals are then input into the central processor and to be dealt with accordingly.

Sensor Connection:
The shorter lead of the receiving triode is for negative, the other one for positive. Connect negative to 5V pin, positive to resistor; connect the other end of the resistor to GND, connect one end of a jumper wire to a clip which is electrically connected to sensor positive, the other end to analog pin. As shown below:

thumb

Hardware Required:
Arduino Board *1
USB Cable *1
Flame Sensor *1
Active Buzzer*1
10KΩ Resistor*1
Breadboard Jumper Wires

Connection:

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Experiment Principle:
When it's approaching a fire, the voltage value the analog port reads differs. If you use a multimeter, you can know when there is no fire approaching, the voltage it reads is around 0.3V; when there is fire approaching, the voltage it reads is around 1.0V, the nearer the fire, the higher the voltage.
So in the beginning of the program, you can initialize voltage value i (no fire value); Then, continuously read the analog voltage value j and obtain difference value k=j-i; compare k with 0.6V (123 in binary) to determine whether or not there is a fire approaching; if yes, the buzzer will buzz.

Sample Code:

int flame=0;// select analog pin 0 for the sensor
 int Beep=9;// select digital pin 9 for the buzzer
 int val=0;// initialize variable
 void setup() 
{
  pinMode(Beep,OUTPUT);// set LED pin as “output”
 pinMode(flame,INPUT);// set buzzer pin as “input”
 Serial.begin(9600);// set baud rate at “9600”
 } 
void loop() 
{ 
  val=analogRead(flame);// read the analog value of the sensor 
  Serial.println(val);// output and display the analog value
  if(val>=600)// when the analog value is larger than 600, the buzzer will buzz
  {  
   digitalWrite(Beep,HIGH); 
   }else 
   {  
     digitalWrite(Beep,LOW); 
    }
   delay(500); 
}

Result:
This program can simulate an alarm when there is a fire. Everything is normal when there is no fire; when there is fire, the alarm will be set off immediately.


Project 12: Analog Temperature (Thermistor)


thumb
Introduction:
Thermistor is a temperature measuring component based on the principle that a conductor changes in resistance with a change in its body temperature. As a result, it requires the temperature coefficient and the resistivity of the conductor to be as large and stable as possible. It is best that the resistance is in linear relationship with temperature. And it should also have stable physical and chemical properties in a wide range. Currently, the most used thermal resistance materials are platinum, nickel and copper.

Hardware Required:
Arduino Board *1
USB Cable *1
Thermistor *1
10KΩ Resistor *1
Breadboard *1
Breadboard Jumper Wires

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample Code:

 
void setup()
{
  Serial.begin(9600); //Set serial baud rate to 9600 bps
}
void loop()
{
int val;
val=analogRead(0);//Read rotation sensor value from analog 0
Serial.println(val,DEC);//Print the value to serial port
delay(100);
}

Result:
Shown in pic 1 is data displayed by serial port monitor in room temperature. After the temperature is changed ( a bag with hot water close to thermistor ), the data changes as shown in pic 2.
thumb
Pic 1
thumb
Pic 2


Project 13: A Cup with Temperature Indicator


thumb
Introduction:
Today, we will use Arduino to make a temperature-indicated cup. First, let’s design the circuit. When the LM35 temperature sensor senses different temperature, different LED will be turned on representing the temperature.

Hardware Required:
Arduino Board *1
USB Cable *1
Red M5 LED*1
Yellow M5 LED*1
Green M5 LED*1
220Ω Resistor*3
LM35 Temperature Sensor *1
Breadboard *1
Breadboard Jumper Wires

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample Code:

void setup() {
Serial.begin(9600);
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
}
void loop() {
  int vol = analogRead(A0) * (5.0 / 1023.0*100);   // read temperature value of LM35
Serial.print("Tep:");
 Serial.print(vol);
 Serial.println("C");
if (vol<28)                     // low temperature area and LED setup
{
  digitalWrite(13, HIGH);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
}
else if (vol>=28 && vol<=30)                            
 {
   digitalWrite(13, LOW);

  digitalWrite(12, HIGH);
  digitalWrite(11, LOW);
}
else if (vol>30)                               //  low temperature area and LED setup

{
   digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, HIGH);
}
}

Result:
Corresponding LED will be turned on in accordance with corresponding temperature range.


Project 14: Magical Light Cup


thumb
Introduction:
Magical light cup is a product developed by KEYES that can interact with ARDUINO.
The principle is to use PWM to regulate light brightness of the two components.
Mercury switch provides digital signal, triggering PWM to regulate light brightness. Through the designed program,
We can see effect like two cups pouring light to each other.

Hardware Required:
Arduino Board *1
USB Cable *1
Ball Tilt Switch *2
Red M5 LED*2
220Ω Resistor *2
10KΩ Resistor *2
Breadboard *1
Breadboard Jumper Wires

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample Code:

int LedPinA = 5;
int LedPinB = 6;
int ButtonPinA = 7;
int ButtonPinB = 4;
int buttonStateA = 0;
int buttonStateB = 0;
int brightnessA = 0;
int brightnessB= 255;
void setup()
{
Serial.begin(9600);
pinMode(LedPinA, OUTPUT);
pinMode(LedPinB, OUTPUT);
pinMode(ButtonPinA, INPUT);
pinMode(ButtonPinB, INPUT);
}
void loop()
{
buttonStateA = digitalRead(ButtonPinA);
if (buttonStateA == HIGH && brightnessA != 255)
{
brightnessA ++;
}
if (buttonStateA == LOW && brightnessA != 0)
{
brightnessA --;
}
analogWrite(LedPinB, brightnessA);
Serial.print(brightnessA);
Serial.print("   ");
buttonStateB = digitalRead(ButtonPinB);
if (buttonStateB == HIGH && brightnessB != 0)
{
brightnessB --;
}
if (buttonStateB == LOW && brightnessB != 255)
{
brightnessB++;
}
analogWrite(LedPinA, brightnessB); 
Serial.println(brightnessB);
delay(5);
}

Result:
Tilt the circuit to one side, A light on, B light out; tilt to the other side, A light out, B light on.


Project 15: Vibration Switch


thumb
Introduction:
Vibration switch, the correct name should be vibration sensor. It is a electronic switch sensing the intensity of a vibration and transfer the result to the circuit device, and activate the circuit to start working.

Hardware Required:
Arduino Board *1
USB Cable *1
Vibration Sensor*1
10KΩ Resistor *1
Breadboard*1
Breadboard Jumper Wires

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb


Sample Code:

#define SensorLED     13
#define SensorINPUT   2  
unsigned char state = 0; 
void setup() 
{ 
  pinMode(SensorLED, OUTPUT); 
  pinMode(SensorINPUT, INPUT);
attachInterrupt(0, blink, FALLING);//D2 as external interruption 0, when there is falling trigger and call blink function
 
}
void loop()
{
      if(state!=0)
      {
        digitalWrite(SensorLED,HIGH);
        delay(3000);
        state = 0;
      }   
      else 
        digitalWrite(SensorLED,LOW);
}  
 
void blink()// digital input of the sensor falling, triggering interruption function
{
  state++;
}

Result:
Touch the sensor with your hand, the D13 indicator light on Arduino will be on for 3 seconds and then be out.


Project 16: Sound-control Light


thumb
Introduction:
In this experiment, we use sound passing through MIC to control the on and off of the light.

Hardware Required:
Arduino Board *1
USB Cable *1
Potentiometer *1
Highly Sensitive MIC *1
Red M5 LED *1
220Ω Resistor *2
Breadboard *1
Breadboard Jumper Wires

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb
The Connection Diagram for this experiment is relatively simple. It has no processing of the signal from the MIC, so signal is weak and insensitive. Instead of sound signal, we blow air to the MIC.

Sample Code:

int LEDpin = 7;                 // set pin for LED 
void setup() {
  Serial.begin(9600);
  pinMode(LEDpin,OUTPUT);
}
void loop() {
  
  int Soundvalue = analogRead(A0);  // read the input analog value
  Serial.println(Soundvalue);
  if(Soundvalue>700)
  {
   digitalWrite(LEDpin,HIGH);      // when the analog value is bigger than the set value, turn on the LED
   for(int i=0;i<5;i++){
   delay(1000);                    // wait for 5s
   }
  }
  else{
   digitalWrite(LEDpin,LOW);      // turn off the LED 
    }
}

Program description: By rotating the potentiometer, the analog value of A0 changes; After adjusting the potentiometer, blow air into the MIC, and observe data in the serial monitor. For example, the displayed data is less than 300 before blowing; after blowing, data is more than 700. Setup code if (Soundvalue > 700), control the on and off of the light; the on time of the light is controlled by the code for(int i=0;i<5;i++) { delay(1000); }, so the light is on 5*1s.


Result:
Connect the wire according to the connection diagram. Rotate the potentiometer to adjust the LED to a state where it’s between on and off . When the light is out, data as shown in serial port monitor as pic 1; when clapping hands , light is on for 5 seconds and data as shown in pic 2.
thumb
Pic 1
thumb
Pic 2


Project 17: Voltmeter


thumb
Introduction:
Today, let’s learn how to use Arduino serial communication and analog ports. We have introduced serial ports before. It can measure voltage 0-5V, and return corresponding 0-1023 value. Today, we will use Arduino analog to make a 0-5V voltmeter. Note: in this experiment, there is no complex protective circuit. So please do not use more than 2 cells of AA batteries whose voltage must be 0~5V. Besides, do not use it to measure lithium battery or other power supply!

Hardware Required:
Arduino Board *1
USB Cable *1
1KΩ Resistor *1
Breadboard *1
Breadboard Jumper Wires

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample Code:

float temp;   // create a floating-point type variable temp as storage space for storing data 
 void setup()
 {  
 Serial.begin(9600);     // use 9600 baud rate to have serial communication 
} 
void loop() 
{    
 int V1 = analogRead(A0);                     
// Read the voltage data from A0 port and store it in the newly created integer variables V1; measurement range of voltage from analog port is 0 to 5V; return value of 0-1023.   
float vol = V1*(5.0 / 1024.0);                
// We convert V1 value into actual voltage value and store it into floating-point variable vol   
if (vol == temp)                             
 // The judgment here is used to filter repeated data; only voltage value that is differ than the last one will be output.   
{     
temp = vol; // After comparison is completed, store the value in variable temp  
 }   
else   
{ 
Serial.print(vol);   // Serial port outputs voltage value, in the same line       
Serial.println(" V"); // Serial port outputs character V, and begin a new line    
 temp = vol;     
delay(1000);  // Wait 1 second after the output is complete for controlling the data refresh rate.  
 } 
}

Result:
Click and open the serial port monitor; use the red line to measure battery positive pole, black line for negative pole. Serial monitor will refresh the voltage at 1 time/second. It is normal if there is fluctuation between two voltage values because it is, after all, a low accuracy test.


Project 18: Rotary Encoder


thumb
Introduction:
The rotary encoder can count the pulse outputting times during the process of its rotation in positive and reverse direction by rotating. This rotating counting is unlimited, not like potential counting. It can be restored to initial state to count from 0 with the button on rotary encoder.

Hardware Required:
Arduino Board *1
USB Cable *1
Rotary Encoder *1
Red M5 LED*2
220Ω Resistor *2
10KΩ resistor*2
Breadboard*1
Breadboard Jumper Wires

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample Code:

const int interruptA = 0;       
const int interruptB = 1;       
int CLK = 2;     // PIN2
int DAT = 3;     // PIN3
int BUTTON = 4;  // PIN4
int LED1 = 5;    // PIN5
int LED2 = 6;    // PIN6
int COUNT = 0;

void setup() 
 {
  attachInterrupt(interruptA, RoteStateChanged, FALLING);
 // attachInterrupt(interruptB, buttonState, FALLING);
  pinMode(CLK, INPUT); 
  digitalWrite(2, HIGH);  // Pull High Restance  
  pinMode(DAT, INPUT); 
  digitalWrite(3, HIGH);  // Pull High Restance 
  pinMode(BUTTON, INPUT); 
  digitalWrite(4, HIGH);  // Pull High Restance
  pinMode(LED1, OUTPUT); 
  pinMode(LED2, OUTPUT); 
   Serial.begin(9600);
 }

void loop() 
{
  if  (!(digitalRead(BUTTON))) 
    {
     COUNT = 0;  
     Serial.println("STOP COUNT = 0");
     digitalWrite(LED1, LOW);
     digitalWrite(LED2, LOW);
     delay (2000);
    }
     Serial.println(COUNT);  
}

//-------------------------------------------
void RoteStateChanged() //When CLK  FALLING READ DAT
{
 if  (digitalRead(DAT)) // When DAT = HIGH IS FORWARD
   {
    COUNT++;
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, LOW);
    delay(20);
   }
 else                   // When DAT = LOW IS BackRote
   {
    COUNT--;
    digitalWrite(LED2, HIGH);
    digitalWrite(LED1, LOW);
    delay(20);
   }
}

Result:
Rotate the encoder, you can control the on and off of the two LEDs.


Project 19: 5V Relay


thumb

Introduction:
Relay is an automatic switch element with isolation function. It's widely used in remote control, remote sensing, communication, automatic control, mechatronics and electronic devices. It is one of the most important control elements. In summary, it has below functions:
1)Expanding the control range: for example, when the control signal of the multicontact relay reaches a certain value, it can form different contact ways. At the same time switch on or off of multiple circuits.
2)Amplification: for example, sensitive relay and intermediate relay can control circuits of large power using a small amount of controlled quantity.
3)Synthetic signal: for example, when input more than one specific control signals to multiwound relay, achieve predetermined control effect after comparison and synthesis.
4)Automatic, remote control and monitoring: for example, combining relay on the automatic device to other electric equipment can realize automatic operation.

Matters needing attention:
a. rated working voltage: refers to the normal working voltage the relay coil needs,
b. Voltage control is the control circuit. It can be AC or DC voltage according to different models.
c. DC resistance: refers to the DC resistance of relay coil, multimeter.
d. Attract current: refers to the minimum current that the relay needs to generate suction action. During normal use, given current must be slightly larger than the operating current to guarantee stable operation of relay. Normally, the working voltage is 1.5 times of the coil’s. It cannot be more than the rated working voltage or coil will be burnt out due to high current.
e. Release current: Refers to the maximum current for the relay to gennerate release action. When the suction-state current reduces to a certain point, relay will return to its unenergized release state. The current here is far less than the suction current.
f. Contact switch voltage and current: refers to the load voltage and current the relay allows. This determines the magnitude of control voltage and current. Use current no high than these values or relay contact will be damaged.

Hardware Required:
Arduino Board *1
USB Cable *1
4N35 *1
5V Relay *1
4007 Diode*1
8050 Transistor *1
Red M5 LED*1
220Ω Resistor *2
Breadboard*1
Breadboard Jumper Wires

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb


Sample Code:

int relay = 3; // relay turn-on trigger signal - active high;
void setup ()
{
pinMode (relay, OUTPUT); //define port attribute for the output;
}
void loop ()
{
digitalWrite (relay, HIGH); // relay conducted;
delay (1000);
digitalWrite (relay, LOW); // relay switch;
delay (1000);
}

Result:
You can have different ways to do the conduction and disconnection process. This is one way for your reference. Here, when S is in high level, relay switches to the on end. LED will be turned on or you can switch to NC end. In the test result, you will see LED turning on and off in 1s interval.


Project 20: Triode Controlled Motor Drive


thumb
Introduction:
In this project, we use TIP122 Triode, which is an NPN Triode. Connect D3 to the triode B pole, when D3 is high level, the triode C pole and E pole are conducting, so the motor rotates.
thumb

Hardware Required:
Arduino Board *1
USB Cable *1
TIP122 Triode*1
9V Battery *1
1 KΩ Resistor *1
Fan Motor *1
Fan Leaf *1
Bread Board *1
Breadboard Jumper Wires

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample Code:

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 33 as an output.
  pinMode(3, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(3, HIGH);   // turn the motor on (HIGH is the voltage level)
  delay(2000);              // wait for 2 seconds
  digitalWrite(3, LOW);    // turn the motor off by making the voltage LOW
  delay(3000);              // wait for 3 second
}

Result:
Motor rotates for 2 seconds, and stops for 3 seconds, then cycles on.


Project 21: NE555 Timer


thumb
Introduction:
If you ask anyone in the know to rank the most commonly and widely applied integrated circuits, the famous 555 time base integrated circuit would certainly be at the top of the list. The 555 – a mixed circuit composed of analog and digital circuits – integrates analogue and logical functions into an independent integrated circuit, and hence tremendously expands the application range of analog integrated circuits. The 555 is widely used in various timers, pulse generators, and oscillators. In this experiment, we will use the Uno board to test the frequencies of square waves generated by the 555 oscillating circuit and show them on a serial monitor.

Hardware Required:
Arduino Board *1
USB Cable *1
NE555 *1
104 Ceramic Capacitor *2
Potentiometer*1
10KΩ Resistor*1
Breadboard*1
Breadboard Jumper Wires

Connection Diagram:
The 555 integrated circuit was originally used as a timer, hence the name 555 time base circuit. It is now widely used in various electronic products because of its reliability, convenience, and low price. The 555 is a complex hybrid circuit with dozens of components such as a divider, comparator, basic R-S trigger, discharge tube, and buffer.

555 chip pins are introduced as follows:

thumb
As shown in the picture, the 555 integrated circuit is dual in-line with the 8-pin package. Thus: Pin 1 (GND): the ground; Pin 2 (TRIGGER ): the input of lower comparator; Pin 3 (OUTPUT): having two states of 0 and 1 decided by the input electrical level; Pin 4 (RESET): output low level when supplied a low voltage level; Pin 5 (CONTROL VOLTAGE): changing the upper and lower level trigger values; Pin 6 (THRESHOLD): the input of upper comparator; Pin 7 (DISCHARGE): having two states of suspension and ground connection also decided by input, and the output of the internal discharge tube; Pin 8 (VCC): the power supply;

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb
Sample Code:

int pin = 7;  //attach to the third pin of NE555
unsigned long duration;  //the variable to store the length of the pulse 
 
void setup()
{
  pinMode(pin, INPUT);  //set the pin as an input
  Serial.begin(9600);  // start serial port at 9600 bps:
}
 
void loop()
{
  duration = pulseIn(pin, HIGH);  //Reads a pulse on pin
  Serial.print(duration);  //print the length of the pulse on the serial monitor
  Serial.println();  //print an blank on serial monitor
  delay(500);  //wait for 500 microseconds
}

Result:
Burn the program into Uno board
After burning the program, open the serial monitor and you will see the picture shown below. If you rotate the potentiometer, the length of the pulse (in microsecond) displayed will change accordingly.

thumb

thumb


Project 22: Counting Your Number


thumb

Introduction:
The shift register operates in a fairly simple way, but can be modified to become very complicated but very useful.
We can control the shift of the register with clock pulses. As we raise the signal going to the clock pin to high, the clock is moved forward one step, and when we pull it low and high again it shifts another. Each time we shift the clock we switch the input to a different one of the eight registers. We are essentially controlling the output of each of the eight pins one at a time, and as we move one clock signal forward, we switch to the next output pin to control.
The shift register can be a great tool when you are short on output pins, taking 8 outputs from only about 3 actual data inputs. It can be added to for some really complicated applications, and they can be daisy-chained together for even more output options.
In this project, we only use three I\O ports to control a, b, c, d, e, f, g and dp, therefor to control the segment display.

Hardware Required:
Arduino Board *1
USB Cable *1
74HC595 IC *1
1-digit 7-seg LED *1
220Ω Resistor *8
Breadboard*1
Breadboard Jumper Wires

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample Code:

int latchPin = 4;
int clockPin = 5;
int dataPin = 2; //define three pins
void setup ()
{
  pinMode(latchPin,OUTPUT);
  pinMode(clockPin,OUTPUT);
  pinMode(dataPin,OUTPUT); //three pins as output
}
void loop()
{

  int a[10]={
    252,96,218,242,102,182,190,224,254,246};   //define functional array
  for(int x=0; x<10 ;x++ )                        //calculate counting function
  {
    digitalWrite(latchPin,LOW);
    shiftOut(dataPin,clockPin,MSBFIRST,a[x]);     //display array a[x]
    digitalWrite(latchPin,HIGH);
    delay(1000);
  }
}

Result:
After connection and uploading codes, you can count the numbers on segment display from 0 to 9.


Project 23: Displaying Your “0”


thumb
Introduction:
We have introduced 74HC595 shift register last project. Now, we are going to learn 8*8 dot matrix. It consists of 64 LEDs, located in every crossing of each row and column. When a row is at level 1, and a column at level 0 simultaneously, LED lights up that is between high and low level. For instance, if you want to light up the first LED, connect pin 7 to high level, and pin A to low level; if you want to light up LEDs in first row, connect pin 7 to high level, and pin A, B, C, D, E, F, G, H to low level; if you want to light up LEDs in first column, connect pin A to high level, and pin 0, 1, 2, 3, 4, 5, 6, 7 to low level shown as below figure.

Schematic Diagram:

thumb

Appearance and Matrix Pin:

thumb thumb
8X8 LED matrix has too many pins that Arduino is difficult to interface. This kit shows how to use one interface chip 74HC595 IC to interface Arduino to drive 8X8 LED matrix. In this project, we will use the matrix to display “0”.

Hardware Required:
Arduino Board *1
USB Cable *1
74HC595 IC *2
LED Matrix*1 220Ω Resistor *8
Breadboard*1
Breadboard Jumper Wires

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample Code:

//define an array to store “0”
unsigned char Text[]={0x00,0x1c,0x22,0x22,0x22,0x22,0x22,0x1c};
void Draw_point(unsigned char x,unsigned char y)//draw-point function
{
   clear_();
   digitalWrite(x+2, HIGH);
   digitalWrite(y+10, LOW);
   delay(1);
}
void show_num(void)//show function and invoke draw-point function
{
  unsigned char i,j,data;
  for(i=0;i<8;i++)
  {
    data=Text[i];
    for(j=0;j<8;j++)
    {
      if(data & 0x01)Draw_point(j,i);
      data>>=1;
    }  
  }
}
void setup(){ 
int i = 0 ; 
for(i=2;i<18;i++) 
 { 
   pinMode(i, OUTPUT); 
  }  
  clear_(); 
}
void loop()
{ 
  show_num();    
} 
void clear_(void)//clear screen
{
  for(int i=2;i<10;i++)
  digitalWrite(i, LOW);
  for(int i=0;i<8;i++)
  digitalWrite(i+10, HIGH);
}

Result:
After connection and uploading codes, the matrix is displaying your “0”.


Project 24: Changing Numbers


thumb
Introduction:
This is a basic, 4-digit 7-segment display - white in color. It has a common cathode. It is necessary for it to interface resistors when controlled by Arduino, so every pin in anode end should be connected to a 220Ω resistor.
The display features one decimal point per digit. The hardware interface is twelve (two rows of six) through-hole pins, counting from 1 to 12 anticlockwise.

thumb
In this project, we make the display show changing numbers among 0000-9999.

Hardware Required:
Arduino Board *1
USB Cable *1
4-digit 7-seg LED *1
Button Module*1
Red M5 LED*1
220Ω Resistor *9
Breadboard *1
Breadboard Jumper Wires
Male to Female Dupont Lines

Connection :
Refer to below connection diagram for circuit connection

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample Code:

int a = 1;
int b = 2;
int c = 3;
int d = 4;
int e = 5;
int f = 6;
int g = 7;
int dp = 8;

int d4 = 9;
int d3 = 10;
int d2 = 11;
int d1 = 12;

// set variable
long n = 1230;
int x = 100;
int del = 55;    // fine adjustment for clock

void setup()
{
  pinMode(d1, OUTPUT);
  pinMode(d2, OUTPUT);
  pinMode(d3, OUTPUT);
  pinMode(d4, OUTPUT);
  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);
  pinMode(dp, OUTPUT);
}
/////////////////////////////////////////////////////////////
void loop()
{
  int a=0;
  int b=0;
  int c=0;
  int d=0;
  unsigned long currentMillis = millis();

  while(d>=0)
  {
    while(millis()-currentMillis<1000)
     {
      Display(1,a);
      Display(2,b);
      Display(3,c);
      Display(4,d);
     }
    currentMillis = millis(); 
    d++;  
  if (d>9) 
  {
   c++;
   d=0;
  }
    if (c>9) 
  {
   b++;
   c=0;
  }
    if (b>9) 
  {
   a++;
   b=0;
  }
    if (a>9) 
  {
   a=0;
   b=0;
   c=0;
   d=0;
  }
  }  
}
///////////////////////////////////////////////////////////////
void WeiXuan(unsigned char n)//
{
  switch (n)
  {
    case 1:
      digitalWrite(d1, LOW);
      digitalWrite(d2, HIGH);
      digitalWrite(d3, HIGH);
      digitalWrite(d4, HIGH);
      break;
    case 2:
      digitalWrite(d1, HIGH);
      digitalWrite(d2, LOW);
      digitalWrite(d3, HIGH);
      digitalWrite(d4, HIGH);
      break;
    case 3:
      digitalWrite(d1, HIGH);
      digitalWrite(d2, HIGH);
      digitalWrite(d3, LOW);
      digitalWrite(d4, HIGH);
      break;
    case 4:
      digitalWrite(d1, HIGH);
      digitalWrite(d2, HIGH);
      digitalWrite(d3, HIGH);
      digitalWrite(d4, LOW);
      break;
    default :
      digitalWrite(d1, HIGH);
      digitalWrite(d2, HIGH);
      digitalWrite(d3, HIGH);
      digitalWrite(d4, HIGH);
      break;
  }
}
void Num_0()
{
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, LOW);
  digitalWrite(dp, LOW);
}
void Num_1()
{
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
  digitalWrite(dp, LOW);
}
void Num_2()
{
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);
  digitalWrite(dp, LOW);
}
void Num_3()
{
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);
  digitalWrite(dp, LOW);
}
void Num_4()
{
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(dp, LOW);
}
void Num_5()
{
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(dp, LOW);
}
void Num_6()
{
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(dp, LOW);
}
void Num_7()
{
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
  digitalWrite(dp, LOW);
}
void Num_8()
{
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(dp, LOW);
}
void Num_9()
{
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(dp, LOW);
}
void Clear()    // clear the screen
{
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
  digitalWrite(dp, LOW);
}
void pickNumber(unsigned char n)// select number
{
  switch (n)
  {
    case 0: Num_0();

      break;
    case 1: Num_1();
      break;
    case 2: Num_2();
      break;
    case 3: Num_3();
      break;
    case 4: Num_4();
      break;
    case 5: Num_5();
      break;
    case 6: Num_6();
      break;
    case 7: Num_7();
      break;
    case 8: Num_8();
      break;
    case 9: Num_9();
      break;
    default: Clear();
      break;
  }
}
void Display(unsigned char x, unsigned char Number)//    take x as coordinate and display number
{
  WeiXuan(x);
  pickNumber(Number);
  delay(1);
  Clear() ; // clear the screen
}

Result:
After connection and uploading code, we make the display show changing numbers among 0000-9999.


Project 25: DHT11 Temperature and Humidity Sensor


thumb
Introduction:
This DHT11 Temperature and Humidity Sensor features calibrated digital signal output with the temperature and humidity sensor complex. Its technology ensures high reliability and excellent long-term stability. A high-performance 8-bit microcontroller is connected. This sensor includes a resistive element and a sense of wet NTC temperature measuring devices. It has excellent quality, fast response, anti-interference ability and high cost performance advantages. Each DHT11 sensor features extremely accurate calibration data of humidity calibration chamber. The calibration coefficients stored in the OTP program memory, internal sensors detect signals in the process, and we should call these calibration coefficients. The single-wire serial interface system is integrated to make it quick and easy. Qualities of small size, low power, and 20-meter signal transmission distance make it a wide applied application and even the most demanding one. Convenient connection, special packages can be provided according to users need.

Hardware Required :
Arduino Board *1
USB Cable *1
DHT11 Temperature and Humidity *1
10KΩ Resistor*1
Breadboard *1
Breadboard Jumper Wires

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample Code:

Please download the DHT11Lib firstly. Or see the website

#include <dht11.h>
dht11 DHT;
#define DHT11_PIN 4
  
void setup(){
  Serial.begin(9600);
  Serial.println("DHT TEST PROGRAM ");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT11LIB_VERSION);
  Serial.println();
  Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
}
  
void loop(){
  int chk;
  Serial.print("DHT11, \t");
  chk = DHT.read(DHT11_PIN);    // READ DATA
  switch (chk){
    case DHTLIB_OK:  
                Serial.print("OK,\t"); 
                break;
    case DHTLIB_ERROR_CHECKSUM: 
                Serial.print("Checksum error,\t"); 
                break;
    case DHTLIB_ERROR_TIMEOUT: 
                Serial.print("Time out error,\t"); 
                break;
    default: 
                Serial.print("Unknown error,\t"); 
                break;
  }
 // DISPLAT DATA
  Serial.print(DHT.humidity,1);
  Serial.print(",\t");
  Serial.println(DHT.temperature,1);
  
  delay(1000);
}

Result:

thumb


Project 26: Driving Your Servo Motor


thumb
Introduction:
A servo motor allows for precise control of servo position. It consists of a suitable motor coupled to a sensor for position feedback. It also requires a relatively sophisticated controller, an enclosure, a PCB and gears. There are two ways for Arduino to control the engine. This time, we directly use servo function that comes with Arduino to control the engine.

Hardware required:
Arduino Board *1
USB Cable *1
Potentiometer*1
9G Servo Motor*1
Breadboard *1
Breadboard Jumper Wires
Male to Female Dupont Line

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb


Sample Code :

#include <Servo.h>
Servo myservo;//define steering engine variable
int servo =0;
void setup()
{
 Serial.begin(9600); // 9600 bps
 myservo.attach(9);//define steering engine interface(alternative 9 and 10 but just able to control 2interfaces)
}
void loop()
{
servo=map ( analogRead(0) , 0 , 1023 , 0 , 180 )  ;
Serial.println(servo ,DEC);
myservo.write(servo);//set rotating angle
delay(50);
}

Result:
After connection and uploading codes, rotate potentiometer knob to adjust the engine’s rotating angle;open serial monitor, and we can see the value of rotating angle.


Project 27: Choosing Your Favorite Color


thumb
Introduction:
RGB LED products contain red, blue and green LED's. We like diffused RGB LEDs because their color mix inside instead of appearing as 3 distinct LEDs. Brightness of each color changes with driving voltage . In this project, we will map analog value of joystick module at X, Y axis and potentiometer into PWM value to control LED voltage, therefor, RGB LED displaying different color.

Hardware Required:
Arduino Board *1
USB Cable *1
LED - RGB *1
220Ω Resistor *3
Potentiometer*1
Joystick Module*1
Breadboard *1
Breadboard Jumper Wires
Male to Female Dupont Lines

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample Code :

int redpin = 11; //select the pin for the red LED
int greenpin =10;// select the pin for the green LED
int bluepin =9; // select the pin for the blue LED
int value1;
int value2;
int value3;

void setup() {
  pinMode(redpin, OUTPUT);
  pinMode(bluepin, OUTPUT);
  pinMode(greenpin, OUTPUT);
  Serial.begin(9600);
}

void loop() 
{
value1=map( analogRead(0),0,1023,0,255);
value2=map( analogRead(1),0,1023,0,255);
value3=map( analogRead(2),0,1023,0,255);
analogWrite(11, value1);
Serial.print("value1= ");
Serial.println(value1);
delay(100); 
analogWrite(10, value2);
Serial.print("value2= ");
Serial.println(value2);
delay(100); 
analogWrite(9, value3);
Serial.print("value3= ");
Serial.println(value3);
delay(100); 
}

Result :
After connection and uploading codes, open serial monitor, rotate the potentiometer, rock the joystick; then, the color of RGB LED changes with value1, value2, value3.


Project 28: IR Remote Control


thumb

Introduction:
What is an infrared receiver?
The signal from the infrared remote controller is a series of binary pulse code. To avoid interference from other infrared signals during the wireless transmission, the signal is pre-modulate at a specific carrier frequency and then send out by a infrared emission diode. The infrared receiving device needs to filter out other wave and receive signal at that specific frequency and modulate it back to binary pulse code, known as demodulation.

Working Principal:
The built-in receiver converts the light signal it received from the sender into feeble electrical signal. The signal will be amplified by the IC amplifier. After automatic gain control, band-pass filtering, demodulation, wave shaping, it returns to the original code. The code is then input to the code identification circuit by the receiver's signal output pin. The pin and the connection of the infrared receiving head Pin and wiring of infrared receiver
thumb
Infrared receiver has 3 pins.
When you use it, connect VOUT to analog pin, GND to GND, VCC to +5V.
2. Infrared remote control experiment

Hardware Required:
Arduino Board *1
USB Cable *1
Remote Control*1
IR Receiver*1
Red M5 LED*2
Yellow M5 LED*2
Green M5 LED*2
220Ω Resistor *6 Breadboard *1
Breadboard Jumper Wires

Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Connect the motor to digital pin 9. Compile a program to control the motor to rotate to the commanded angle input by the user and display the angle on the screen.

Experimental Principle:
If you want to decode code of a remote controller, you must first know how it's coded. The coding method we use here is NEC protocol. Below is a brief introduction.
•NEC protocol:
Features:
(1) 8 bit address and 8 bit command length
(2) address and command are transmitted twice for reliability
(3) pulse distance modulation
(4) carrier frequency of 38 KHZ
(5) bit time of 1.125ms or 2.25ms
Protocol is as below:
• Definition of logical 0 and 1 is as below

thumb
• Pulse transmitted when button is pressed and immediately released


thumb
The picture above shows a typical pulse train of the NEC protocol. With this protocol the LSB is transmitted first. In this case Address $59 and Command $16 is transmitted. A message is started by a 9ms AGC burst, which was used to set the gain of the earlier IR receivers. This AGC burst is then followed by a 4.5ms space, which is then followed by the address and command. Address and Command are transmitted twice. The second time all bits are inverted and can be used for verification of the received message. The total transmission time is constant because every bit is repeated with its inverted length. If you are not interested in this reliability, you can ignore the inverted values, or you can expend the Address and Command to 16 bits each!
• Pulse transmitted when button is pressed and released after a period of time

thumb

A command is transmitted only once, even when the key on the remote control remains pressed. Every 110ms a repeat code is transmitted for as long as the key remains down. This repeat code is simply a 9ms AGC pulse followed by a 2.25ms space and a 560µs burst.
•Repeat pulse

thumb
Note: when the pulse enters the integrated receiver, there will be decoding, signal amplifying and wave shaping process. So you need to make sure the level of the output is just the opposite from that of the signal sending end. That is when there is no infrared signal, the output end is in high level; when there is infrared signal, the output end is in low level. You can see the pulse of the receiving end in the oscilloscope. Try to better understand the program base on what you see.

Sample Code:

#include <IRremote.h>
int RECV_PIN = 11;
int LED1 = 2;
int LED2 = 3;
int LED3 = 4;
int LED4 = 5;
int LED5 = 6;
int LED6 = 7;
long on1  = 0x00FF6897;
long off1 = 0x00FF9867;
long on2 = 0x00FFB04F;
long off2 = 0x00FF30CF;
long on3 = 0x00FF18E7;
long off3 = 0x00FF7A85;
long on4 = 0x00FF10EF;
long off4 = 0x00FF38C7;
long on5 = 0x00FF5AA5;
long off5 = 0x00FF42BD;
long on6 = 0x00FF4AB5;
long off6 = 0x00FF52AD;
IRrecv irrecv(RECV_PIN);
decode_results results;
// Dumps out the decode_results structure.
// Call this after IRrecv::decode()
// void * to work around compiler issue
//void dump(void *v) {
//  decode_results *results = (decode_results *)v
void dump(decode_results *results) {
  int count = results->rawlen;
  if (results->decode_type == UNKNOWN) 
    {
     Serial.println("Could not decode message");
    } 
  else 
   {
    if (results->decode_type == NEC) 
      {
       Serial.print("Decoded NEC: ");
      } 
    else if (results->decode_type == SONY) 
      {
       Serial.print("Decoded SONY: ");
      } 
    else if (results->decode_type == RC5) 
      {
       Serial.print("Decoded RC5: ");
      } 
    else if (results->decode_type == RC6) 
      {
       Serial.print("Decoded RC6: ");
      }
     Serial.print(results->value, HEX);
     Serial.print(" (");
     Serial.print(results->bits, DEC);
     Serial.println(" bits)");
   }
     Serial.print("Raw (");
     Serial.print(count, DEC);
     Serial.print("): ");
 for (int i = 0; i < count; i++) 
     {
      if ((i % 2) == 1) {
      Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
     } 
    else  
     {
      Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
     }
    Serial.print(" ");
     }
      Serial.println("");
     }
void setup()
 {
  pinMode(RECV_PIN, INPUT);   
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  pinMode(LED5, OUTPUT);
  pinMode(LED6, OUTPUT);  
  pinMode(13, OUTPUT);
  Serial.begin(9600);
   irrecv.enableIRIn(); // Start the receiver
 }
int on = 0;
unsigned long last = millis();

void loop() 
{
  if (irrecv.decode(&results)) 
   {
    // If it's been at least 1/4 second since the last
    // IR received, toggle the relay
    if (millis() - last > 250) 
      {
       on = !on;
//       digitalWrite(8, on ? HIGH : LOW);
       digitalWrite(13, on ? HIGH : LOW);
       dump(&results);
      }
    if (results.value == on1 )
       digitalWrite(LED1, HIGH);
    if (results.value == off1 )
       digitalWrite(LED1, LOW); 
    if (results.value == on2 )
       digitalWrite(LED2, HIGH);
    if (results.value == off2 )
       digitalWrite(LED2, LOW); 
    if (results.value == on3 )
       digitalWrite(LED3, HIGH);
    if (results.value == off3 )
       digitalWrite(LED3, LOW);
    if (results.value == on4 )
       digitalWrite(LED4, HIGH);
    if (results.value == off4 )
       digitalWrite(LED4, LOW); 
    if (results.value == on5 )
       digitalWrite(LED5, HIGH);
    if (results.value == off5 )
       digitalWrite(LED5, LOW); 
    if (results.value == on6 )
       digitalWrite(LED6, HIGH);
    if (results.value == off6 )
       digitalWrite(LED6, LOW);        
    last = millis();      
irrecv.resume(); // Receive the next value
  }
}

Program function
Decode the coded pulse signal emitted by the remote controller; execute corresponding action according to the results of the decoding. In this way, you will be able to control your device with remote controller.

Result:

thumb
Above are the two methods to control the servo. You can choose either one according to your liking or actual need. 
Note:add IRremote folder into installation directory \Arduino\compiler libraries, or you will not be able to compile.
Infrared remote library: https://github.com/shirriff/Arduino-IRremote


Project 29: 4*4 Button Module


thumb
Introduction:
In the application system of microcontroller, keyboard is essential in man-machine dialogue. When you are short of a button, you can connect one to the I/O port of the comtroller; but when you need a lot of buttons with limited I/O port resources, this 4*4 Matrix Keypad is no doubt your best choice.
4*4 matrix keypad is the most applied keypad form. We need to master its keypad identification technology as entry to microcontroller world. Here, we will use an examples to illustrate the identification method of 4*4 matrix keypad. The key layout is in matrix form, so with only eight I/O ports, we can identify 16 buttons, saving lots of I/O port resources.

Pin layout for 4*4 Large Button module:
thumb

Hardware required:
Arduino board *1
USB cable *1
4*4 Button Module*1
Active buzzer*1
Red M5 LED*1
220Ω resistor*1
Breadboard *1
Breadboard jumper wires
Male to Female Dupont Line

Connection :
Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample program :

#include <Keypad.h>
int led = 10;
int buzzer = 11;
const byte ROWS = 4; // define row 4
const byte COLS = 4; // define column 4
char keys[ROWS][COLS] = {
  {'4','8','C','G'},
  {'3','7','B','F'},
  {'2','6','A','E'},
  {'1','5','9','D'}
};
// connect row ports of the button to corresponding IO ports on the board
byte rowPins[ROWS] = {9,8,7,6};	
// connect column ports of the button to corresponding IO ports on the board
byte colPins[COLS] = {5,4,3,2};
// call class library performance function of Keypad 
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
Serial.begin(9600);
pinMode(led, OUTPUT);
pinMode(buzzer, OUTPUT);
}

void loop(){
digitalWrite(led, LOW); 
digitalWrite(buzzer, LOW); 
char key = keypad.getKey();
if (key != NO_KEY){
Serial.println(key);
}
if (key =='1')
{
digitalWrite(led, HIGH); 
delay(1000);
}

if (key =='2')
{
digitalWrite(buzzer, HIGH); 
delay(1000);
}
}

Result :
Upload the program to the board, open serial monitor; press certain button on the module, it will display corresponding value as below picture shows:
thumb
When serial monitor prints 1, LED lights up; when it printing 2, the buzzer rings 1S.


Project 30: I2C 1602 LCD


thumb
Introduction:
keyestudio 1602 I2C module is a 16 character by 2 line LCD display with Blue background and White backlight. The original 1602 LCD needs 7 IO ports to be up and running, ours is built with Arduino IIC/I2C interface, saving you 5 IO ports. This LCD is ready-to-use because it is compatible with the Arduino Liquid Crystal Library.

Hardware required:
Arduino Board *1 USB Cable *1 I2C 1602 LCD *1 Breadboard *1 Male to Female Dupont Lines

Connection :
Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample program :

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
void setup()
{
lcd.init(); // initialize the lcd
lcd.init();
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(3,0);
lcd.print("Hello, world!");
lcd.setCursor(2,1);
lcd.print("keyestudio!");
}
void loop()
{
}

Result :
After connection and uploading sample code, the first line on LCD prints "Hello, world!", second line prints "keyestudio!", with a potentiometer to adjust LCD backlight.


Project 31: DS1302 Real Time Clock Module


thumb
Introduction:
Real-Time Clock produced by Maxim counts seconds, minutes, hours, date of the month, month, day of the week, and year with leap-year compensation valid up to 2100. It includes battery backup to charge. This project will show you how to interface the module to Arduino using just three wires and a 1602 I2C module to display time.

thumb

Hardware required:
Arduino Board *1
USB Cable *1
DS1302 Module*1
Crystal Oscillator *1
I2C 1602 LCD *1
Breadboard *1
Breadboard Jumper Wires
Male to Female Dupont Lines

Connection :
Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample program :

#include <stdio.h>
#include <string.h>
#include <DS1302.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
/* Set the appropriate digital I/O pin connections */
uint8_t CE_PIN   = 5;    // RST
uint8_t IO_PIN   = 6;   // DAT 
uint8_t SCLK_PIN = 7;  // CLK 

/* Create buffers */
char buf[50];
char bf[50];
char bu[50];
char uf[50];
char day[10];

/* Create a DS1302 object */
DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);


void print_time()
{
  /* Get the current time and date from the chip */
  Time t = rtc.time();

  /* Name the day of the week */
  memset(day, 0, sizeof(day));  /* clear day buffer */
  switch (t.day) {
    case 1:
      strcpy(day, "Sunday   ");
      break;
    case 2:
      strcpy(day, "Monday   ");
      break;
    case 3:
      strcpy(day, "Tuesday  ");
      break;
    case 4:
      strcpy(day, "Wednesday");
      break;
    case 5:
      strcpy(day, "Thursday ");
      break;
    case 6:
      strcpy(day, "Friday   ");
      break;
    case 7:
      strcpy(day, "Saturday ");
      break;
  }

  snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d",
           day,
           t.yr, t.mon, t.date,
           t.hr, t.min, t.sec);
           Serial.println(buf);
  snprintf(bf, sizeof(bf), "%s  %04d",
          day, t.yr);
  lcd.setCursor(0,0);
  lcd.print(bf);
  snprintf(bu, sizeof(bu),"%02d:%02d:%02d",
           t.hr, t.min, t.sec);
  /* Print the formatted string to serial so we can see the time */
  lcd.setCursor(0,1);
  lcd.print(bu);
  snprintf(uf, sizeof(uf), "%02d-%02d",
         t.mon, t.date);
  lcd.setCursor(11,1);
  lcd.print(uf);
}
void setup()
{
  lcd.init();                      // initialize the lcd 
  // Print a message to the LCD.
  lcd.init();
  lcd.backlight();
  Serial.begin(9600);

 
  rtc.write_protect(false);
  rtc.halt(false);

  Time t(2016,10,12,12,11,22,4);
  rtc.time(t);
}

void loop()
{
  print_time();
  delay(1000);
}

Result :
After connection and uploading codes, current time and date are showed on LCD.


Project 32: Making Your Body An Alarm Clock


thumb

Introduction:
PIR motion sensors are used to detect motion from pets/humanoids. In this project, we will create an alarm system to detect motion, combining usage of PIR, I2C 1602 LCD and LED.

Hardware required:
Arduino Board *1
USB Cable *1
I2C 1602 LCD *1
PIR Motion Sensor*1
Red M5 LED*1
220Ω Resistor *1
Breadboard *1
Breadboard Jumper Wires
Male to Female Dupont Line

Connection :
Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample program :

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
byte sensorPin = 6;
byte indicator = 10;
void setup()
{
  lcd.init();                      // initialize the lcd 
  lcd.init();
  // Print a message to the LCD.
  lcd.backlight();
  pinMode(sensorPin,INPUT);
  pinMode(indicator,OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  byte state = digitalRead(sensorPin);
  digitalWrite(indicator,state);
  if(state == 1)
  {
  lcd.setCursor(2,0);
  lcd.print("Somebody is");
  lcd.setCursor(2,1);
  lcd.print("in this area!");
  }
  else if(state == 0)
  {
  lcd.setCursor(2,0);
  lcd.print("No one!      ");
  lcd.setCursor(2,1);
  lcd.print("No one!      ");
  delay(500);
  }
}

Result:
After connection and uploading codes, if the LCD shows”Somebody is in this area!” and LED lights up, it is reminding of you that somebody is here. Then , if there is no one, it will tell you by displaying “No one!”on LCD and LED off.


Project 33: Getting Your Distance with Ultrasonic


thumb
Introduction:
Ultrasonic wave can be transmitted far away since the wave has a strong directional sense and slow low power consumption. For that reason, ultrasonic sensor is always used to detect distance, like diastimeter. This economical sensor provides 2cm to 450cm of non-contact measurement functionality with a ranging accuracy that can reach up to 3mm. Next, we will learn how to use LCD to get a result of measuring distance.

Hardware required:
Arduino Board *1
USB Cable *1
I2C 1602 LCD *1
Ultrasonic Sensor*1
Breadboard *1
Breadboard Jumper Wires
Male to Female Dupont Lines

Connection :
Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample program :

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
#define echoPin 7 // Echo Pin
#define trigPin 8 // Trigger Pin
#define LEDPin 13 // Onboard LED

int maximumRange = 200; // Maximum range needed
int minimumRange = 0; // Minimum range needed
long duration, distance; // Duration used to calculate distance

void setup() {
  lcd.init();                      // initialize the lcd 
  lcd.init();
  // Print a message to the LCD.
  lcd.backlight();
  lcd.setCursor(3,0);
  lcd.print("Distance is:  ");
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);
 pinMode(LEDPin, OUTPUT); // Use LED indicator (if required)
}

void loop() {
/* The following trigPin/echoPin cycle is used to determine the
 distance of the nearest object by bouncing soundwaves off of it. */ 
 digitalWrite(trigPin, LOW); 
 delayMicroseconds(2); 

 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10); 
 digitalWrite(trigPin, LOW);

 duration = pulseIn(echoPin, HIGH);
 
 //Calculate the distance (in cm) based on the speed of sound.
 distance = duration/58.2;
 
 if (distance >= maximumRange || distance <= minimumRange){
 /* Send a negative number to computer and Turn LED ON 
 to indicate "out of range" */
  lcd.setCursor(3,1);
  lcd.print("-1   ");
 digitalWrite(LEDPin, HIGH); 
 }
 else {
 /* turn LED OFF to indicate successful reading. */
  lcd.setCursor(3,1);
  lcd.print(distance);
 digitalWrite(LEDPin, LOW); 
 }
 if(distance<10)
 {
  lcd.setCursor(4,1);
  lcd.print("    ");
}
 if(distance<100)
 {
  lcd.setCursor(5,1);
  lcd.print("    ");
}
 //Delay 50ms before next reading.
 delay(50);
} 


Result :
After connection and uploading code, you can see the distance between sensor and block is displayed on 1602 LCD.


Project 34: TEMT6000 Ambient Light Sensor


thumb
Introduction:
TEMT6000 is an audion photoconductive sensor. Its illumination intensity is proportional to current of base electrode. It is very easy to use. Just connect the base electrode to input of analog voltage. You can know current intensity by detecting the voltage value.

Hardware required:
Arduino Board *1
USB Cable*1
I2C 1602 LCD *1
TEMT6000 Sensor*1
Breadboard *1
Breadboard Jumper Wires
Male to Female Dupont Lines

Connection :
Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample program :

#include <Wire.h> 
    #include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
     lcd.init();                      // initialize the lcd 
     lcd.init();
     // Print a message to the LCD.
     lcd.backlight();
     lcd.setCursor(1,0);
     lcd.print("SensorValue :  ");
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // print out the value you read:
      lcd.setCursor(3,1);
      lcd.print(sensorValue);
  delay(1);        // delay in between reads for stability
}

Result :
After connection and uploading sample code, we can see analog value which means current illumination intensity on LCD with power-on.


Project 35: Steam Sensor


thumb
Introduction:
When there is drop or steam adhered to sensing point of water or steam sensor, MCU will get a feedback of analog signal from S signal pin of the sensor. You can read out the value from MCU to deduce whether it rains..

Hardware required:
Arduino Board *1
USB Cable*1
I2C 1602 LCD *1
Steam Sensor*1
Breadboard *1
Breadboard Jumper Wires
Male to Female Dupont Lines

Connection :
Connection for UNO R3:
thumb

Connection for 2560 R3:
thumb

Sample program :

#include <Wire.h> 
    #include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
    lcd.init();                      // initialize the lcd 
    lcd.init();
    // Print a message to the LCD.
    lcd.backlight();
    lcd.setCursor(1,0);
    lcd.print("SensorValue :  ");
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // print out the value you read:
      lcd.setCursor(3,1);
      lcd.print(sensorValue);
  delay(1);        // delay in between reads for stability
}

Result :
After connection and uploading sample code, we can see analog value which means current vapor content on LCD with power-on.


Resources

Video

http://www.keyestudio.com/wp/ks0080-81-82-maker-learning-kit/

PDF

https://drive.google.com/open?id=1av0vdPeH7dHtTaDWPiMcWM2OM2XZA3eM

Libraries Download:

https://drive.google.com/open?id=1lSccymfa3jDN50JYcLcp_KgzLleDWu5k

Buy from

Official Website

No Board http://www.keyestudio.com/keyestudio-maker-learning-kit-no-board.html

With UNO http://www.keyestudio.com/keyestudio-maker-learning-kit-with-uno-r3.html

With 2560 R3 http://www.keyestudio.com/keyestudio-maker-learning-kit-with-mega2560-r3.html