Download Arduino-BOT Lecture #1

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Transistor–transistor logic wikipedia , lookup

Rectiverter wikipedia , lookup

Opto-isolator wikipedia , lookup

Microcontroller wikipedia , lookup

Electrical engineering wikipedia , lookup

Immunity-aware programming wikipedia , lookup

Charlieplexing wikipedia , lookup

Electronic engineering wikipedia , lookup

Transcript
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
Introduction to the Arduino-BOT
1
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
2
References:
1) Arduino-BOT Lectures #1-5 - http://faculty.tcc.edu/PGordy/Egr120/
2) Robotics with the Board of Education Shield for Arduino web tutorials http://learn.parallax.com/ShieldRobot
3) Board of Education Shield for Arduino documentation http://www.parallax.com/Portals/0/Downloads/docs/prod/robo/35000-BOEShield-v1.2.pdf
4) Arduino web site (software, microcontrollers, examples, and more) - http://www.arduino.cc/
Much of the
information in
this presentation
comes from these
online tutorials
from Parallax
Arduino-BOT Lecture #1 EGR 120 – Introduction to Engineering 3
Robotics
Why study robots?
1) Applications – There are creative uses of robots all around us in
fields such as space exploration, undersea mapping, manufacturing,
medicine, navigation, military applications and more.
2) Fun – Most engineering students have a fairly broad exposure to
computers, but few have used computers to communicate with
external devices. A robot is little more than a specialized computer
used to read input devices (sensors) and to control output devices
(motors, relays, servos, lights, sirens, etc.) It is challenging and fun to
use computers to accomplish tasks and the applications are unlimited.
3) Common usage – A large number of introductory engineering
courses around the country include robotics projects. Students are also
commonly involved in robotics-based team competitions, such as the
ASEE Model Design Competition or the IEEE Autonomous Vehicle
Competition.
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
4
ASEE Model Design Competition
TCC Engineering students have built a number of vehicles for the ASEE Model
Design Competition that have been powered by the BASIC Stamp or Arduino
microcontrollers..
This TCC vehicle followed a black line on a
track by using the BASIC Stamp to read four
optical sensors and to steer the vehicle by
changing the speed of each rear wheel
separately (powered by servos).
Infrared sensors
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
This TCC vehicle was
designed to climb over
barriers on the track
instead of following a
black line around the
barriers. The BASIC
Stamp read one optical
sensor which counted
wheel revolutions. The
BASIC Stamp also
controlled relays to
reverse the tank’s
direction at the turn
point (after a certain
number of wheel
revolutions) and stopped
the tank at the end of the
course.
5
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
This TCC vehicle had to navigate a difficult figure-8
track with sharp hills and valleys. It featured a body
that twisted in the middle to maintain traction. The
BASIC Stamp was used to read three optical sensors
to follow a line and then turned a servo for steering.
Additionally, the BASIC Stamp was used to slow
the inside rear wheel on the sharpest turns to assist
the steering.
6
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
7
Selecting a robot:
The key component to a robot is the computer (or microprocessor or
microcontroller) that serves as its “brain.” Some features to consider in a
microcontroller are:
1) Number of input/output ports
2) Programming language
3) Complexity (time required for students to learn to use it)
4) Cost
5) Size
6) Power requirements
7) Support (such as documentation and sample code that is readily
available online)
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
Potential choices:
1) Lego Mindstorm
 Easy to use
 Limited to three inputs/outputs
 Somewhat oversimplified with
all snap-together pieces
2) Handy Board
 A computer board powered by the 68HC11
microprocessor that can be easily used to
power robots.
 The 68HC11 is commonly used in
junior/senior courses in EE (as part of a
microcontrollers course)
 Supports many advanced features and has
14 input/outputs
 More difficult to program (assembly
language or C)
8
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
3) BASIC Stamp BOE-BOT
 Easy to program (using a version of
BASIC)
 16 input/outputs (digital)
 Easy to use editor
 Used in EGR 120 for previously
4) Arduino-BOT
 BOE-BOT above modified to use the
popular Arduino microcontrollers
 Several Arduino microcontroller
models can be used.
 Arduino programming language based
on C/C++ which will be used later
EGR 125 and EGR 262.
 Great online resources
 Used in EGR 120 currently
9
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
10
Arduino Microcontrollers
Arduino produces several versions of microcontrollers. Three of these have
been tested with the Arduino Shield, a development board produced by Parallax
which works nicely with the BOE-BOT. These three microcontrollers are:
Arduino UNO R3
• Atmega 328
microcontroller
• 14 digital I/O pins
• 6 analog I/O pins
• 16 MHz clock speed
• 32 kB flash memory
• Used in EGR 120
Arduino Mega 2560 R3
• Atmega 2560
microcontroller
• 14 digital I/O pins
• 6 analog I/O pins
• 16 MHz clock speed
• 256 kB flash memory
For more information - www.arduino.cc
Arduino Duemilanove
• Atmega 168
microcontroller
• 14 digital I/O pins
• 6 analog I/O pins
• 16 MHz clock speed
• 16 kB flash memory
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
11
The Board of Education Shield for Arduino
The Parallax Board of Education Shield for Arduino allows different Arduino
microcontroller boards to be plugged into the bottom on the board, leaving the
top of the board free for access to I/O pins, servo ports, LEDs, and a
breadboard.
Arduino Shield
Arduino UNO
Microcontroller
plugs into the
bottom of the shield
The Arduino Shield
with the Arduino UNO
is ready to be mounted
on a BOEBOT.
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
The Board of Education (BOE) Shield for Arduino
12
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
Power Switch
The BOE Shield for Arduino comes with a 3-position power switch that operates as
follows:
LED lit when
LED lit when
0) Power off
servo ports
breadboard
are powered
1) Power to breadboard, but not to servo ports. is powered
2) Power to breadboard and to servo ports.
Note: Position 1 is useful for
downloading programs that
don’t use the servos or when
you don’t want the servos to
start turning quite yet.
3-position
switch
13
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
14
The Arduino-BOT
The Arduino-BOT is a robot with a Board of Education (BOE) Shield mounted
on it and the Arduino UNO microcontroller under the shield. We will learn to
program the Arduino-BOT in this course.
Arduino UNO
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
15
The Arduino-BOT
Arduino Shield
Arduino UNO mounted
under the shield
Breadboard on the shield is
convenient for connecting
sensors or other circuits.
Batteries mounted
under the chassis
power the BOE,
servos, and other
devices.
Free rolling rear
wheel (or used as
front wheel)
Chassis has
numerous holes for
mounting sensors.
Drive wheels mounted
on servos. Steering is
accomplished by
turning one servo
faster than the other.
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
16
Powering the Arduino-BOT The Arduino can be powered using:
1) USB cable (5V input)
2) 4 AA Batteries ( ≈ 6V input)
3) 5 AA Batteries (≈ 7.5V input) – recommended since specifications for the
Arduino call for a 7-12V input. The Arduino will also run longer using 5
AA batteries.
• If both the USB and (strong) batteries are connected, the Arduino will select
the batteries
• Using the USB only is fine for downloading programs, but will give limited
voltages for other uses as noted below (results from one Arduino-BOT tested
in lab):
Connection
USB
4 AA Batteries
5 AA Batteries
5V
4.28 V
4.92 V
4.98 V
3.3 V
3.20 V
3.29 V
3.29 V
Servo Port *
4.28 V
4.92 V
4.98 V
Vin
4.32 V
5.51 V
7.09 V
* Assuming that the jumper on shield is in the 5V position
Arduino-BOT Lecture #1
Powering the
Arduino-BOT
Power through
USB connection
Power through
AA battery pack
Be sure to unplug the
battery pack connection
at the end of each class
or else it will continue to
power the Arduino and
will drain the batteries.
EGR 120 – Introduction to Engineering
17
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
18
The Arduino Programming Environment
• The Arduino software (Arduino 1.01 or later) is available on lab computers and can
also be downloaded from http://arduino.cc
• The software requires no installation and can even be launched from a flash drive.
• Open Arduino in the Arduino-1.0.1 folder as indicated below
• The file opened is referred to as a “sketch” and will be automatically named using
the date. You can rename it if you wish. The file below has the name
sketch_jul06a.ino
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
19
Notes:
The Arduino Programming Environment
• Verify is used to compile your program
The Arduino software is based on C/C++.
(or sketch). (It checks for errors).
Note that the instructions are case-sensitive.
C++ is not line-oriented, so a semicolon (;) is needed • Upload is used to send the program
(sketch) to the Arduino-BOT via the
to indicated the end of an instruction.
USB cable.
• Arduino programs have two main parts:
1. setup – a function to initialize items
or to perform operations one time.
2. loop – a function with commands
that will be repeated indefinitely
• Serial.begin(baud rate) is used to
establish serial communications
between the Arduino-BOT and the
computer. Data is transmitted at 9600
baud (bits/second). Note that Serial
uses digital pins 0 and 1 so they cannot
be used for other inputs/outputs.
• Serial.print(text, values, or variables)
is display information from the
Arduino-BOT on the display window.
• Select Serial Monitor to open a
window to view printed messages from
the Arduino-BOT.
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
20
More on functions
Functions in C/C++ have a particular structure as indicated below for the setup
function.
• Functions execute a series of statements contained within curly braces.
• Functions begin with a particular form:
return_type function_name (parameter_list)
In the case above, the return_type is void (no output), the function_name is
setup, and the parameter_list (typically inputs) is empty.
• Both statements in the body of the setup function are calls to functions in
Arduino’s Serial library. We will introduce more useful functions as we
continue in this course.
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
Want more information?
For more info on the Arduino programming
language, select Help – Reference.
21
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
Online tutorials are available from Parallax at http://learn.parallax.com/ShieldRobot
Tutorial Topics
22
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
23
Example – Printing a message repeatedly
The previous program was modified. The Serial.print(“Hello!”) instruction was moved
into the loop function. Now it will be written to the output screen repeatedly.
Notes:
•
•
•
•
The following instruction causes
a delay of 1000 ms or 1 second.
delay(1000);
Hello! is now printed to the
display window once per second.
If we want each Hello! statement
printed on a new line, we can
used the following command:
Serial.println(“Hello!”)
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
Controlling Lights (LEDs) with the Arduino-BOT
In our first lab we will control lights (LEDs) using the Arduino. First we need to
introduce two new components:
1) Resistors
2) Light-emitting diodes (LEDs)
24
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
25
Resistor - A resistor is a component that resists the flow of electricity. This flow of
electricity is called current. Resistance is measured in ohms, and the sign for the ohm is
the Greek letter omega (Ω). There may be a fourth stripe that indicates the resistor’s
tolerance. Tolerance is measured in percent, and it tells how far off the part’s true
resistance might be from the labeled resistance. The fourth stripe could be gold (5%),
silver (10%) or no stripe (20%).
Example: R = 470 
What is the value of R for a resistor with the colors brown-black-orange-silver?
R = ________________
Color
Value
Black
0
Brown
1
Red
2
Orange
3
Yellow
4
Green
5
Blue
6
Violet
7
Gray
8
White
9
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
Resistor Color Code Calculator – A quick online search will yield many resistor color code
calculators. An example is shown below. The instructor for this course will typically let you
know what value (and color) resistors to use, but it is a good idea to check the values as well.
http://samengstrom.com/24614782/en/read/4_Band_Resistor_Color_Codes
26
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
27
LEDs – A simple device that we can control with the BASIC Stamp is an LED
or light-emitting diode. LED’s are simple lights easily controlled using the 5V
output from the Arduino. You commonly find LED’s on all sorts of electronic
equipment. You computer monitor and keyboard probably uses small LED’s
that light to let you know when the power is on.
Long lead (+)
Flat side (-)
Polarity – An LED has a positive
terminal (anode) and a negative
terminal (cathode) so you must be
careful to place it in a circuit in
the correct direction (correct
polarity). You can tell which
terminal is which in two ways:
• The lead for the anode (+) is
typically longer.
• There is a flat side to the LED
by the cathode (-).
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
28
LED Brightness – The brightness of an LED is related to the amount of current
passing through it (or the number of electrons passing though it). A device
called a resistor is generally placed in series with the LED to limit the amount
of current. When 5V is used to light the LED, resistor values from 200 ohms to
470 ohms are commonly used (the LED is brighter with 200 ohms than with
470 ohms). Using no resistor will result in too much current and will often
destroy the LED. The resistor is often referred to as a current-limiting
resistor.
Current limiting resistor
(direction doesn’t matter)
LED anode (+)
connected to
positive (+) side
of battery
LED cathode (-)
connected to
negative (–) side
of battery
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
29
Breadboard – The Arduino-BOT comes with a convenient circuit board called
a prototype board or a breadboard where circuits can be easily connected to the
Arduino.
In addition to giving a handy place
to build circuits, the breadboard
gives ready access to:
5V, 3.3V, and Vin
These connections are like the
breadboard positive end of a battery (the
negative end is at GND). Vin is the
battery voltage when using batteries
(perhaps 6-7V).
Digital Inputs/Outputs 0-14
Digital values should be 0V (LOW)
or 5V (HIGH).
Analog Inputs 0-5
Analog input values can range from
0V to 5V
Ground (GND)
This is like the negative (-) terminal
of a battery. All voltages (3.3V, 5V,
etc.) share a common ground.
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
Controlling two LEDs with the Arduino – Suppose that we want to use
digital outputs 12 and 13 from the Arduino to turn on and off two LEDs. We
could wire the circuits on the breadboard as shown below. Be sure that the
cathodes (-) of each LED are connected to GND and not the anodes.
What value resistors are used
here? (red-red-brown-gold)
R = _____________
30
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
31
Sample program – The program below will blink the LED connected to digital pin 13
once per second.
Notes:
• pinMode( ) can be used to specify whether a pin
will be an INPUT or an OUTPUT
• Recall that C++ is case-sensitive!
• digitalWrite( ) can be used to set an output HIGH
(5V) or LOW (0V).
• How could the program be modified to blink both
LEDs at the same time? Alternating?
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
32
Variables and loops – Suppose that we wanted to blink an LED a certain
number of times? To do this we need to see how to declare variables in C++
and to form loops.
Declaring variables in C++:
We will consider three types of variables:
int – used to declare integer variables (ranging from -32768 to 32767)
float – used to declare floating point variables (values with a decimal point)
char – used to declare character variables (single symbols within single quotes)
Examples:
int a,b,c;
a = 25;
int d = -21;
char c = ‘m’;
float g =-9.81
// declare integer variables
// assign value to integer variable
// declare and assign value
// declare character variable and assign value
// declare floating point variable and assign value
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
Using variables with the Arduino
33
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
34
for loop in C++:
Several types of looping structures can be used in C++. We will only consider the for
loop. The for loop is especially useful when you want to execute instructions in the
loop a specific number of times. See the example below.
Form: for (initialization; condition; increment)
{
// body of loop
}
Note:
C++ sometimes uses shortcut
operators to increment, decrement, or
change variables in loops.
i++
means add one to i
j-means to subtract one from j
k+=2 means add 2 to k
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
Blinking an LED a specific number of times
The program below can be used to blink an LED (on digital pin 12) 10 times.
35
Arduino-BOT Lecture #1
EGR 120 – Introduction to Engineering
36
Comments
Comments are an important part to computer programs.
Comments allow you to explain your code to someone reading or using the code.
// is used to indicated a comment in C++
Tips for good comments:
• Do not explain how C++ works. Explain how you are using the code.
Example:
digitalWrite(12, HIGH);
// make digital pin 12 HIGH
(Weak comment. Why are you making it HIGH?)
digitalWrite(12, HIGH);
// turn on LED (pin 12)
(Good comment)
• Explain similar instructions only once.
Example:
digitalWrite(12, HIGH); // turn on LED (pin 12)
delay(500);
// wait 500 ms = 0.5 s
digitalWrite(12, LOW); // turn off LED (pin 12)
delay(500);
// wait 500 ms = 0.5 s (unnecessary comment - repeated)