SSCCIP Final Presentation (The Spartans)
-
Upload
derek-j-russell -
Category
Documents
-
view
39 -
download
2
Transcript of SSCCIP Final Presentation (The Spartans)
S.P.A.R.T.A.N.Space Planning and Research to Analyze Nuances
S.P.A.R.T.A.N. Team Members
Cody Del Prato
Ryan Yedinak
Hesham Assabahi
Derek J. Russell
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
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
Primary Design
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)
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 4x<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
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)
<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.
“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)
<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
“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)
<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.
<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.
“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()
<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
<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
ResultsSuccesses
● 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