KS0507 Keyestudio Smart RV Kit: Difference between revisions

From Keyestudio Wiki
Jump to navigation Jump to search
Line 1,002: Line 1,002:
</pre>
</pre>
=== Project 9: Adjustable Rotary Potentiomete ===
=== Project 9: Adjustable Rotary Potentiomete ===
(1)Description:
<br>[[File:0507--F.png|500px|frameless|thumb]]<br>
<br>[[File:0507--F.png|500px|frameless|thumb]]<br>
There is a rotary potentiometer module which uses a 10K adjustable resistor in this kit. By rotating the potentiometer, we can change the value of the resistor and then build the circuit to convert the resistance change into the voltage change. In addition, its voltage can be divided into 1025 parts and can be easily connected to 2560 control board.<br>
There is a rotary potentiometer module which uses a 10K adjustable resistor in this kit. By rotating the potentiometer, we can change the value of the resistor and then build the circuit to convert the resistance change into the voltage change. In addition, its voltage can be divided into 1025 parts and can be easily connected to 2560 control board.<br>
In this chapter, we will adjust LED brightness by potentiometer.<br>
In this chapter, we will adjust LED brightness by potentiometer.<br>
(2)Specification:
* Operating voltage: 3.3V to 5V
* Interface: analog interface
(3)Component:
<br>[[File:0507--.png|500px|frameless|thumb]]<br>
(4)Connection Diagram:<br>
<br>[[File:0507--G.png|500px|frameless|thumb]]<br>

Revision as of 17:09, 11 March 2021


thumb

About keyestudio

Keyestudio is a best-selling brand owned by KEYES Corporation. Our product lines range from controller boards, shields and sensor modules to smart car and complete starter kits for Arduino, Raspberry Pi and BBC micro:bit, which can help customers at any level learn electronics and programming knowledge. Likewise, all of our products comply with international quality standards and are greatly appreciated in a variety of different markets throughout the world.
You can obtain the details and the latest information through visiting the following web sites:http://www.keyestudio.com


References and After-sales Service

1.Download Profile:https://fs.keyestudio.com/KS0507
2.Feel free to contact us please, if there is missing part or you encounter some troubles. Welcome to send email to us:service@keyestudio.com. We will update projects and products continuously from your sincere advice.


Warning

1.This product contains tiny parts(screws, copper pillars), keep it out of reach of children under 7 years old please.
2.This product contains conductive parts (control board and electronic module). Please operate according to the requirements of tutorial. Improper operation may cause parts to overheat damage. Do not touch and immediately disconnect the circuit power.

Copyright

The keyestudio trademark and logo are the copyright of KEYES DIY ROBOT co.,LTD. All products under Keyestudio brand can’t be copied, sold and resold without authorization by anyone or company. If you’re interested in our items, please contact to our sales representatives: fennie@keyestudio.com


Description:

When it comes to programming, many think it difficult. However, KEYES group issues a smart RV kit to cope with this problem.
This is low cost, easy-to-build and open source programming kit-----smart RV.
It integrates smart home and robot car. In addition, it helps you absorb the knowledge of programming like electronics, control logic and computing and science.
In compliance with the tutorial, you can create your own robot by boards, slot connection and wiring. In the assembly process, the detailed projects will guide you to learn the working principle of sensors and modules.
What’s more, it a has temperature humidity sensor and an LCD display except LED, line tracking sensor, ultrasonic sensor, Bluetooth module and motor driving modules.
Should you are interested in STEM and code programming, you can customize your RV by altering code and adding extra modules. That sounds entertaining, right? Let’s get started1

Features

  • Multi-purpose function:obstacle avoidance, line tracking, Bluetooth control, ultrasonic follow, smart sensation and so on.
  • Easy to build:Slot connection and without soldering circuit
  • Novel style:Adopt strong wood board, acrylic board, RGB and lcd1602 modules.
  • High extension:configure motor driving chip, preserve IIC, UART and SPI port and expand other sensor and module.
  • Basic programming learning:use C language and code

Specification:

  • Working voltage: 5v
  • Input voltage: 7-12V
  • Maximum output current: 3A
  • Maximum power dissipation: 15W
  • Motor speed: 200 rpm (4.5V)
  • Motor driving form: TB6612 chip drive
  • Ultrasonic sensing angle: <15 degrees
  • Ultrasonic detection distance: 2cm-400cm
  • Bluetooth remote control distance: 50 meters (measured)
  • Bluetooth APP control: support Android and iOS system


Kit

Remember to check if the components received are in line with the following product list when you getting this kit.


thumb

thumb

thumb

thumb

thumb

thumb

thumb

thumb

thumb


Getting Started with Arduino

Installing Arduino IDE

When we get control board, we need to download Arduino IDE and driver firstly. You could download Arduino IDE from the official website:
https://www.arduino.cc/, click the SOFTWARE on the browse bar, click“DOWNLOADS” to enter download page, as shown below:


thumb

You can download either Windows win7 and newer or Windows ZIP file.
The first one doesn’t require

There are two versions of IDE for WINDOWS system, you can choose from the Installer (.exe) and the Zip packages. We suggest you use the first one that installs directly everything you need to use the Arduino Software (IDE), including the drivers.
With the Zip package you need to install the drivers manually. The Zip file is also useful if you want to create a portable installation.


thumb

thumb

You just need to click JUST DOWNLOAD.

Keyestudio MEGA 2560 Smart Development Board

We need to know keyestudio MEGA 2560 development board, as a core of this smart car.


thumb

The processor core of MEGA 2560 board is ATMEGA2560-16AU, with the cp2102 chip.
It has 54 digital input/output pins (of which 15 can be used as PWM outputs), 16 analog inputs, 4 UARTs (hardware serial ports), a 16 MHz crystal oscillator, a USB connection, a power jack, 1 ICSP header, and a reset button.
It can be interfaced computer with external power with a USB cable.


thumb

thumb

Install Driver on Windows System

Let’s install the driver of keyestudio MEGA 2560 smart development board. The USB-TTL chip on this board adopts CP2102 serial chip. The driver program of this chip is included in Arduino 1.8 version and above, which is convenient. Plugged in USB port, the computer can recognize the hardware and automatically install the driver of CP2102.

If install unsuccessfully, or you intend to install manually, open the device manager of computer. Right click Computer----- Properties----- Device Manager.


thumb

There is a yellow exclamation mark on the page, which implies installing unsuccessfully. Then we double click the hardware and update the driver.


thumb

Click “OK” to enter the following page, click“browse my computer for updated driver software”, find out the installed or downloaded ARDUINO software. As shown below:


thumb

There is a DRIVERS folder in Arduino software installed package. Just open driver folder and you can see the driver of CP210X series chips.


We click “Browse”, then find out the driver folder, or you could enter “driver” to search in rectangular box, then click“next”, the driver will be installed successfully. (I place Arduino software folder on the desktop, you can follow my way)


thumb

thumb

Open device manager, we will find the yellow exclamation mark disappear. The driver of CP2102 is installed successfully.


thumb

Install Driver on MAC System

The USB to serial chip of control board is CP2102. We install driver on MAC as follows: https://wiki.keyestudio.com/How_to_Install_the_Driver_of_CP2102_on_MAC_System


Arduino IDE Setting

Click0486-12.png icon,open Arduino IDE.


0507--25.png


To avoid the errors when uploading the program to the board, you need to select the correct Arduino board that matches the board connected to your computer. Then come back to the Arduino software, you should click Tools→Board, select the board. (as shown below)


0507--26.png


Then select the correct COM port (you can see the corresponding COM port after the driver is successfully installed)


0507-22.png

0507--28.png

Before uploading the program to the board, let’s demonstrate the function of each symbol in the Arduino IDE toolbar.


0507--29.png


  • A- Used to verify whether there is any compiling mistakes or not.
  • B- Used to upload the sketch to your Arduino board.
  • C- Used to create shortcut window of a new sketch.
  • D- Used to directly open an example sketch.
  • E- Used to save the sketch.
  • F- Used to send the serial data received from board to the serial monitor.


Note: the setting method on Mac system is same as on Windows system except different COM port, as shown below:


0497=图片8.png

Start First Program

We’ve known how to download and install the driver of development board , next, we will burn a code to show“Hello World!”in the monitor.

Test Code


void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);   
}

void loop() {
  // print out "Hello world!"
  Serial.println("Hello world!");
  delay(1000);// delay 1 second
}


Open Arduino IDE, and set board as follows:


0507--31.png


Set COM port, as shown below:


0507--32.png

Click 0486-20.png to start compiling the program, and check errors.
Click 0486-23.png to upload the program, upload successfully.


0507--33.png

Upload the program successfully, open serial monitor and set baud rate to 9600. Monitor will print“Hello World!”each 1s.
Congratulation, you finish the first program.


0507--34.png


Projects

For detailed projects, nevigated the website https://fs.keyestudio.com/KS0507


The whole project begins with basic program. Starting from simple to complex, the lessons will guide you to assemble smart RV and absorb the knowledge of electronic and machinery step by step. I reckon that you might hardly sit still and itch to have a go, let’s get started.

Note: (G), marked on each sensor and module, is negative pole and connected to“G”,“-”or“GND”on the sensor shield or control board ; (V) is positive pole and interfaced with“V”,“VCC”,“+”or“5V”on the sensor shield or control board.

Project 1: LED Blink

(1)Description:


0507--1.png

For the starter and enthusiast, this is a fundamental program---LED Blink. LED, the abbreviation of light emitting diodes, consist of Ga, As, P, N chemical compound and so on. It is often applied to numbers and text display as an indicator in the circuit.

The LED can flash diverse color by altering the delay time in the test code. When in control, power on GND and VCC, the LED will be on if S end is high level; nevertheless, it will go off.

(2) Parameter:


0507--2.png 0507--3.png

  • Control interface: digital port
  • Working voltage: DC 3.3-5V
  • Pin spacing: 2.54mm
  • LED display color: red


(3) Component:


0507--4.png

(4)Connection Diagram:


0507--5.png

From the above diagram, pin -, + and S of LED module are respectively connected to pin G, 5V and D13 of expansion board. Then we compile the code as follows:


(5)Test Code:

  /*
  keyestudio smart RV
  lesson 1.1
  Blink
  http://www.keyestudio.com
*/
#define LED  13 //define the pin of LED as D13
void setup()
{
  pinMode(LED, OUTPUT);// initialize digital pin LED as an output.
}
void loop() // the loop function runs over and over again forever
{
  digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level
  delay(1000);    // wait for a second
  digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);    // wait for a second
}
//*******************************************************************


(6)Test Result:

Upload the program, LED blinks with the interval of 1s.

(7)Code Explanation:

pinMode(LED,OUTPUT) - This function can denote that the pin is INPUT or OUTPUT.
digitalWrite(LED,HIGH) - When pin is OUTPUT, we can set it to HIGH(output 5V) or LOW(output 0V).

(8)Extension Practice:
The LED flashes for 1s through the test result, therefore, pins and delay time affect flash frequency.

/*
  keyestudio smart RV
  lesson 1.2
  Blink
  http://www.keyestudio.com
*/
#define LED 13 //Define the pin of LED as D13
void setup()
{
  pinMode(LED, OUTPUT);// initialize digital pin LED as an output.
}
void loop() // the loop function runs over and over again forever
{
  digitalWrite(LED, HIGH);   // turn LED on (HIGH is the voltage level
  delay(100);    // wait for a second
  digitalWrite(LED, LOW);    // turn LED off by making the voltage LOW
  delay(100);    // wait for a second
}
//****************************************************************

The LED flashes faster through the lesson 1.2 test.

Project 2: Adjust LED Brightness

(1)Description: In previous lesson, we control LED on and off and make it blink. In this project, we will control LED brightness through PWM to simulate breathing effect. Similarly, you can change the step length and delay time in the code so as to demonstrate different breathing effect.

PWM is a means of controlling the analog output via digital means. Digital control is used to generate square waves with different duty cycles (a signal that constantly switches between high and low levels) to control the analog output.In general, the input voltage of port are 0V and 5V. What if the 3V is required? Or what if switch among 1V, 3V and 3.5V? We can’t change resistor constantly. For this situation, we need to control by PWM.


thumb
For the Arduino digital port voltage output, there are only LOW and HIGH, which correspond to the voltage output of 0V and 5V. You can define LOW as 0 and HIGH as 1, and let the Arduino output five hundred 0 or 1 signals within 1 second.
If output five hundred 1, that is 5V; if all of which is 1, that is 0V. If output 010101010101 in this way then the output port is 2.5V, which is like showing movie. The movie we watch are not completely continuous. It actually outputs 25 pictures per second. In this case, the human can’t tell it, neither does PWM. If want different voltage, need to control the ratio of 0 and 1. The more 0,1 signals output per unit time, the more accurately control.
(2)Component:

thumb
(3)Connection Diagram:
We keep connection diagram unchanged.

thumb
(4)Test Code:

/*
  keyestudio smart RV
  lesson 2.1
  PWM
  http://www.keyestudio.com
*/
#define LED 13 //Define the pin of LED as D13
int value;
void setup()
{
  pinMode(LED, OUTPUT);// initialize digital pin LED as an output.
}
void loop () {
  for (value = 0; value < 255; value = value + 1) {
    analogWrite (LED, value); // LED lights gradually light up
    delay (5); // delay 5MS
  }
  for (value = 255; value > 0; value = value - 1) {
    analogWrite (LED, value); // LED gradually goes out
    delay (5); // delay 5MS
  }
}

(5) Test Result:
Upload test code successfully, LED gradually becomes brighter then darker, like human breath.

(6) Code Explanation When we need to repeat some statements, we could use FOR statement. FOR statement format is shown below:


thumb
FOR cyclic sequence:
Round 1:1 → 2 → 3 → 4
Round 2:2 → 3 → 4 …
Until number 2 is not established, “for”loop is over, After knowing this order, go back to code:

for (int value = 0; value < 255; value=value+1){

       ...}

for (int value = 255; value >0; value=value-1){

      ...}


The two“for”statements make value increase from 0 to 255, then reduce from 255 to 0, then increase to 255,....infinitely loop There is a new function in the following ----- analogWrite()
We know that digital port only has two state of 0 and 1. So how to send an analog value to a digital value? Here,this function is needed. Let’s observe the Arduino board and find 6 pins marked“~”which can output PWM signals.
Function format as follows:

analogWrite(pin,value)
analogWrite() is used to write an analog value from 0~255 for PWM port, so the value is in the range of 0~255. Attention that you only write the digital pins with PWM function, such as pin 3, 5, 6, 9, 10, 11.
PWM is a technology to obtain analog quantity through digital method. Digital control forms a square wave, and the square wave signal only has two states of turning on and off (that is, high or low levels). By controlling the ratio of the duration of turning on and off, a voltage varying from 0 to 5V can be simulated. The time turning on(academically referred to as high level) is called pulse width, so PWM is also called pulse width modulation.
Through the following five square waves, let’s acknowledge more about PWM.

thumb


In the above figure, the green line represents a period, and value of analogWrite() corresponds to a percentage which is called Duty Cycle as well. Duty cycle implies that high-level duration is divided by low-level duration in a cycle. From top to bottom, the duty cycle of first square wave is 0% and its corresponding value is 0. The LED brightness is lowest, that is, turn off. The more time high level lasts, the brighter the LED. Therefore, the last duty cycle is 100%, which correspond to 255, LED is brightest. 25% means darker.
PWM mostly is used for adjusting the LED brightness or rotation speed of motor.
It plays vital role in controlling smart robot car. I believe that you can’t wait to enter next project.

(7) Extension Practice:
Let’s keep pins unchanged and change the delay value, then observe how LED changes.

/*
  keyestudio smart RV
  lesson 2.2
  PWM
  http://www.keyestudio.com
*/
#define LED 13 //Define the pin of LED as D13
int value;
void setup()
{
  pinMode(LED, OUTPUT);// initialize digital pin LED as an output.
}
void loop () {
  for (value = 0; value < 255; value = value + 1) {
    analogWrite (LED, value); // LED lights gradually light up
    delay (20); // delay 30MS
  }
  for (value = 255; value > 0; value = value - 1) {
    analogWrite (LED, value); // LED gradually goes out
    delay (20); // delay 30MS
  }
}
//**********************************************************

Upload code to development board, the LED’s blink frequency is slower, isn’t it?

Project 3: Button Module

(1)Description: In this project, we control LED brightness by button module. The low level(0) is output when the button is pressed; however, high level(1) is output when button is released.

(2)Specification:

  • Operating Voltage: 3.3-5V (DC)
  • Control Signal: Digital signal
  • Detection Height: 0-3 cm
  • Weight: 3.8g
  • Dimension: 34*22*15mm


(3)Component:


thumb

(4)Connection Diagram:
Note: the pin G, V and S of button sensor are interfaced with pin G, V and
D2 of expansion board, and connect pin G, V and S of LED module to G, V
and D13 of expansion board.


thumb

(5)Test Code:read the signal of button

/*
  keyestudio smart RV
  lesson 3.1
  button
  http://www.keyestudio.com
*/
#define button 2 //Define the pin of LED as D12
volatile int buttonState;  //The output level state of button module
void setup()
{
  Serial.begin(9600);//set baud rate to 9600
  pinMode(button, INPUT);// initialize digital pin button as an input.
}
void loop () {
  buttonState = digitalRead(button);
  Serial.println(buttonState);  //auto wrap and output the digital signals from digital 2
  delay(100);//delay in 100ms
}


(6)Test Result:
Upload code, open serial monitor to set baud rate to 9600. The number “1”shows up then“0”appears on the monitor.


thumb
(7)Code Explanation:
Serial.begin(9600)- Initialize serial port, set baud rate to 9600
pinMode(pin, INPUT)-This function can denote that the pin is INPUT or OUTPUT

digitalRead(pin)-Read the state of pin, which are generally HIGH and LOW level. Function digitalRead() will come back to HIGH or LOW level if pins are not connected.

(8) Extension Practice:button-controlled LED

thumb

 /*
  keyestudio smart RV
  lesson 3.2
  button
  http://www.keyestudio.com
*/
#define LED 13 //Define the pin of LED as D13
#define button 2 //Define the pin of button module as D2
volatile int buttonState;  //the state of button
void setup()
{
  Serial.begin(9600); //set baud rate to 9600
  pinMode(button, INPUT); // initialize digital pin button as an input.
  pinMode(LED, OUTPUT); // initialize digital pin LED as an output.
}
void loop ()
{
  buttonState = digitalRead(button);    //read the status of button
  if (buttonState == 0) //if the button is pressed
  {
    digitalWrite(LED, HIGH);  //Turn on LED
  }
  else
  {
    digitalWrite(LED, LOW);   //turn off LED
  }
  delay(100); //dealy in 100ms


It turns out that LED is on when the button is pressed, and LED off when button is released.

Project 4: Line Tracking Sensor

(1)Description:


thumb
The tracking sensor is actually an infrared sensor. The component used here is the TCRT5000 infrared tube.
Its working principle is to use the different reflectivity of infrared light to the color, then convert the strength of the reflected signal into a current signal. During the process of detection, black is active at HIGH level, but white is active at LOW level. The detection height is 0-3 cm.
Keyestudio 3-channel line tracking module has integrated 3 sets of TCRT5000 infrared tube on a single board, which is more convenient for wiring and control.
By rotating the adjustable potentiometer on the sensor, it can adjust the detection sensitivity of the sensor.The tracking sensor is actually an infrared sensor.

(2) Specification:

  • Operating Voltage: 3.3-5V (DC)
  • Interface: 5PIN
  • Output Signal: Digital signal
  • Detection Height: 0-3 cm


Note: Adjust the sensitivity by rotating the potentiometer before the test. The sensitivity is best when LED is at on and off state.
(3) Component:

thumb
(4)Connection Diagram:

thumb
(5)Test Code:

/*
  keyestudio smart RV 
  lesson 4.1
  Line Track sensor
  http://www.keyestudio.com
*/
//Line Tracking Sensor
#define L_pin  50
#define M_pin  51
#define R_pin  52
void setup()
{
  Serial.begin(9600); //Set baud rate to 9600
  pinMode(L_pin, INPUT); //set pins of line tracking sensor to INPUT
  pinMode(M_pin, INPUT);
  pinMode(R_pin, INPUT);
}
void loop ()
{
  int L_val = digitalRead(L_pin); //read the value of left sensor
  int M_val = digitalRead(M_pin); //read the value of middle sensor
  int R_val = digitalRead(R_pin); //read the value of right sensor
  Serial.print(L_val);
  Serial.print("  ");
  Serial.print(M_val);
  Serial.print("  ");
  Serial.print(R_val);
  Serial.println("  ");
  delay(100); //delay in 100ms
}//****************************************************************************

(6)Test Result:
Upload code to development board, open serial monitor to check the state of three line tracking sensors. When no signals are received, they are in high level state and“1”shows up ; however, 1 changes into 0 when covering sensor with white paper.
thumb
(7) Code Explanation:
Serial.begin(9600)-initialize the serial port, set serial baud rate to 9600  pinMode- define the PIN state(input and output) of MCU digitalRead- read the level status of pin(HIGH, LOW)
(8)Extension Practice:
We’ve known how line tracking sensor works, next, we connect an LED at pin 13. We will control LED on and off by line tracking sensor, as shown below

thumb
Test Code

/*
  keyestudio smart RV
  lesson 4.2
  Line Track sensor
  http://www.keyestudio.com
*/
//LED pin
#define LED 13
//Line Tracking Sensor
#define L_pin  50
#define M_pin  51
#define R_pin  52
void setup()
{
  Serial.begin(9600); //set baud rate to 9600
  pinMode(LED, OUTPUT); //set LED to OUTPUT
  pinMode(L_pin, INPUT); //set the pin of line tracking sensor to INPUT
  pinMode(M_pin, INPUT);
  pinMode(R_pin, INPUT);
}
void loop ()
{
  int L_val = digitalRead(L_pin); //read the value of left sensor
  int M_val = digitalRead(M_pin); //read the value of middle sensor
  int R_val = digitalRead(R_pin); //read the value of right sensor
  Serial.print(L_val);
  Serial.print("  ");
  Serial.print(M_val);
  Serial.print("  ");
  Serial.print(R_val);
  Serial.println("  ");
  delay(100); //delay in 100ms
  if (L_val == 0 || M_val == 0 || R_val == 0) {
    digitalWrite(LED, HIGH);
  }
  else {
    digitalWrite(LED, LOW);
  }
}
//****************************************************************************

Upload the code to development board, we observe LED get brighter when covering the line tracking sensor by hand.

Project 5: PIR Motion Sensor

(1)Description:

thumb
The Pyroelectric infrared motion sensor can detect infrared signals from a moving person or animal, and output switching signals. It can be applied to a variety of occasions to detect the movement of human body. Conventional pyroelectric infrared sensors are much more bigger, with complex circuit and lower reliability. Now we launch this new pyroelectric infrared motion sensor, specially designed for ARDUINO. This sensor integrates a digital pyroelectric infrared sensor and connecting pins. It features higher sensibility and reliability, lower power consumption, light weight, small size, lower voltage working mode and simpler peripheral circuit.
(2)Specification:

  • Input voltage: DC 3.3V ~ 5V
  • Working current: 15uA
  • Working temperature: -20 ~ 85 degrees Celsius
  • Output voltage: high 3 V, low 0 V
  • Output delay time (high level): about 2.3 to 3 seconds
  • Detection angle: about 100 °
  • Detection distance: 3-4 meters
  • Output indicator LED (high-level )
  • Pin limit current: 100mA

Note:
1. The maximum distance is 3-4 meters during testing.
2. When testing, firstly open the white lens, you can see the rectangular sensing part. When the long line of the rectangular sensing part is parallel to the ground, the distance is the best.
3. When testing, need to cover the sensor with white lens, otherwise it will affect the distance.
4. The distance is best at 25℃, and the detection distance is shortened when it exceeds 30℃.
5. Done powering up and uploading the code, you need to wait 5-10 seconds then start testing, otherwise it is not sensitive.

(3)Component:

thumb
(4)Connection Diagram
Note: on expansion board, the pin G, V and S of PIR motion sensor are connected to G, V and 47; pin G, V and S of LED module are connected to G, V and 13.

thumb
(5)Test Code:

/*
  keyestudio smart RV
  lesson 5.1
  PIR
  http://www.keyestudio.com
*/

//PIR Motion Sensor
#define PIR  47   //PIR pin to D47  

void setup()
{
  Serial.begin(9600); //set baud rate to 9600
  pinMode(PIR, INPUT); //set the pin of PIR motion sensor to INPUT

}
void loop ()
{
  int val = digitalRead(PIR); //set the variable val to the value read
  Serial.println(val);
  delay(100); //delay in 100ms

}

(6)Test Result:

Upload code, open serial monitor and set baud rate to 9600. The serial monitor will show“1”when PIR motion sensor detects people around; on the contrary, number“0”will appear on the monitor when nobody is detected.
thumb

(7)Project Extension:

thumb

/*
  keyestudio smart RV
  lesson 5.2
  PIR
  http://www.keyestudio.com
*/

//PIR Motion Sensor
#define PIR  47   //PIR pin to D47  
#define LED  13   //LED pin to D13
void setup()
{
  pinMode(LED, OUTPUT); //set LED to OUTPUT
  pinMode(PIR, INPUT); //set PIR motion sensor to INPUT

}
void loop ()
{
  int val = digitalRead(PIR); //set val to the value read by sensor
  if (val == 1) {   //People is detected
    digitalWrite(LED, HIGH); //turn on LED
  }
  else {
    digitalWrite(LED, LOW); //otherwise, lED will be off
  }

}

The LED connected to digital 13 will be on when the sensor detects people moving, otherwise, LED will be off.

Project 6: 4*4 Membrane Keypad

(1)Description:
To save I/O ports of MCU, we make a Membrane Keypad. In this project, we will make an experiment; serial monitor will display the corresponding character when the membrane keypad is pressed.

thumb
Schematic Diagram:

thumb

(2)Specification:

  • Working Voltage: 3.3V~5V
  • Port:digital port

(3)Component:

thumb


(4)Connection Diagram:

thumb

(5)Test Code:

/*
  keyestudio smart RV
  lesson 6.1
  Keypad
  http://www.keyestudio.com
*/

#include <Keypad.h>
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keypressed;
//define the cymbols on the buttons of the keypads
char keyMap[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {14, 15, 16, 17}; //Row pinouts of the keypad
byte colPins[COLS] = {36, 37, 38, 39}; //Column pinouts of the keypad
Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, ROWS, COLS);

void setup()
{
  Serial.begin(9600); //set baud rate to 9600

}
void loop ()
{
  keypressed = myKeypad.getKey(); //read key value
  if (keypressed != NO_KEY) { //read key value
    Serial.print("key:"); 
    Serial.println(keypressed); //print key value
  }

}

(6)Test Result:
Download code, open serial monitor and set baud rate to 9600. The serial monitor will show the corresponding key value when the key of membrane keypad is pressed, as shown below;

thumb

Project 7: Power Amplifier Module

(1)Description:

thumb
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 experiment of this chapter is related to produce sound. Normally, the experiment is done with a buzzer or a speaker.
In this lesson, we will replace buzzer with power amplifier module, input different frequencies square wave to emit different sound like“do re mi fa so la si do”.

(2) Specification:

  • Control interface: digital port
  • Working voltage: DC 3.3-5V

(3) Component:
thumb
(4) Connection Diagram:
Note: the pin G, V and S of passive buzzer are connected to pin G, V and D49 of expansion board

thumb
(5)Test Code:

//*************************************************************************
/*
  keyestudio smart car
  lesson 7.1
  buzzer
  http://www.keyestudio.com
*/

#define buzzer 49 //buzzer pin to D49

void setup() {
  pinMode(buzzer, OUTPUT);//set digital 49 to OUTPUT
}

void loop () {
  tone(buzzer, 262);  //buzzer emits the sound with 262Hz
  delay(250);   //delay in 250ms
  tone(buzzer, 294);;   //buzzer emits the sound with 294Hz
  delay(250);   //delay in 250ms
  tone(buzzer, 330);
  delay(250);
  tone(buzzer, 349);
  delay(250);
  tone(buzzer, 392);
  delay(250);
  tone(buzzer, 440);
  delay(250);
  tone(buzzer, 494);
  delay(250);
  tone(buzzer, 532);
  delay(250);
  noTone(buzzer);   //buzzer turns off sound output
  delay(1000);
}
//*************************************************************************************

(6) Test Result:
Upload code to MEGA 2560 smart development board, power amplifier module will emit“do re mi fa so la si do”.

(7)Project Extension:Playing Music

  /*
  keyestudio smart RV
  lesson 7.2
  buzzer
  http://www.keyestudio.com
*/

#define buzzer 49 //buzzer pin to D49

void setup() {
  pinMode(buzzer, OUTPUT);//set digital 3 to OUTPUT
}

void loop () {
  birthday();
}

////////////////////////set "Happy Birthday" Song//////////////////////////////////
void birthday()
{
  tone(buzzer, 294); //buzzer emits sound with 294Hz
  delay(250);//delay in 250ms
  tone(buzzer, 440);
  delay(250);
  tone(buzzer, 392);
  delay(250);
  tone(buzzer, 532);
  delay(250);
  tone(buzzer, 494);
  delay(500);
  tone(buzzer, 392);
  delay(250);
  tone(buzzer, 440);
  delay(250);
  tone(buzzer, 392);
  delay(250);
  tone(buzzer, 587);
  delay(250);
  tone(buzzer, 532);
  delay(500);
  tone(buzzer, 392);
  delay(250);
  tone(buzzer, 784);
  delay(250);
  tone(buzzer, 659);
  delay(250);
  tone(buzzer, 532);
  delay(250);
  tone(buzzer, 494);
  delay(250);
  tone(buzzer, 440);
  delay(250);
  tone(buzzer, 698);
  delay(375);
  tone(buzzer, 659);
  delay(250);
  tone(buzzer, 532);
  delay(250);
  tone(buzzer, 587);
  delay(250);
  tone(buzzer, 532);
  delay(500);
}

Project 8: RGB Module

(1)Description:
In the previous project, we know how to control the LED brightness.Yet, in this chapter, we will learn a special LED---- RGB. RGB LED is divided into

Common cathode means that all the cathodes are connected to a single pin. Common anode means that all the anodes are connected to a single pin. We use common anode RGB.
Common anode RGB LED has 4 pins and its anodes are interfaced with +5V. The rest of LEDs need a 220Ω resistor in cascade series to prevent circuit from burning.

We need to interface R, G and B signal ends of RGB with PWM ports of MCU. In addition, the color proportion of LED can be controlled by adjusting three PWM values, that is, LED can display different colors.
The larger corresponding color proportion is, the larger the PWM value we set.

(2)Specification:

  • Working voltage: DC 5V
  • Working current: 0.6A (maximum)
  • Maximum power: 0.3W
  • Working temperature: -25~+65℃
  • Interface: 4pin header (spacing 2.54mm)
  • Positioning hole: 3mm in diameter
  • Size: 30*20mm
  • Environmental protection attributes: ROHS

(3)Component:
thumb

(4)Connection Diagram:

thumb

(5)Test Code:

/*
  keyestudio smart RV
  lesson 8.1
  RGB
  http://www.keyestudio.com
*/

#define RGB_R  3  //define pin R of RGB as D3
#define RGB_B  4  // define pin B of RGB as D4
#define RGB_G  5  //define pin B of RGB as D5

void setup() {
  pinMode(RGB_R, OUTPUT); //set the digital ports to OUTPUT
  pinMode(RGB_G, OUTPUT);
  pinMode(RGB_B, OUTPUT);
}

void loop () {
  set_RGBColor(0,255,255);   //red
  delay(500);
  set_RGBColor(255,0,255);   //green
  delay(500);
  set_RGBColor(255,255,0);   //blue
  delay(500);
}

//set color
void set_RGBColor(int red, int green, int blue) {
  analogWrite(RGB_R, red);
  analogWrite(RGB_G, green);
  analogWrite(RGB_B, blue);
}

(6)Test Result:
After uploading code, RGB module shows red, green and blue colors.
(7)Project Extension:display random color

/*
  keyestudio smart RV
  lesson 8.2
  RGB
  http://www.keyestudio.com
*/

#define RGB_R  3  //define the pin R of RGB as D3
#define RGB_B  4  //set pin B of RGB to D4
#define RGB_G  5  //set pin g of RGB to D5
int r, g, b;
void setup() {
  pinMode(RGB_R, OUTPUT); // set digital ports of RGB to OUTPUT
  pinMode(RGB_G, OUTPUT);
  pinMode(RGB_B, OUTPUT);
}

void loop () {
  //choose a random number from 0 to 255
  r = random(255);  
  g = random(255);
  b = random(255);
  set_RGBColor(r, g, b); //random colors
  delay(500);
}

//set color
void set_RGBColor(int red, int green, int blue) {
  analogWrite(RGB_R, red);
  analogWrite(RGB_G, green);
  analogWrite(RGB_B, blue);
}

Project 9: Adjustable Rotary Potentiomete

(1)Description:
thumb
There is a rotary potentiometer module which uses a 10K adjustable resistor in this kit. By rotating the potentiometer, we can change the value of the resistor and then build the circuit to convert the resistance change into the voltage change. In addition, its voltage can be divided into 1025 parts and can be easily connected to 2560 control board.
In this chapter, we will adjust LED brightness by potentiometer.
(2)Specification:

  • Operating voltage: 3.3V to 5V
  • Interface: analog interface

(3)Component:
thumb

(4)Connection Diagram:

thumb