CCA Advanced Electronics, Spring 2014

Advanced Electronics
Spring 2014
Wednesday 08:00AM – 11:00AM
Main SF Bldg, Room 107 (Hybrid Lab)

Jump to current homework assignment
End of semester Interface Show

Instructor: Michael Shiloh
Office hours: Mondays and Wednesdays 11-11:30 or by appointment

Course Description
Capacity to work with electronics and microcontrollers is increasingly becoming an important skill for artists and designers. Artists embed circuits into their work to create interactive art or kinetic sculpture. Architects design smart buildings that can adapt and change to environmental conditions. Designers embed electronics into products, fashion, and interactive displays to enhance the daily quality of our lives. Interfacing these devices to computers and the internet adds further dimensions. In this class, students will build and document multiple advanced projects in electronics. Students will be most successful in this class if they have had some previous coursework in electronics. A laptop is highly recommended.

Syllabus: The latest version is always here: Class specific part and generic part

How to succeed in this class

  1. Attend every meeting, even if you are tired, or it’s raining, or it’s sunny outside
  2. Do all the homework, even if there is something good on TV or your friends want to go bowling
  3. Use your resources: office hours, tutoring center, advisors, etc. You are paying for these whether you use them or not.
    1. You may work in groups as long as you all understand the process
    2. Visit me during my office hours
    3. Email me at other times
    4. Don’t wait until the last minute. I will probably not see your email on the night before the assignment is due
    5. Ask questions of the Hybrid Lab manager, his monitors, or other students in the lab
    6. Use the Arduino forum, and forums on other websites (Adafruit, Tronixstuff, etc.)
    7. Google! If you can’t find it you’re using the wrong keywords. Everything that can be done with Arduino has been done. (Not really true but prove me wrong.)

Tentative Schedule

  1. Review of electronics; Arduino install; basic 4 IO; communications
  2. External hardware: shift registers, UARTs; overview of Arduino schematic
  3. Guest lecture: Serial Communication: wired and wireless (XBee)
  4. Understanding complex Arduino projects: Many things at once, I2C, and SPI
  5. Data sheets for complex integrated circuits
  6. Analysis of complex circuits
  7. Open collector and tri-state outputs
  8. Filters and Impedance
  9. Op amps, power amplifiers, impedance matching
  10. Understanding and modifying application notes
  11. Complex sensors
  12. Understanding and designing power supplies
  13. Layout considerations: high current voltage drops, RF noise, transmission lines
  14. TBA
  15. Projects due and course wrap up
  16.  End of semester show (Interface Show) in Oakland

Week 1 Wednesday, January 22 Lecture

  • Review syllabus
  • Evaluation
  • Basic circuit theory
    • Components
    • Connections
    • Circuits
    • Schematic Symbols


  • Solderless breadboard
  • Battery, resistor, LED
  • Arduino
    • Install IDE
    • Basic 4 types of IO
  • Solderless breadboards
  • Communication

Homework 1 due week 2 , Wednesday, January 29

  1. Install the following:
    1. Processing
    2. Arduino
    3. Fritzing
  2. If you have not done so, do these basic 4 tutorials. This requires equipment that is in the lab and will take a few hours and so should be done before Tuesday night. The lab is open this Monday until 10 PM and this Tuesday from 3 PM to 10 PM. Even if you have done these, read the tutorials again to deepen your understanding:
    1. Blink tutorial
    2. Digital Read Serial tutorial
    3. Analog Read Serial tutorial
    4. Fade tutorial
  3. Research the resistor color code, understand it, and put it in your notebook. Use an explanation that makes sense to you since you will be using this.
  4. Read this tutorial on the 74HC595shift register
  5. If you are new to electronics, read tutorials 1-3 of Electronic Tutorials about DC Theory. Don’t worry if you don’t understand everything. We will go over this in class but I want you to have seen this before class.

Week 2 Wednesday, January 29 Announcements

  • Restricted add/drop this week
  • Guest lecturer next week
  • No office hours next week
  • Homework due by email next week

Review questions

  1. Identify some resistor values given colors
  2. What would be the color code given values?
  3. How do you know which end to start reading?
  4. What is voltage? What are its units?
  5. Current?
  6. Resistance?
  7. What is relationship between these?
  8. What happens in a circuit if the voltage is increased?
  9. Resistance increased?
  10. What is power? What are its units?
  11. What happens to power if voltage is increased?
  12. If resistance is increased?
  13. What does digitalRead do?
  14. Why is the resistor needed?
  15. What does the resistor do in Blink() tutorial?
  16. What is difference between digitalRead() and digitalWrite()?
  17. What is difference between digitalRead() and analogRead()?
  18. What is a potentiometer?
  19. Why doesn’t analogRead say 2.5 when it measures 2.5 Volts?
  20. What is the maximum value for analogRead()?
  21. What is the difference between analogRead() and analogWrite()?
  22. What is the maximum value for analogWrite()?
  23. What is a shift register?
  24. When might we need one?


  • Suppose we want to control 30 LEDs from Arduino
  • Suppose we have a device that can “remember” 30 different digital values and has a separate wire for each value. This could control our 30 LEDs.
  • How would we tell this device which 30 values to remember?
    • If we had 30 wires we could just give it one wire per memory cell
      • If we had enough pins for that we would just drive the LEDs directly
    • If we’re willing to sacrifice some time and complexity, we could load the memory cells one at a time: shift, data
    • But then we’d see the LEDs changing while we were “shifting” in the data.
    • Add another bank of 30 memory cells; first bank connects to Arduino, second bank connects to LEDs
      • Shift the 30 values into the first bank
      • When we’re done with all 30 values, shift them all at once (in parallel) to the second bank which has the LEDs attached
  • Serial vs. parallel: More time, more complexity, but fewer pins
  • Complexity? Once it’s written correctly we don’t have to think of it again
  • This is the basis of serial communications. Like Morse code, though, each bit (dot or dash) doesn’t make sense until it’s grouped into something meaningful, like a character: Ascii codes. Now we can send messages
  • Arduino manipulates data in groups of 8. That’s why it’s called an 8 bit microcontroller. Each piece of data is a binary digit: binary meaning it has only one of two values: on or off, zero or one. Binary Digit is abbreviated BIT.
  • A group of 8 bits is called a byte.
  • With 8 bits you can count up to 255. Arduino is able to use mutliple bytes to store numbers, so you can work with number greater than 255 e.g. integers which can go up to about 64,000
  • But what about the shift register? Turns out this is so useful that Arduino has one built in; in fact you used that when you use the serial monitor.
  • A shift register with special features for communication is called a UART (Universal Asynchronous Receiver/Transmitter)
  • Arduino Uno schematic
  • Note that the UART is permanently attached to pins 0 and 1; that’s inside the chip and can’t be changed. This is why it’s good to avoid using pins 0 and 1.
  • Can use UART to communicate with other devices, not just computer
  • Sometimes we need another UART. We can do this in software; that’s called a software UART, and there is an Arduino library that provides this

Homework 2 due week 3 , Wednesday, February 5

  • On February 5 you will have a guest lecturer who will show you how to work with radios. Please do this homework by then so that you are prepared to understand his material.
  • Read the Software Serial Example. Try to understand what is going on in general, but don’t worry too much about the details yet
  • Read the SoftwareSerial library reference page
  • Read the reference for the SoftwareSerial available() function
  • Read the reference for the SoftwareSerial read() function
  • Now go back and re-read the Software Serial Example. This time, try to understand what every statement does. If you can’t figure something out, follow the links to the reference pages for functions you don’t understand, research it on the internet, ask one of your peers, ask someone in the Hybrid Lab, or email me.
  • You might find this Arduino tutorial helpful. It is very thorough and well written. Don’t worry about the topics we haven’t discussed yet.

Week 3 Wednesday, February 5

Guest speaker: Wireless communication using XBee

Homework 3 due week 4 , Wednesday, February 12

  • Read tutorial chapters 1 and 2 on how to interface SPI devices to Arduino
  • Read the Blink Without Delay tutorial. Try to understand why this is necessary, and how it solves the problem.

Week 4 , Wednesday, February 12 Lab

  • Attach BlinkM MinM. Reference this Arduino pinout diagram and the code below:
 * BlinkM connections to Arduino
 * PWR - -- Gnd -- Analog In 2
 * PWR + -- +5V -- Analog In 3
 * I2C d -- SDA -- Analog In 4
 * I2C c -- SCK -- Analog In 5
 * BlinkM documentation at 

#include <Wire.h>

const int brightPin = A0;
const int huePin = A1;
const int groundPin = A2;
const int powerPin = A3;

const byte address = 0x09; // default BlinkM address

void setup()
  // Initialize the power to the BlinkM
  pinMode( groundPin, OUTPUT);
  pinMode( powerPin, OUTPUT);
  digitalWrite( groundPin, LOW ); // setting output to LOW is the same as GND
  digitalWrite( powerPin, HIGH ); // setting output to HIGH is the same as 5V
  delay(100); // wait for power to stabilize before using i2c bus

  // Initialize the i2c bus

  // Turn off whatever script was running on the BlinkM
  Wire.write('o');  // stop whatever script is running 


void loop()
  byte red = 128;
  byte green;
  byte blue;

  green = map (analogRead(brightPin), 0, 1023, 0, 255);
  blue = map (analogRead(huePin), 0, 1023, 0, 255);

  Wire.write('n'); // 'n' means change to color NOW


  1. How is the I2C bus similar to and different from the SPI bus?
  2. Are there any risks to using Arduino’s IO pins for power?
  3. What might we do to attach a third potentiometer in order to control the blue segment of the BlinkM?
    1. Multiplexer 74HCT4051
  4. Why is Blink Without Delay important?


  1. Using Blink Without Delay, add an LED to your circuit. Have it blink at 2 Hz.
  2. Add a motor to your circuit, using a transistor properly. Add a a third potentiometer to control the speed of the motor.
  3. Add a fourth potentiometer using the 4051 multiplexer. Have it control the blue segment of the BlinkM.


Homework 4 due week 5 , Wednesday, February 19

  • Research some Arduino projects for ideas. Google for “Arduino” and “projects” and you should find plenty. Send me links to 2-3 of your favorites.
  • Design a project using 4 different sensors and 3 different actuators. Sensors can include switches and potentiometers, and actuators can include LEDs, motors, simple displays (e.g. single-digit LED displays), and loud speakers.
  • Describe its behavior. The behavior does not need to be useful or meaningful, but there must be some interaction between the different sensors and the actuators.
  • Example:
    • Sensors: Light sensor, potentiometer, bend sensor, and a pushbutton
    • Actuators: Speaker, LED, motor
    • Behavior:
      • Speaker plays a melody
      • Depending on the position of the potentiometer, one of 3 melodies is played
      • If the bend sensor is bent past a certain point, the melody starts over
      • The LED blinks at a rate determined by the light sensor
      • If the button is pressed the melody and the blinking LED stop
  • Hand in a block diagram and a description of your project’s behavior. Next week we will learn how to implement such a project.
  • This is not your final project. This is a short little exercise to get used to connecting multiple devices to Arduino, and to get used to coordinating behavior between multiple sensors and actuators.
  • You will work on this project only one week. The project remains on the breadboard and does not involve any decorations or enclosure.

Week 5 , Wednesday, February 19


  • 555 Theremin circuit
  • Adding computer control with a digital potentiometer
  • Datasheet Microchip MCP41010
  • Arduino Uno additional pin functions diagram
  • Arduino controlled 555 noisemaker circuit
  • Arduino code
      Based on Digital Pot Control  by Tom Igoe
      This example controls a Microchip 41010 digital potentiometer.
      The MCP41010 is SPI-compatible. 
      To command it, you send two bytes: First the command 
      and then the code for the desired resistance (0 - 255).  
    #include <SPI.h>  // include the SPI library
    const int slaveSelectPin = 10;
    void setup() {
      pinMode (slaveSelectPin, OUTPUT); // slaveSelectPin is an output  
      SPI.begin();    // initialize SPI:
    void loop() {
      // fade the resistance up
      for (int level = 0; level < 255; level++) 
      delay(1000);  // wait a second at the top
      for (int level = 255; level > 0; level--)  // now down
    void digitalPotWrite(byte value) 
      // take the SS pin low to select the chip:
      SPI.transfer(B00010001); // The command byte
      SPI.transfer(value);     // The data byte
      // take the SS pin high to de-select the chip
  • Also possible to play a tune
      Based on Digital Pot Control  by Tom Igoe
      This example controls a Microchip 41010 digital potentiometer.
      The MCP41010 is SPI-compatible. 
      To command it, you send two bytes: First the command 
      and then the code for the desired resistance (0 - 255).  
    #include <SPI.h>  // include the SPI library
    const int slaveSelectPin = 10;
    void setup() {
      pinMode (slaveSelectPin, OUTPUT); // slaveSelectPin is an output  
      SPI.begin();    // initialize SPI:
    void loop() {
    void digitalPotWrite(byte value) 
      // take the SS pin low to select the chip:
      SPI.transfer(B00010001); // The command byte
      SPI.transfer(value);     // The data byte
      // take the SS pin high to de-select the chip
  • Now, use Blink Without Delay (you all were supposed to read this 2 weeks ago) to make LED blink while still playing the tune. You must not interrupt the tune.


  • Sensors
    • Resistive
    • Analog
      • Voltage
      • Serial (I2C, SPI, “serial”, other)
      • Parallel
      • PWM
    • Binary (usually called digital)
      • Switches
        • Toggle
        • Momentary
      • Complex sensors that result in a binary value
    • Other?
  • Actuators
    • Powered by Arduino pin
      • LED
      • Speaker (but…)
      • Relay (but …)
    • Powered elsewhere and controlled by Arduino
      • Servo
    • Powered elsewhere and switched by Arduino
      • Transistor
      • Relay

The deadline for the homework that was due this morning is extended to Friday February 21 at midnight Homework 5 due week 6 , Wednesday, February 26

  • Build the project you described in the previous homework. As mentioned above:
  • This is not your final project. This is a short little exercise to get used to connecting multiple devices to Arduino, and to get used to coordinating behavior between multiple sensors and actuators.
  • You will work on this project only one week. The project remains on the breadboard and does not involve any decorations or enclosure.
  • You may borrow sensors and actuators from the lab, or you may purchase your own. Note that supplies at the lab are limited, so you might want to avoid exotic sensors such as distance measuring sensors and stick with potentiometers and switches. Similarly, for actuators, you may use different colored LEDs instead of other more complicated components.
  • Remember to bring back the speaker and the two ICs from today’s lab. You may keep the resistors and capacitors if you want to use them again, or you may return them to the lab. You can always take them again if you need later.

Week 6 , Wednesday, February 26

Class canceled due to surgery

Week 7 , Wednesday, March 5

Brief demonstration of projects


  • What is voltage, current, power?
  • How do you measure voltage? Current?
  • Why do we care about these things?
  • Every component has limits: LED current limit, Arduino pin current limit, Arduino overall limit, transistor current and voltage limits, resistor power limits, etc.
  • How do you measure voltage or current if it’s changing rapidly?

Lab Measuring current with Arduino

  • Arduino motor with MOSFET arduinoMotor_schem
  • Use Blink example to show you control motor. Then just leave it on.
  • Add 10 Ohm resistor and measure voltage using multimeter. What is the value? Calculate the current.
  • Add analogRead() and Serial.println. Observe how much it fluctuates.
  • Use Graph example to make your own oscilloscope. Make window much wider and shift bottom up 5 pixels so you can see the line at 0. Is the line smooth? Estimate the average voltage and calculate the current.
  • Add a switch so you can see it change. Observe startup current. Estimate the peak current.
  • Use your fingers to slow down the motor. Observe current increases.
  • Stall the motor briefly. Calculate the stall current. If it goes too high, add another resistor in series.
  • Use Blink w/out delay to make it change automatically
      Demonstrate reading current of motor
      Based on Graph and Blink Without Delay
      created 2014 by Michael Shiloh
     This example code is in the public domain.
    int motorState = LOW;  
    unsigned long previousMillis = 0;
    const long interval = 1000; 
    void setup() {
    void loop() {    
      unsigned long currentMillis = millis();
      if(currentMillis - previousMillis >= interval) 
        previousMillis = currentMillis;   
        motorState = ! motorState;
        digitalWrite(11, motorState);

Homework 6 due Week 8 , Wednesday, March 12

For next week you will research and then teach the rest of the class something we have not yet covered.

  • Research and prepare a 5-10 minute presentation including a demonstration. The topic depends on whether you have a final project in mind or not:
    • If you have a final project in mind, identify the highest risk part of your project. This might be an electronic component you have never used, or a programming concept you’ve never tried, or an interaction between two things your concerned about. If this would require a part you don’t have, or complex construction, then you may request an extension from me until the following week.
    • If you don’t have a final project in mind, you may pick any topic you wish as long as we haven’t covered it in class. You only have a week for this so don’t be too ambitious, but don’t be too trivial either.
  • Study and understand the topic
  • Build the circuit and/or write the sketch(es) necessary to demonstrate your understanding of the topic
  • Provide the necessary documentation: A circuit requires a schematic, a program requires the code.
  • Provide a brief explanation of what’s going on
  • Be sure to address any tricky points, anything that caused you trouble or might be potentially confusing to someone following your instructions
  • Provide links to more information for someone wishing to explore further
  • You may use an medium you wish. If you wish, you can get free blog space at and free wiki space at
  • Don’t worry about duplicating something that someone else might be doing.

Week 8 , Wednesday, March 12



  • Intro to Fritzing and OtherMill

Homework due Week 9 , Wednesday, March 19, extended to April 2

  1. Install Fritzing from here
  2. Watch this short Fritzing video
  3. Browse this, paying particular attention to the limited component selection you can use
  4. Create this schematic in Fritzing using the limited components. You will not be able to use the battery or LED components, nor the 555 timer IC. You will have to use the generic female headers or the screw terminals to create places where the battery will connect and where the LED will fit. Instead of the 555 timer IC, you will have to use the generic 8 pin DIP component. You can leave off C2. LEDBlinkerSlow
  5. Now try to design the Printed Circuit Board (PCB) for this circuit. Remember from this page that all traces must be on the top, and all components must be on the bottom. An example of a finished design is this: ledBlinker_pcb
  6. Email me your finished .fzz file. For full credit, you must put your name in the filename!
  7. If you have any questions please include your .fzz file with your email

Week 9 , Wednesday, March 19


  • Power Supplies
    • Linear
      • Unregulated
        • Voltage drop on internal resistance
      • Regulated
    • Switching
    • How much current will they deliver?
      • Depends on how much your circuit wants, and NOT on the power supply (I=V/R)
      • But, power supplies have limits to how much current they can deliver:
        • Linear: transformer magnetic saturation
        • Overheating
        • Switching power supplies often, but not always, have a circuit which shuts down the supply if the load demands too much current
    • How can you tell the two apart?
      • Weight
      • Appearance
  • Make a lower voltage from a higher voltage with voltage regulators
    • 7805
    • LDO regulator
    • What does it do with the excess voltage?
      • P = V * I
    • Works on any power supply (including batteries) so handy for regulating an unregulated supply (but be aware of the drop out voltage)
  • Op amp
  • Learn more here and here (actually the whole series is excellent)
  • Active pull up/pull down vs. Open Collector
    • Arduino outputs: active pull up AND pull down (totem pole outputs)
      • What does this mean? You can turn something on with either a HIGH or a LOW
    • When might you not want this? Wire ORing
    • LM339
    • Window comparator using LM339 and wire ORing
  • Final projects
    • Overview
    • Block Diagram
    • Prototype pieces
    • Start putting pieces together
    • What do you need to learn for your project?

I’ve created a shared Google drive for sharing your projects so that you may each learn from each other. Please request access to the folder and then create a folder of your name, and in that place your presentation and accompanying material from homework 6. The folder is at

Homework due Week 10 , Wednesday, April 2

Final Project: initial concept, identify blocks, identify process

  1. Conceive of your final project. If you don’t have anything in mind, research other advanced electronic projects for ideas.
  2. The final project must require new work and not consist mostly of exercises, examples, or homework
  3. Describe your project concept and how you intend to create it:
    1. Write a paragraph or two about what your project will do
    2. Draw a block diagram of the electronics. A block diagram is the high level view of the electronics, without getting into the details of the circuit. It helps you identify what electronics you will need to figure out, such as sensors and actuators. A block diagram consists of “blocks” (e.g. “transistor”, “light sensor”, “Arduino”, “rotation sensor”) with lines showing how the blocks will connect to each other.
    3. Describe in words or in blocks how your program will do what it needs to do.  Similar to the block diagram of the electronics, details aren’t needed. For instance, you could say “loop over the array of objects, setting each object to a different color”.
  4. List all the parts you think you will need to buy
  5. List all the parts you think you will need to make
  6. List anything you need to learn
  7. Identify the part of your project you are most unsure or most worried about, or that you think will give you the most difficulty.

Week 10 , Wednesday, April 2

Review homework

  • Review issues in Fritzing homework due
  • Review final projects:
    • Check for sufficient complexity
    • Check both making and buying parts lists
    • Check what needs to be learned
    • Assign next step


  • Make progress with your final project, either prototyping, researching, or talking to me
  • Create list of what you need me to teach you

Homework due Week 11, Wednesday, April 9

  • I warned some of you that your projects lack sufficient technical content to earn full credit for a final project. I suggest you continue working on your original project, while thinking of ways to increase the technical content once the basic functionality is working. Examples of more technical content would include more sensors, actuators, or other components or more complex behavior requiring more complex programming. As always, you may bounce your ideas off me if you are unsure.
  • Continue working on your projects. Continue doing research and prototyping parts of your project. Start building and programming. Email me as often as you wish with questions. I will do my best to answer in a timely fashion. For next week, you must show tangible progress:
    • Create an accurate schematic, as much as possible. It can be hand drawn or done in Fritzing or other software. Send me the schematic.
    • If your project involves programming, start programming and send me what you have. It does not need to be fully functional yet but it must show that you’ve put some thought into what needs to happen. Use comments to describe the parts you have yet to figure out. Some of you with complex programming projects might just show me the classes. Again you don’t need the full code but perhaps just describe the variables and methods your objects might need, and start roughing out how you will use these properties to create your program.
    • If your project requires that you buy or make parts, start ordering parts now and start building the parts you need to build. If you have to make a complex assembly, you might start by sketching a pretty accurate diagram of how it needs to work, and start prototyping some parts in simple materials e.g. foam board etc. Take pictures and send these to me.
    • If your project requires research, do it. Ask me if you have trouble finding what you are looking for. Document what you’ve discovered. Send it to me.
  • I don’t require that you to have something finished or working (although if you do that’s great). I do require that you show progress. A physical prototype of some sort, or starting to assemble parts, or prototyping the software in simple little chunks, are all good examples of progress.
  • If you don’t know what to do, ask me. If you have nothing to show next week because you didn’t know how to proceed and you didn’t ask me you will receive 0 for this homework assignment.
  • Upload your midterm project to the Google drive at
  • As always, this assignment is due by 8:15am of our next meeting. Work received after 8:15am will not be accepted.

Week 11, Wednesday, April 9


  • Construction techniques
  • Review of grading policy


  • Is anyone blocked right now from making any progress?
  • I will work with each of you individually. Be prepared to:
    • Brief project refresher since I can’t remember all of them
    • Show me your progress since last week
    • Identify what you have yet to do (make, buy, learn, program, figure out, decide)
    • Tell me what you hope to do today
    • Tell me what you will do before our next meeting
    • What additional material you’d like me to teach
  • The rest of the time you work individually on your projects

Homework due Week 12, Wednesday, April 16

  1. This homework is to be handed in, either by email or paper. Identify:
    1. What progress you made between April 9 and April 16
    2. What you have left to do, make, buy, learn, program, figure out, or decide
    3. What you hope to do in class at our next meeting (April 16)
    4. What additional material you need me to teach
  2. Visit the links page to see various resources, in particular the surplus section

Week 12, Wednesday, April 16

  1. Op amps, power amplifiers, impedance matching (Did we discuss op amps in week 9?)
  2. The truth about wire: high current voltage drops, RF noise
  3. State Machines
  4. Servo loops
  5. Maker Faire: Arduino booth

Homework due Week 13, Wednesday, April 23

We have only 2 more work meetings (April 23, April 28). Your projects will be due at our last meeting on May 7. Think about what you need to do each week for the next 2 weeks so that you can finish this project before the last week to avoid competing with projects and assignments from your other classes.

  1. This homework is to be handed in, either by email or paper. Identify:
    1. What progress you made between April 16 and April 23
    2. What you have left to do, make, buy, learn, program, figure out, or decide
    3. What you hope to do in class at our next meeting (April 23)
    4. What additional material you need me to teach
  2. If you want to volunteer at the Arduino booth at Maker Faire, read the volunteer’s manual complete the questionnaire, which will automatically enter you into the volunteer database.

Suggestions for lecture/lab

Week 13, Wednesday, April 23

  1. Sensors
  2. Power supply lab
  3. Stepper motor demo
  4. Putting together a final project for reliability, robustness, and ease of repair and modification
    1. Avoid the solderless breadboard. It’s great for prototyping but the wires come out too easily. Arduino projects should be built on a proto shield, other projects on a perforated breadboard.
    2. Avoid soldering wires to boards; instead, use some kind of connector. For small wires and components .1″ headers (male and female) work nicely. headerWithWires
      For larger wires use screw terminals
    3. Headers are also useful for mounting smaller boards:
    4. When connecting to Arduino, don’t poke wires into the headers. Solder the wires to male headers, or use a proto shield. Heat shrink tubing can be used to insulate the individual pins and to give your connector a place to hold that won’t stress the wires
    5. Enclosure
      1. Always leave more room than you think you need. Often we forget everything we have to put inside. In addition, you must leave room for the wires that connect the various components. If you have switches or other controls that requires additional space. Place heavy components near the bottom so that they don’t fall on delicate parts. Ideally, everything should be mounted securely with screws but zipties work well too.
      2. Design your layout so that you can work on the project. Ideally, you should be able to see and access each component for example with a multimeter or a screwdriver. Leave room for your hands and any required tools. You might have to remove a part in order to repair or replace, so design the enclosure and placement so that each part can be removed without having to remove lots of other parts.
    6. Connecting parts of a project
      1. Never use solid core wire to go between pieces that are not attached as the solid wire will either break, or will stress whatever it’s connected to and cause a break at the weakest spot
      2. Any wire that goes between pieces that are not attached to each other should be anchored in some way. This is called strain relief and prevents stress on the solder joint, components, or other weak spots. Hot glue works well if you don’t expect to move it.
      3. If your project has many parts, there will probably be various wires going between them. Route these in a tidy fashion, ideally anchoring the wire bundles with zip ties to the enclosure. Leave enough slack that you can partially remove each component in case you need to work on it, while still connected to the system. Try to be consistent with wire colors; this will make it much easier to follow wires if you have to remove or repair. If you have lots of wires, consider labeling them.
    7. Power distribution
      1. If your project has many parts, you need to think about how to get power to all the parts. Typically projects have one power supply or battery from which power must be distributed to the various pieces of the system.
      2. For low current projects (Arduino, sensors, a few LEDs, etc.) this is not usually a big concern. You can connect the power supply (or battery) to the Arduino and provide power to the sensors or other parts from the 5V or VIN pins on Arduino
      3. If your project uses any motors, radios (wifi, GPS, etc.), lots of LEDs or other components that use much electricity, you want to distribute the power in a way that the voltage drops caused by high current loads doesn’t affect the voltage provided to the Arduino. Usually this means some sort of power distribution connection close the power supply, with all the components connected directly to that rather than through one another. We have these nice power distribution buses in the lab:
      4. Motors often generate lots of electrical noise on the power lines, which sometimes causes the Arduino to reset. This can usually be solved by providing a different power supply for Arduino and the motors. Usually the grounds of the two will be connected, which should be done close to the power supplies and distributed separately from there to each component.

Homework due Week 14, Wednesday, April 30

  1. Complete the online course evaluation before class
  2. I want to see the basic functionality of your project working. In order to do this you might have to cut some corners. You will have to decide what is the bare minimum necessary in order to consider your project working, and leave all the rest for the last week. These might include:
    1. Extra features
    2. Nice presentation (e.g. box or construction)
    3. Custom graphics
    4. Custom sounds
  3. In addition to demonstrating your project, you need to document your project, which will be due, along with the final project, on May 5. This document and all supporting files must be placed in our class Google folder, in your name, in a new subfolder named “final”. You might start gathering this material, which must include:
    1. Description
    2. Photograph (one or more)
    3. Short video of it working (nothing fancy)
    4. Clear, complete, and correct schematic (if there is any hardware)
    5. Clear and well documented sketches (Arduino/Processing as necessary)
    6. Complete and correct parts list for the electronics, with links to any unusual components
    7. Links to any necessary libraries
    8. List of resources you used (books, websites, tutorials, etc.)
  4. If you need help, in addition to Colin, you can also make appointments with Andrew, and you can often catch him informally in the lab. If he isn’t available, don’t be afraid to ask the lab monitor or other students in the lab. I will be somewhat available next Monday between 10 am and 1 pm, in the lab.
  5. >I encourage you to display your project at the bi-annual end of semester Interface Show (Art using Technology using Art) at the Oliver Art Center in Oakland, Friday, May 9, between 7-10PM. This is a popular show not just for the CCA community but for many Bay Area artists, designers, and conceptual thinkers.
    Setup will be all day on Friday between 10 AM and 6 PM, and all projects must be removed at the end of the evening. While no registration is required, email to Donald Day would be appreciated so that he can coordinate positioning. Otherwise, just show up Friday before 6 PM. Questions? Ask me or Donald Day.
    poster_spr14_medWhether you show or not, you are encouraged to attend and also spread the word by telling your friends and displaying this poster where you can.
    UPDATE: If  you need any Media Center support such as projectors or laptops, make the request by contacting Maggie or Jess or directly, or by asking Don to coordinate on your behalf.

Week 14, Wednesday, April 30

  • Course evaluation
  • Functional projects
  • End of semester Interface Show

Current homework assignment: Week 15, Wednesday, May 7


  • Course evaluations Wednesday May 7 at 8:30 AM
  • Final project demonstrations Wednesday May 7 at 9 AM
  • Documentation due Friday May 9 at 11:59 PM

Deadline Extension, at a price

It turns out that I will be able to attend the Interface show on Friday. To encourage you to exhibit, you may optionally extend your project deadline to Friday, May 9, if you comply with all of the following rules:

  • Exhibit your project at the Interface show in Oakland (details above) for at least 3 hours. You are responsible for coordinating with Don and for installing your project.
  • You are responsible for bringing me to your project at some point during the evening for formal discussion and grading.
  • For those not exhibiting at the Interface show, the deadline is still Wednesday May 7 at 9 AM.

Schedule for May 7 project demonstrations

  • 8 AM – 9 AM: Installation and completing course evaluations, if you have not already done so
  • 9 AM – 11 AM: Project reviews

Inspiring projects

Print Friendly
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Leave a Reply

Your email address will not be published. Required fields are marked *