8. Goals of the Project
● Design and build a rover to collect data samples and traverse the terrain
○ Collect and communicate data
■ Detect large changes in CO2
■ Detect hot and cold temperature zones
■ Detect a magnetic field
■ Read RFID tags
■ Communicate data to a computer and graph it
○ Traverse ramps and avoid boulders in the playing field
○ Pick up data samples with a robotic arm and return them to the docking area
9. List of Tools and Parts:
Available:
Arduino Uno and Mega
Acrylic
Supplies Around Program
Bought:
Servos
Rock Crawler
Pi Camera
Battery for Pi
Servo Shield
Electromagnet
11. Secondary Design
● Purchased a Rock Crawler chassis equipped with motors for movement
● Mounted an acrylic body on top of chassis
○ Microcontrollers and breadboards from which we ran our sensors and
servos located inside
● Attached a robotic arm made from acrylic on top of the body
○ Run components on Arduino Uno
○ Implemented two servos to move the arm
○ Attached an electromagnet enclosed in acrylic to retrieve data samples
● Mounted sensors on the front, back, and bottom of the rover to gather data
○ Run sensors from an Arduino Mega (originally Raspberry Pi)
12.
13. Control System
● Turnigy 9-Channel Transmitter and Receiver used to control rover movements and arm components
○ Channel 1: Rover movement forward and backward
○ Channel 2: Rover movement left and right
○ Channel 4: Arm base movement left and right (20∘
each way)
○ Channel 5: Arm movement up and down (0∘
/45∘
/90∘
)
○ Channel 6: Electromagnet switch (On/Off)
● Motors for rover movement attached directly into channels 1 and 2 of the receiver without adjustment
● Functions for channels 4-6 adjusted in the Arduino code based on the values transmitted by the controller
Channel 4
x<1100 70∘
(Full Left)
1100 ≤ x < 1200 75∘
1200 ≤ x < 1300 80∘
1300 ≤ x < 1400 85∘
1400 ≤ x < 1500 90∘
(Center)
1500 ≤ x < 1600 95∘
1600 ≤ x < 1700 100∘
1700 ≤ x < 1800 105∘
1800 ≤ x 110∘
(Full Right)
Channel 5 (Auxiliary-Pitch)
N (0%) x ≤ 1100 0∘
1 (50%) 1400 ≤ x < 1500 45∘
2 (100%) 1800 ≤ x 90∘
Channel 6
x < 1100 Off
x > 1800 On
14. Guts of the Rover
● All sensors run on an Arduino Mega powered by a 9V battery
○ RFID-RC522 RFID Reader [Mounted on Bottom of Rover]
○ TMP36 Temperature Sensor [Front of Rover Near Ground]
○ K-30 10% CO2
Sensor (SE-0118) [Back of Rover]
○ Triple-Axis Magnetometer (HMC5883L) [Front of Rover Near Ground]
○ TCS230 Color Sensor with RGB LED [Mounted on Bottom of Rover]
● Servo motors and electromagnet for robotic arm run on an Arduino Uno powered by a 9V battery
○ Two 360∘
servo motors for arm movement
■ One servo moves arm’s base left and right
■ One servo moves arm up and down
○ Electromagnet attached to end of arm to pick up data samples (containing magnets)
● Camera run from Raspberry Pi mounted on front of rover to view data samples
● Xbee running on Arduino Mega to transfer data to computer through X-CTU
○ Temperature (∘
C, ∘
F, K), Magnetic Field (uT in x,y,z directions), Color Intensities, RFID Info, CO2
data (ppm)
15. <CODE-->Movement>
● Attempt_1.0:
○ Four Servos at the top to rotate the degree of the base.
○ Four Servos at the bottom to move the rover back and straight.
○ ISSUE → 3D printer did NOT work.
● Attempt_2.0:
○ An RC car was bought without a controller.
○ A Turnigy 9x was supplied by SSCCIP.
○ We programed the 9x to work for the RC car.
16. “Design_Movement_1.0” (Top-Down, High-Level)
● Initializations and Libraries :
○ #include : <Servo.h>
○ Objects: 8 control servo objects, 4 variables for the receiving channels, a couple of dummy
variables.
● Set Up:
○ Attach the 8 servos.
○ Set the receiving channels to their pins.
● Main Loop( functions ):
○ void SetDegree(void)
○ void MoveTheBase(void)
17. <Cont.>
void SetDegree()
- Receive values from the channel
- Test if the value was received last call
- .If true : return
- If the value is low: move the servos to
0°
- If the value is in the middle: move the
servos to 45°
- If the value is high: move the servos to
90°
- Save the value for next call.
void MoveTheBase()
- Receive values from the channel
- If the value is low: move the servos
backwards
- If the value is in the middle: stop
moving the servos
- If the value is high: move the servos
forward
18. “Design_Movemnet_2.0” (Top-Down, High-Level)
● Initializations and Libraries :
○ #include:
■ <varSpeedServo.h> // Servo Library that allows you to move it in different speeds.
○ Objects:
■ 2 servo object
■ 3 variables for the pins for the receiver channels, and some dummy variables.
■ One Variable for the electromagnet
● Set Up:
○ Connect the channels to their pins.
○ Set up the servos and the electromagnet to their pins
● Main Loop( functions )
○ void moveArm(void)
○ Void moveBase(void)
○ void controlElectro(void)
19. <Cont.>
void MoveArm()
- Receive values from the channel
- Test if the value was received last call
- .If true : return
- If the value is low: move the servos to 0°
- If the value is in the middle: move the
servos to 45°
- If the value is high: move the servos to 90°
- Save the value for next call.
void MoveBase()
- Receive values from the channel
- Move the base accordingly to values of
that received.
void controlElectro()
- If channel is on : turn on the
electromagnet
- If the channel is off: turn off the
electromagnet.
20. <CODE-->Sensors>
● Attempt_1.0→( Raspberry Pi 3) :
○ Pros : use a Raspberry Pi 3 for sensing, storing, graphing, and sending data via
Wifi. Great with power.
○ Cons : - It’s brand new, therefore most libraries are not comparable.
- It kept failing and lost all the code and the data.
● Attempt_2.0→( Arduino a.k.a Emergency Plan)
○ Pros: - All the libraries are comparable. - It’s robust.
○ Used Xbee to transfer data wirelessly instead of wifi.
○ Cons: - Power supply.
21. “Design_Senors_2.0” (Top-Down, High-Level)
● Initializations and Libraries :
○ #include :
■ <Wire.h> //
■ <Adafruit_Sensor.h> // Magnetometer
■ <Adafruit_HMC553_U.h>//Magnetometer
■ <kSeries.h> // CO2
■ <MFRC522.h> // RFID
■ <SPI.h> // RFID
○ Objects:
■ Create object sensors when needed
■ Variables to hold pin numbers
■ Dummy variables to hold data coming
from the sensors.
● Set Up:
○ Set up and turn on the Magnetometer
○ Init SPI bus
○ Display sensor details
○ Set up the RFID
○ Set up and turn on the color sensor
● Main Loop( functions ):
○ void TempSensor(void)
○ void magSensor(void)
○ bool RFID(void)
■ If true : Flash a light
○ void colorSensor()
22. <Cont.>
void tempSensor()
- Get voltage from the sensor pin
- Do the calculation to convert the voltage
to celsius, fahrenheit, and kelvin
- Send the info to the computer
- If the temperature is higher than the last
call, save it as the new high
- If the temperature is lower than the last
call, save the as the new low
void magSensor()
- Get the voltages from the sensor
- Do the calculations and the conversations
- Send the info to the computer
void CO2_Sensor()
- Read the Sensor
- Send the info to the computer
- If the CO2 value is higher than the last
call, save it as the new high
- If the CO2 is lower than the last call, save
the as the new low
23. <Cont.>
void ColorSensor()
- Read the red, green, and blue intensities
- If red < green && green >= blue && red
is low
- Color is white
- Turn LED to white
- If blue < red && blue < green
- Color is blue
- Turn on LED to blue
- If red < blue && red < green && green <
red < green - 20
- Color is red
- Turn LED on to red
- If red < green && green < blue
- Color is yellow
- Turn LED on yellow
- Turn off LED after delaying 500 miliseconds
bool RFID()
- If a card was read
- Send the info of the card to the
computer
- Return true
- Else return false
24. Results
Successes
● Sensors were able to retrieve data
○ Temperature sensor detected hot and cold
zones
○ CO2
sensor detected large amount of CO2
near
dry ice
○ Magnetometer detected large magnetic field
○ Color sensor detected colored areas (signified
by RGB LED changing color to match colored
zone)
○ RFID reader read all four tags
● Rover able to traverse all ramps
● Data transferred to computer through XBee
communication
Issues
● Electromagnet did not work for most of the
competition
○ Power issues
○ Not able to retrieve data samples
● RFID sensor had difficulty reading
● Temperature Sensor was intermittent
● Needed to switch out 9V batteries powering the
Arduinos often
● Rover started to lose power towards the end
○ Unable to drive in reverse