have it your way arduino activity.docx
TRANSCRIPT
-
7/30/2019 Have It Your Way Arduino Activity.docx
1/12
Have-It-Your-Way Catapult
Each team will have to construct a catapult with the objective of shooting as many
balls as possible into a bucket in 1 minute, which will be located 10 feet away. Each
team will have access to:
-1 laptop running Windows
-1 Arduino Uno microcontroller
-3 servos
-3 servo holders
-1 ultrasonic sensor
-1 3 PVC pipe
-wire clothes hangers
-plywood
-hot-glue gun and hot glue
-nuts and bolts
-USB-B cable
-jumper cables
-breadboards
Please do not worry if you are not sure what some resources do/mean. We will
explain how to use each one of them. But before we do that, we will explain some
concepts that will be useful.
What is coding?
Coding is the process of communicating with the computer to tell it what to do.
There are many computer languages used to solve problems across many STEM
fields. For this activity, you will be using Processing, which is a language designed
for beginners. Your code will tell the catapult when to release and when to reload.
For this project, the computer that we will be talking to is the Arduino Uno
microcontroller.
Processing Language: Basics
We will explore two very useful statements: if and while. These statements will
allow you to implement almost any logic you want on your code.
If Statement
-
7/30/2019 Have It Your Way Arduino Activity.docx
2/12
The if statement allows the program to make a decision about which code to
execute. If the expression being evaluated is true, then the statements enclosed
within the block are executed. Otherwise, the statements are not executed.
int i=0;
if (i==1){
i=2;
}
if (i==0){
i=3;
}
In the code snippet above, the first if statement will not be executed because the
statement i==1 is not true. On the other hand, the second if statement will be
executed because the statement i==0 is true. Therefore, the value of i at the end of
this program will be 3.
While Statement
The while statement allows you to execute a series of statements continuously
while the expression is true. The series of statements are delimited with curly
brackets {}, and the expression being evaluated is delimited with parenthesis. The
expression must be updated during the repetitions or the program will never end.
This is known as an infinite loop.
int i = 0;
while (i < 10) {
i = i + 1;
}
In the code snippet above, the while statement will run until the expression i
-
7/30/2019 Have It Your Way Arduino Activity.docx
3/12
Arduino Microcontroller
The Arduino Uno microcontroller will be the brain of your project. The Uno is
powered through a USB cable when the cable is connected to a computer. The
UNO will allow you to communicate with the servos and the ultrasonic sensor
(more on this on the following sections).
Your team will be able to upload code to it using the Arduino Software
environment, which is already installed in the laptop provided. To open the
Arduino Software environment, click the windows icon and type Arduino in the
search box. The Arduino Uno should be connected to the laptop via USB as
illustrated in the picture below.
-
7/30/2019 Have It Your Way Arduino Activity.docx
4/12
We will start with a simple program that makes an LED (Light Emitting Diode)
flash. This program will help you understand better how the Arduino Uno and the
Processing language works.
First Arduino Program: Flashing LED
// 1. the LED is connected to the Arduino board through pin 13
int led = 13 // 2. initializing a variable
// 3. the setup routine runs once when you press reset:
void setup() {
-
7/30/2019 Have It Your Way Arduino Activity.docx
5/12
// 4. initialize the digital pin as an output
pinMode(led, OUTPUT)
}
// 5. the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH) // 6. turn the LED on (HIGH is the voltage level)delay(1000) // 7. wait for a second
digitalWrite(led, LOW) // 8. turn the LED off by making the voltage LOW
delay(1000) // wait for a second
}
The code snippet above makes an LED flash. We will explain each segment of the
code individually.
1. Two forward slashes (//) indicate the computer that the following text is
meant for developers to read and it should not be interpreted by the
computer. This is commonly known as a comment.2. The word int indicates the computer that you need space in memory to
store an integer. The word led is the name of the variable, i.e. the name of
the space in memory given by the computer. You would be able to use this
name to get whats inside the space in memory associated with this variable.
In this case, the variable led will contain the integer 13 in it.
3. A function is a set of instructions that performs a specific task. In Processing
as well as in many other languages, parenthesis are used to indicate the
start of a function, e.g. setup(). The function setup() is used to initialize
(define a value) any variables at the beginning of a program. This functionis executed automatically immediately after the Arduino is powered or has
been programmed. The word void is reserved to indicate that the function
will not return any kind of output.
4. Brackets ({}) are used to indicate the beginning and ending of a function. In
this example, we can see how the line pinMode(led, OUTPUT) is enclosed by the
brackets of the function setup(). The line pinMode(led, OUTPUT) is calling the
function pinMode() with the parameters (inputs given to a function) led and
HIGH. The variable led was previously explained in step 2 and OUTPUT is a
constant defined in the Arduino libraries. This function sets the pin 13
connected to the LED into output mode so we can turn it on/off.
5. The function loop() will be called automatically after the setup() function is
called. This function will be called repeatedly, hence the name.
6. The function digitalWrite() changes of a pin to HIGH or LOW. In this case, we
are changing the state of pin 13 to HIGH. This allows us to turn the LED on.
7. The function delay(1000) tells the computer to wait for 1,000 milliseconds.
-
7/30/2019 Have It Your Way Arduino Activity.docx
6/12
8. This line tell the Arduino to turn the LED off.
Now, we will explore the functionality of two hardware components that will allow
us to create a catapult.
Servo
A Servo is a small device that incorporates a three wire DC motor, a gear train and
an integrated circuit. Servos are commonly used in radio control vehicles, and, in
this case, they will allow us to move the catapult.
How to Power a Servo
-
7/30/2019 Have It Your Way Arduino Activity.docx
7/12
There are three wires needed to control a servo motor: ground( black cable),
positive (red cable) and data (yellow cable). To connect the Arduino and the servo
motor, we need a bread board. Bread boards facilitate the creation of prototypes
and allows fast experimentation with circuit design. Holes in the breadboard are
separated vertically and connected horizontally. Connect the servo to the Arduino
by inserting the servos black wire to any of the Arduinos GND (ground) pins;
connect the red wire to the Arduino +5V pin. Then connect the yellow cable to pin
2. The picture below shows the connection.
Code Snippet
#include // 1. imports the Arduino library called Servo.h
Servo myServo // 2. creates a variable to represent the servo
void setup() {
myServo.attach(2) // 3. attaches the servo to pin 2
}
void loop() {
myServo.write(90) // 4. rotates the servo to the original position
delay(1000)
myServo.write(135) // rotates the servo 45 degrees
-
7/30/2019 Have It Your Way Arduino Activity.docx
8/12
delay(1000)
}
The code snippet above rotates the servo 45 degrees from the original position
and then rotates back to the original position.
1. Libraries are collections of functions that let us extend the basic
functionality of a platform. The pound sign (#) followed by the word
include allows us to import Arduino libraries.
2. We will be using the Servo library to interface with our motors. For each
servo, we need to declare an instance of a Servo. This instance will
represent the physical servo in our code. By indicating where the servo is
connected to (step 3), the Arduino will be able to talk to the servo and
command it to execute commands.
3. The function attach() will indicates the pin number that is connected to the
servo. In this case, the pin number is 2.
4. The function write() tells the servo in which position it should be. The
rotation is indicated in degrees.
Ultrasonic Sensor
Ultrasonic sensors generate high frequency sound waves and evaluate the echo,
which is received back by the sensor. This sensor will allows us to determine theproximity of a specific object.
-
7/30/2019 Have It Your Way Arduino Activity.docx
9/12
How to Power an Ultrasonic Sensor
To power an ultrasonic sensor, we will need a breadboard. Insert the Ultrasonic
Sensor in the middle of breadboard as indicated in the picture below.
Connect the hole next to the sensors pin labeled as GND to one of the Arduinos
GND pins using jumper cables. Do the same with sensors +5v pin. The Ultrasonic
sensor will receive power from the Arduino. The last leg of the sensor is marked
with the abbreviation SIG (for signal). This pin will be connected to the Arduino
digital pin 7. Please see the picture below for more details.
-
7/30/2019 Have It Your Way Arduino Activity.docx
10/12
Code Snippet
int pingPin = 7
void setup() {
// 1. initialize serial communication:
Serial.begin(9600)
}
long microsecondsToInches(long microseconds)
{
// 2. converts microseconds to inches
return microseconds / 74 / 2
}
long microsecondsToCentimeters(long microseconds)
{
// converts microseconds to centimeters
return microseconds / 29 / 2
}
void loop()
{
// 3 . ultrasonic sensor is triggered by a HIGH pulse of 2 or more microseconds
// give a short LOW pulse beforehand to ensure a clean HIGH pulse:
pinMode(pingPin, OUTPUT)
digitalWrite(pingPin, LOW)
delayMicroseconds(2)
digitalWrite(pingPin, HIGH)
delayMicroseconds(5)
-
7/30/2019 Have It Your Way Arduino Activity.docx
11/12
digitalWrite(pingPin, LOW)
// The same pin is used to read the signal from the ultrasonic sensor: a HIGH
// pulse whose duration is the time (in microseconds) from the sending
// of the ping to the reception of its echo off of an object.
pinMode(pingPin, INPUT)
duration = pulseIn(pingPin, HIGH)
// 4. convert the time into a distance
inches = microsecondsToInches(duration)
cm = microsecondsToCentimeters(duration)
// 5. print the information in the console
Serial.print(inches)
Serial.print("in, ")
Serial.print(cm)
Serial.print("cm")
Serial.println()
delay(100)}
This sketch reads a PING))) ultrasonic range finder and returns the distance to the
closest object in range. To do this, it sends a pulse to the sensor to initiate a
reading, then listens for a pulse to return. The length of the returning pulse is
proportional to the distance of the object from the sensor.
1. This line initializes serial communication at 9,600 bits per second. The baud
rate (bits per second) allows two devices to communicate. If the two deviceshad different baud rates, it will be like two people talking in different
languages.
2. The functions microsecondsToInches() and microsecondsToCentimeters()
allows us to interpret the information provided by the Ultrasonic sensor.
There are 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
second). This gives the distance travelled by the ping, outbound and return,
so we divide by 2 to get the distance of the obstacle.
3. This code segment is used to determine how far away an object is. You are
free to just copy and paste this segment. For more information, read the
comments.
4. The functions microsecondsToInches() and microsecondsToCentimeters()
are called and their ouputs are stored in inches and cm respectively.
5. Serial.print() prints information to the console of the Arduino Development
Environment.
-
7/30/2019 Have It Your Way Arduino Activity.docx
12/12
Building a Catapult
This section will give you pointers for how to build your catapult. You do not need
to follow these pointers.
You are allowed to load the balls manually, but do you think there is faster
way to do this?
How can you tell the Arduino whether there is a ball ready to be fired?
How can you load the balls in a way that does not mess with the aiming?