Ks0192 keyestudio 4WD Bluetooth Multi-functional Car
keyestudio 4WD Bluetooth Multi-functional Car
Introduction
keyestudio 4WD Bluetooth Multi-functional Car is a learning application development system based on microcontroller and with ATmega-328 as core. It has functions of line tracking, obstacle avoidance, IR remote control , Bluetooth remote control and detecting distance. This kit contains plenty of interesting programs and can extend an external circuit module to increase more functions of this car. The kit aims to disengage users from boring theories and obtain capacity of system development when they are learning Arduino.
Parameters
1.Motor: Voltage: 6-9V Reduction Ratio: 1:48
2.Choosing L298N driver module as control motor, separated from microcontrollor
3.Three line tracking modules, having higher precision when detecting white and black lines,able to realize anti-falling
4.IR remote control module making up a remote control system of the car
5.Using ultrasonic module to realize obstacle avoidance
6.Pairing mobile phone Bluetooth with Bluetooth remote control module to control the car
7.Able to connect with external voltage at 7~12V,and equip with various sensors to complete different functions as much as possible
Component List
Project List
Project 1:Line Tracking Sensor
Project 2:Ultrasonic Sensor
Project 3: Digital IR Receiver Module
Project 4: Servo Motor
Project 5: Bluetooth Module
Project 6: L298N Motor Driver
Project 7: I2C 1602 LCD
Project 8:Line Tracking of Smart Car
Project 9:Obstacle Avoidance of Smart Car
Project 10:IR Remote Control of Smart Car
Project 11:Distance Detecting of Smart Car
Project 12:Bluetooth Remote Control of Smart Car
Project 13:5 in 1 Muilti-functional Car
Address of Assembly Video
http://www.keyestudio.com/wp/2016/09/ks0192
Address of Demonstration Video
Project Details
Project 1:Line Tracking Sensor
Introduction:
This Line Tracking Sensor can detect white lines in black and black lines in white. The single line-tracking signal provides a stable output signal TTL for a more accurate and more stable line. Multi-channel option can be easily achieved by installing required line-tracking robot sensors.
Specification:
Power Supply: +5V
Operating Current: <10mA
Operating Temperature Range: 0°C ~ + 50°C
Output Interface: 3-wire interface (1 - signal, 2 - power, 3 - power supply negative)
Output Level: TTL level
Connection Diagram:
Sample Code:
const int sensorPin = 3; // the number of the sensor pin const int ledPin = 13; // the number of the LED pin int sensorState = 0; // variable for reading the sensor status void setup() { pinMode(ledPin, OUTPUT); pinMode(sensorPin, INPUT); } void loop(){ // read the state of the sensor value: sensorState = digitalRead(sensorPin); // if the sensorState is HIGH: if (sensorState == HIGH) { digitalWrite(ledPin, HIGH); } else {digitalWrite(ledPin, LOW); }}
Project 2: Ultrasonic Sensor
Introduction:
The HC-SR04 Ultrasonic Sensor is a very affordable proximity/distance sensor that has been used mainly for object avoidance in various robotics projects. It essentially gives your Arduino eyes / spacial awareness and can prevent your robot from crashing or falling off a table. It has also been used in turret applications, water level sensing, and even as a parking sensor. This simple project will use the HC-SR04 sensor with an Arduino and a Processing sketch to provide a neat little interactive display on your computer screen.
Specification:
Working Voltage: DC 5V
Working Current: 15mA
Working Frequency: 40Hz
Max Range: 4m
Min Range: 2cm
Measuring Angle: 15 degree
Trigger Input Signal: 10µS TTL pulse
Echo Output Signal Input TTL lever signal and the range in proportion
Size: 46*20.4mm
Weight: 9g
Connection Diagram:
Sample Code:
VCC to arduino 5v
GND to arduino GND
Echo to Arduino pin 7
Trig to Arduino pin 8
#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() { Serial.begin (9600); 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" */ Serial.println("-1"); digitalWrite(LEDPin, HIGH); } else { /* Send the distance to the computer using Serial protocol, and turn LED OFF to indicate successful reading. */ Serial.println(distance); digitalWrite(LEDPin, LOW); } //Delay 50ms before next reading. delay(50); }
Project 3: Digital IR Receiver Module
Introduction:
IR is widely used in remote control. With this IR receiver, Arduino project is able to receive command from any IR remoter controller if you have the right decoder. Well, it will be also easy to make your own IR controller using IR transmitter.
Specification:
Power Supply: 5V
Interface: Digital
Modulate Frequency: 38Khz
Module Interface Socket: JST PH2.0
NOTE: In the sample code below Digital pin 11 is in use, you may either change your wiring or change the sample code to match.
Connection Diagram:
Sample Code:
#include <IRremote.h> int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); irrecv.resume(); // Receive the next value } }
IR Remote Library includes some sample codes for sending and receiving.
https://github.com/shirriff/Arduino-IRremote
Project 4: Servo Motor
Introduction
Servomotor is a position control rotary actuator. It mainly consists of housing, circuit board, core-less motor, gear and position sensor. The receiver or MCU outputs a signal to the servomotor. The motor has a built-in reference circuit that gives out reference signal, cycle of 20ms and width of 1.5ms. The motor compares the acquired DC bias voltage to the voltage of the potentiometer and outputs a voltage difference. The IC on the circuit board will decide the rotate direction accordingly and drive the core-less motor. The gear then pass the force to the shaft. The sensor will determine if it has reached the commanded position according to the feedback signal. Servomotors are used in control systems that requires to have and maintain different angles. When the motor speed is definite, the gear will cause the potentiometer to rotate. When the voltage difference reduces to zero, the motor stops. Normally, the rotation angle range is among 0-180 degrees.
Servomotor comes with many specifications. But all of them have three connection wires, distinguished by brown, red, orange colors(different brand may have different color). Brown one is for GND, red one for power positive, orange one for signal Line.
The rotate angle of the servo motor is controlled by regulating the duty cycle of the PWM(Pulse-Width Modulation) signal. The standard cycle of the PWM signal is 20ms(50Hz). Theoretically, the width is distributed between 1ms-2ms, but in fact, it's between 0.5ms-2.5ms. The width corresponds the rotate angle from 0° to 180°. But note that for different brand motor, the same signal may have different rotate angle.
After some basic knowledge, let's learn how to control a servomotor. For this experiment, you only need a servomotor and several jumper wires.
Connection & Sample Program
There are two ways to control a servomotor with Arduino. One is to use a common digital sensor port of Arduino to produce square wave with different duty cycle to simulate PWM signal and use that signal to control the positioning of the motor. Another way is to directly use the Servo function of the Arduino to control the motor. In this way, the program will be easier but it can only control two-contact motor because for the servo function, only digital pin 9 ang 10 can be used. The Arduino drive capacity is limited. So if you need to control more than one motor, you will need external power.
Connection Diagram:
Sample Code:
int servopin=9;// select digital pin 9 for servomotor signal line int myangle;// initialize angle variable int pulsewidth;// initialize width variable int val; void servopulse(int servopin,int myangle)// define a servo pulse function { pulsewidth=(myangle*11)+500;// convert angle to 500-2480 pulse width digitalWrite(servopin,HIGH);// set the level of servo pin as “high” delayMicroseconds(pulsewidth);// delay microsecond of pulse width digitalWrite(servopin,LOW);// set the level of servo pin as “low” delay(20-pulsewidth/1000); } void setup() { pinMode(servopin,OUTPUT);// set servo pin as “output” Serial.begin(9600);// connect to serial port, set baud rate at “9600” Serial.println("servo=o_seral_simple ready" ) ; } void loop()// convert number 0 to 9 to corresponding 0-180 degree angle, LED blinks corresponding number of time { val=Serial.read();// read serial port value if(val>'0'&&val<='9') { val=val-'0';// convert characteristic quantity to numerical variable val=val*(180/9);// convert number to angle Serial.print("moving servo to "); Serial.print(val,DEC); Serial.println(); for(int i=0;i<=50;i++) // giving the servo time to rotate to commanded position { servopulse(servopin,val);// use the pulse function } } }
Project 5: Bluetooth Module
Introduction:
This Bluetooth module can easily achieve serial wireless data transmission. Its operating frequency is among the most popular 2.4GHz ISM frequency band (i.e. Industrial, scientific and medical). It adopts Bluetooth 2.1+EDR standard. In Bluetooth 2.1, signal transmit time of different devices stands at a 0.5 seconds interval so that the workload of bluetooth chip can be reduced substantially and more sleeping time can be saved for bluetooth. This module is set with serial interface, which is easy-to-use and simplifying overall design/development cycle.
Specification:
Bluetooth Protocol: Bluetooth 2.1+ EDR Standard
USB Protocol: USB v1.1/2.0
Operating Frequency: 2.4GHz ISM Frequency Band
Modulation Mode: Gauss Frequency Shift Keying
Transmit Power: ≤ 4dBm, Second Stage
Sensitivity: ≤-84dBm at 0.1% Bit Error Rate
Transmission Speed: 2.1Mbps(Max)/160 kbps(Asynchronous); 1Mbps/1Mbps(Synchronous)
Safety Feature: Authentication and Encryption
Supported Configuration: Bluetooth Serial Port (major and minor)
Supply Voltage: +3.3 VDC 50mA
Operating Temperature: -20 to 55℃
Connection Diagram:
Sample Code:
int val; int ledpin=13; void setup() { Serial.begin(9600); pinMode(ledpin,OUTPUT); } void loop() { val=Serial.read(); if(val=='a') { digitalWrite(ledpin,HIGH); delay(250); digitalWrite(ledpin,LOW); delay(250); Serial.println("keyestudio");
Project 6: L298N Motor Driver
Introduction:
Using L298N made by ST Company as the control chip, the module has characteristics of strong driving ability, low calorific value and strong anti-interference ability. This module can use built-in 78M05 for electric work via a driving power supply part. But to avoid the damage of the voltage stabilizing chip, please use an external 5V logic supply when using more than 12V driving voltage.
Using large capacity filter capacitor, this module can follow current to protect diodes, and improve reliability.
Specification:
Working Mode: H bridge (double lines)
Control Chip: L298N (ST)
Logical Voltage: 5V
Driving Voltage: 5V-35V
Logical Current: 0mA-36mA
Driving Current: 2A (MAX single bridge)
Storage Temperature: (-20 °C)-(+135 °C)
Maximum Power: 25W
Weight: 30g
Periphery Dimension: 43 x 43 x 27 mm(L x W x H)
Circuit Connection:
Sample Code:
int IN2=6; int IN3=7; int IN4=8; int ENA=9; int ENB=10; void setup() { for (int i = 5; i <11; i ++) { pinMode(i, OUTPUT); } } void loop() { // rotate CW digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); analogWrite(ENA,200); digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); analogWrite(ENB,200); delay(1000); // pause for 1S analogWrite(ENA,0); analogWrite(ENB,0); delay(1000); // rotate CCW digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); analogWrite(ENA,100); digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); analogWrite(ENB,100); delay(1000); // pause for 1S analogWrite(ENA,0); analogWrite(ENB,0); delay(1000); }
Project 7:keyestudio 1602 I2C Module
Introduction:
This is great LCD display compatible with arduino. With limited pin resources, your project will quickly run out of resources using normal LCDs. With this I2C interface LCD module, you only need 2 lines (I2C)to display the information.If you already have I2C devices in your project, this LCD module actually cost no more resources at all. The address can be set 0x27.
Specification:
I2C Address: 0x27
Back Lit (Blue with white char color)
Supply Voltage: 5V
Interface:I2C/TWI x1,Gadgeteer interface x2
Adjustable Contrast
Size:82x35x18 mm
Connection Diagram:
I602 is equipped with 4 pins in total. SCL should be connected to analog 5, SDA to analog 4, VCC to +5V and GND to ground.
connection :
Sample Code:
//Compatible with the Arduino IDE 1.0 //Library version:1.1 #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() {}
Get libraries of Wire and LiquidCrystal_I2C from :