Advanced View of Atmega Microcontroller Projects List - ATMega32 AVR.pdf
CET4811_FINAL_LAB
1. Final Lab: Gripperbot
1
NEW YORK CITY COLLEGE OF TECHNOLOGY
Final Project:Gripperbot
Group Members: Clara Irizarry, Anton Scott
Class: CET 4811 – Computer Controlled System Design II
Semester: Fall 2014
Professor: Prof. Zia
Date: 11/30/2014
2. Final Lab: Gripperbot
2
Table of Contents
I. Project Summary………………………….pg. 3
II. Project Management Plan………………...pg. 4
III. Mechanical Design……………...………..pgs. 5-6
IV. Electrical Design………………………....pgs. 7-8
V. Software Design……………………...…..pgs. 8-10
VI. Appendix………………………...………pgs. 11-14
VII. References…………………………...…..pgs. 15-18
3. Final Lab: Gripperbot
3
Project Summary
Forour project, we decided to explore the relationship between Arduino and
robotics. We decided to create a robotarm that can grab objects and move via
wireless communication with remote inputs, which will also be programmed via
Arduino. This project is known as a Gripperbot. The Gripperbotis a rolling robotic
arm that one can controlwith arm-mounted Arduinos equipped with Wii
Nunchuks, and a wireless card for communicating with the robot. The roller that
the arm is connected to packs an Arduino also, along with a Bricktronics Shield
and Bricktronics Motor Controller.
The conceptof this project is that there are a variety of motors working
together to create motion. There are two on the base of the robot, which help with
moving the arm around, and then there are 4 on the turret, which operate the
spinner, the elbow, the wrist and the gripper. The bracers that are worn translate
motion and button inputs into speeds for specific motors. This communication is
done wirelessly, using XBee Wireless Adapters. All of the XBee nodes broadcast
to each other. The base and the turret receive all messages, and only act on the
ones intended for motors that they control. The turret uses the Bricktronics Motor
Controller, which is pre-programmed with a set of commands for up to 5 motors.
The base has an Arduino, a XBee Adapter with shield, and a Bricktronics Shield,
which host the left and right motors of the base, controlling the wheels. All of this
is powered up by 6-AA battery packs.
The arm portion of the robothas a Brocktronics Motor Board equipped with
a XBee. Power Functions motors are plugged into the Motor Board through Molex
connectors and the Mindstorms motors are plugged in via Mindstorms wires. All of
this runs on 6-AA batteries.
5. Final Lab: Gripperbot
5
Mechanical Design
-Lego NXT Servo Motor
NXT motor
This motor is specific to the NXT set (2006).
Includes a rotation encoder, returning to the NXT
the position of the shaft with 1° resolution. Because
of the special connector of this motor (non-standard
phone plug type), a cable adapter is required to drive
this motor with regular 9V sources. Not
recommended for use with a RCX which can't
deliver the high current that this motor can consume.
Slow rotation speed, minimizing the need of external
gear train.
NXT
Torque
Rotation
speed
Current
Mechanical
power
Electrical
power
Efficiency
4.5 V 16.7 N.cm 33 rpm 0.6 A 0.58 W 2.7 W 21.4 %
7 V 16.7 N.cm 82 rpm 0.55 A 1.44 W 3.85 W 37.3 %
9 V 16.7 N.cm 117 rpm 0.55 A 2.03 W 4.95 W 41 %
12 V 16.7 N.cm 177 rpm 0.58 A 3.10 W 6.96 W 44.5 %
10. Final Lab: Gripperbot
10
Software Design
To allow the Gripperbotto respond to mechanical movements, we had to use a
software program that will use programming language to synchronize into the
Arduino microcontroller board to respond to certain coding. The Arduino Software
integrated development environment (IDE) is what we need to create three codes
that will achieve this.
-The Base of the Gripperbot Source Code and Flowcharts
#include <Wire.h>
#include <Bricktronics.h>
Bricktronics brick = Bricktronics();
Motor r = Motor(&brick, 1);
Motor l = Motor(&brick, 2);
void setup()
{
Serial.begin(9600);
brick.begin();
r.begin();
l.begin();
}
void process_incoming_command(char cmd, char arg0)
{
int speed = 0;
switch (cmd)
{
case '6':
case 6:
speed = arg0*2;
l.set_speed(speed);
11. Final Lab: Gripperbot
11
break;
case '7':
case 7:
speed = arg0*2;
r.set_speed(speed);
break;
default:
break;
}
}
void loop() {
while (Serial.available() < 3)
{
//Do nothing while we wait for a full command to come in.
}
char start = Serial.read();
if (start != '*')
{
return;
}
char cmd = Serial.read();
char arg0 = Serial.read();
process_incoming_command(cmd, arg0);
}