CSC 297 Robot Construction: Assignments
Assignments may be posted here after the day's class,
along with the due date.
Assignments are due at the beginning of class on the due date.
In general, no credit will be allowed for late assignments.
Turn in what you have for partial credit.
There may be assignments given in class that are not listed here.
Since class attendance is a course requirement, this should not
pose a problem.
For any written assignment, I expect a well organized
report-style writeup that describes in detail what you did, why you did it,
and what the results were. This includes negative results.
Scratch work and computer code, if requested should be appended to the main
writeup with appropriate pointers.
Attribute ANY work that is not your own, including software off the
web, text cribbed from other sources, etc.
You are encouraged to look for resources, but not to the extent that
it negates the point of the assignment.
This is sometimes a fine line, especially in programming assignments.
I will try to be specific as to what I expect you to write
as a minimum. If in doubt, ask.
In any case, use of UN-attributed material is plagiarism, and a violation
of the University's academic honesty policy.
Plagiarism is taken VERY seriously in this department. DON'T DO IT.
If in doubt, reference.
Specifically, text taken from web pages, even a single sentence,
is plagiarism. Text paraphrased from web pages is plagiarism.
Sentences from web pages cut up into phrases and re-arranged are
If you want to avoid possible problems, my suggestion is
never write while looking at text. Generate everything from your
own understanding of the subject.
Use of unattributed text in any written assignment will result in
zero credit for that assignment.
Text that comes from an outside source should appear in quotes.
Too much use of quoted material will tend to reduce your credit
for an assignment, as the point of written assignments is to
convey your understanding of a subject.
In general, you should consider written assignments for this course
to be public documents - just as published research papers are public
documents. As such I may place them in a forum where they may be
scrutinized by your colleagues for accuracy, clarity, and for
You are encouraged to discuss general techniques and specific approaches
to general problems with your fellow students, or anyone else.
Unless specifically directed in an assignment, however, you are not to
share code you have written, or your written solutions to specific
Thursday, January 19, 2017
- Class activity: Introductory material:
- Class activity: Initial questions for discussion:
- 1. What is a robot?
- 2. Why is a robot?
- 3. Robot revolution. Should we worry?
- Class activity: The Three Laws of Robotics
By hook or crook, get hold of a copy of "The Cyberiad" by Stanislaw Lem,
English translation by Michael Kandel, and read the story "How the world was
Saved". The book is out of print, but you can get it for the Kindle, and I
expect there exist "unofficial" versions online, though I think it is not
legal for me to point at any of them.
Due Tuesday, January 19, 2016.
prof's constructor persona on facebook (profrc nelson).
Join the "297 constructors" group, which will serve as a discussion forum.
You are welcome to "friend" profrc.
You might want to create a yahoo or gmail email account and create a special
FaceBook persona especially for the purposes of this class, rather than use
a FB account you care about.
Due Tuesday, January 19, 2016.
Find five cool robots that have actually been made. Describe them briefly
in a writeup, and provide pointers to full descriptions or videos.
If the full descriptions or videos are online, have your facebook constructor
persona share them.
Due Tuesday, January 24, 2017.
Laboratory Exercise 1
- Assignment: Lab 1. Meet with your team and disassemble your consumer
robotic device as completely as possible without breaking, cutting or
desoldering components. Try to figure out how each mechanical component
contributes to the functionality of the device (i.e. figure out how it
works mechanically). Take one or more pictures of the disassembled
components and post to the class facebook page. Count the number of
separate components you have (including individual screws etc.)
Then reassemble the device
making sure that it operates at least as well as it did originally.
- Individually, prepare a writeup of the experience.
(what was hard, what was surprising, what you learned, etc.)
Turn in on Tuesday (Jan 31, 2017),
Tuesday, January 24, 2017.
- Class activity: Quiz (Letter N)
- Assignment: Go to profrc's facebook page, and the 297 constructors
group, and watch all the robot videos posted by the class. If it's
too boring, feel free to terminate a video after 30 seconds, but take
a look at them all. If you have not shared your videos yet, share them
with the 297 constructors group.
- Assignment: Read "Trurl's Machine" in "The Cyberiad".
Due Thursday, January 26.
- Assignment: Read the "Bones" and "Scaling" pages in the "Robot Manual".
Learn something about structural materials.
Due Thursday, January 26.
- Assignment: Find a useful object made of metal. Determine what
metal it is made of. Estimate the (minimum) applied blunt
force that would damage your object so that it would no longer
function for its intended purpose (e.g. if it were squeezed
between two plates or bent over a bar). Use of a sharp edge or
cutting tool is not included (that is a separate issue).
Justify your estimate in your writeup.
Due Thursday, January 26.
Thursday, January 26, 2017.
- Class activity: Mystery
- Class activity: Quiz (Trurl's Machine)
- Class activity: Discussion of materials and scaling mechanics.
- Class activity: Testing object strength.
- Assignment: Read the story "How Trurl and Klapaucias Created a
Demon of the Second Kind to Defeat the Pirate Pugg" in "The Cyberiad".
- Assignment: Read the "Assembly" segment in the "Robot Manual"
Laboratory Exercise 2
- Assignment: Lab 2. You will make and assemble a small metal "T" part,
exercising layout, sawing, filing, drilling and tapping skills.
- Individually, turn in a short writeup describing difficulties
encountered and ways around them.
Due Tuesday, Feb 7, 2017.
Tuesday, January 31, 2017.
- Class activity: Mystery object
- Class activity: Discussion of assembly methods
- Assignment: Read the story
"The First Sally, or Trurl's Electronic Bard" in "The
- Assignment: Read the "Articulation etc." section of the "Robot Manual"
Thursday, Feb 2, 2017.
- Class activity: Mystery
- Class activity: Daily quiz
- Class activity: Discussion of joints, wheels, bearings, gears, etc.
- Assignment: Read the "Nerves" and "Diodes etc." sections of the
Laboratory Exercise 3
- Assignment: Find how to implement a flashing LED using basic
components (transistors, resistors, capacitors, etc.
but not, e.g., op-amps, 555 timer chips, or Arduinos).
Wire it up on a breadboard using components in the robot lab,
You may work in teams of two if you wish.
Try not to burn out LEDs -- i.e. don't hook them to power without
an appropriate current-limiting resistor in series.
Individual writeups as usual.
Due Tuesday, Feb 14, 2017.
Tuesday, Feb 7, 2017.
- Class activity: Discussion of basic electronic components.
Thursday, Feb 9, 2017.
- Class activity: Discussion of electronic components cont.
- Assignment: Read the Robot Manual section on "Brains", especially the
material on the Arduino.
- Assignment: Go to the Arduino home page and learn what you can about the
Arduino boards and their use.
Download the Arduino IDE onto your computer and explore the
interface. Bring your computer to the next lab. (If you do not have
a portable laptop, send me email).
- Assignment: If you have time, also read the "Muscles" section of the
"Robot Manual" (motors and other actuators).
Week of Feb 13-17. Prof sick.
Laboratory Exercise 4
- Assignment: Lab 4. You will implement some simple control
systems involving LEDs and switches using an Arduino Uno.
- 1. Bring up the Arduino environment, plug in your Arduino,
and get the "blink" program to work.
- 2. Wire up your own (red) LED (with a ~300 Ohm resistor so it doesn't
burn out) and make it blink using another output pin.
- 3. Wire up a second (green) LED and get it to blink alternatively
with the first one.
- 4. Modify your program so a "while" loop is used to implement
red LED blinking, rather than just falling off the end of
the "loop" function and rerunning.
- 5. Use a pushbotton switch to provide a signal to the Arduino
to exit the loop. Don't forget to use a "pulldown" resistor (~10kOhm).
Put a second such loop blinking the green LED after the first.
Your push-button switch should now toggle between the two modes.
(press it once, red, press it again, green, press it again, red...)
You could think of them as forward and reverse driving modes.
- 6. Use a Potentiometer with analog input to the Arduino
to vary the blinking speed between one and 10 times a second.
- Write up the experience: What was hard, what was easy, what you
need to learn more about. Then go learn it.
Due Tuesday, Feb 28, 2017.
Tuesday, Feb 21, 2017.
- Class activity: Discussion of central control, microcontrollers, and
the Arduino system
Thursday, Feb 23, 2017.
- Class activity: Introduction to motors, some control and power issues,
and "magic" RC standard servo units.
Laboratory Exercise 5
- Assignment: Lab 5: Control of servo with Arduino
- A few things we have discovered.
i. servo.write(angle) does not work accurately or reliably with our servos
(especially using a Mac).
You need to use servo.writeMicroseconds(microseconds).
This a better choice in any case, since it gives you direct
control that can be related to servo specifications rather than having to
correct inaccurate "degrees" defined by a software guess.
ii. You need to power your servo externally using a 6V battery pack
(4 AA cells)
If you don't, the motor pushes spiky feedback into the Arduino which can
make it do strange, random things.
- 1. Wire up the flashing-light Arduino circuit from last week
(push-button toggles between read and green flashing LEDs).
Look up the servo library using the IDE reference section, and find out
how to use the library function to set a servo position. Pay attention
to initialization code and procedures that must be performed.
- 2. Hook up your servo using an external battery (make sure the battery
and the Arduino share a common ground). Using one of the PWM (~) ports,
modify your program so that when the red LED is flashing, the servo
is sent a 1500 us signal (midrange position), and when the green LED is
flashing, the servo is 30 degrees counter-clockwise (viewed from above)
from the 1500 us position. The difference between the two positions will be
somewhere around 300 us. Verify the angle using a protractor, and show you
can toggle between the two positions with the push-button switch.
- 3. Modify your program so that the potentiometer is read in the
green loop every 50 ms, and use the value to set the position of
the servo so that it is center - 30 degrees on one end of the POT range,
and center + 30 degrees on the other. The desired effect is that the
servo tracks the potentiometer. Note you need to change the delays in
the loop so that the total elapsed time is 50ms rather than the 1-2s
you had last week. The LED should flicker rapidly.
You will need to take some care so that the servo does not behave in
a "glitchy" manner at the ends of the range (recall that the pulse
width needs to be between about 1000us and 2000us, and that out-of-range
values may produce undefined results)
- 4. Modify the program again so that in the "green" mode, the
servo moves smoothly back and forth between -30 and +30 degrees,
taking about 1 second each way. This will involve rapidly setting
the servo to a lot of intermediate positions. Note that doing this
more than 50 times a second is pointless, since the servo only receives
an update pulse every 20ms in any case. You now have the basis for
a "walking" motion.
- 5. Finally, use the value of the POT to change the walking speed
between (say) 1 step every 2 seconds and 2 steps per second.
Again, design your system so there is no strange behavior at either
end of the range.
Tuesday, Feb 28, 2017.
- Class activity: Snakes.
- Assignment: Read the "Sensors" section of the Robot Manual.
Thursday, March 2, 2017.
- Class activity: Discussion of simple sensors
- Assignment: Read the "Sensors" section of the Robot Manual if
you haven't done so.
Laboratory Exercise 6: Soldering
- We will practice soldering and solder-joint examination and remediation
on printed circuit boards, and between free components.
Tuesday, March 7, 2017.
- Discussion of heartbeat programs for Snakebot, and table-driven
- Read about serial communication for the Arduino.
Back to CSC 297 main page