DESGN-653-01 Digital Electronics, Spring 2015, CCA

DESGN-653-01 Digital Electronics Thursday 08:00AM 11:00AM SANF 107 (Hybrid Lab)
Interaction Design MFA
Spring 2015

Instructor: Michael Shiloh
Office hours: Tuesday 3:00PM-3:30PM, Thursday 11:00AM-11:30AM, or by appointment

Jump to current homework assignment

Course Objectives

The purpose of this course is to teach you the practical tools you will need to design and build robust and functional interactive electromechanical devices. This course will cover programming (Processing, Arduino, others), electronics (basic circuits, Arduino, sensors and actuators), and construction techniques. Electronic and programming theory will be covered as necessary to support the practical needs of this class. The goal will be to give you the tools and the confidence to combine basic hardware, software, and mechanical building blocks (such as those taught in this class or those you might garner from the internet) into functional realizations of your ideas.

A strong theme of this class will be learning how to design and build for reliability, flexibility, testability, ease of repair and modification, robustness, transportability, etc. The approach of this class will be to build as much as possible, to learn and to iterate.

Another theme is documentation. Obviously it’s important for your own studies, and it’s especially important when dealing with electronics and programming that become opaque very quickly. In addition, we all benefit tremendously from the projects others have shared freely on the internet and in other places, and it’s important to pay forward to this pool. As a side effect, you might receive excellent feedback and even recognition and fame for work you publish. To this end, everyone is required to have ongoing online documentation. This can be a blog (e.g. WordPress), a wiki, a website, or any other mechanism as long as it  allows feedback and is publicly searchable and accessible.

Finally, I want to make this class responsive to your needs and interests. Please ask questions, make suggestions, and tell me what you’d like to learn. In particular, some of you have prior experience in some of these areas. To allow you to learn as well, projects will be designed with a “low floor and high ceiling”, that is, beginners will implement projects at a basic level, while those with more experience will be expected to involve increased complexity in their projects.

You are encouraged to be very broad, adventurous, and creative. You should take advantage of the freedom you’re given and craft your explorations to spread your wings and get the most from the experience, resources, and the support that are available at CCA in general and in this course in particular.

Learning Outcomes

  • Know how to conceptualize, design, and build a project involving some or all of sensors, actuators, Arduino, Processing, and possibly other programming languages
  • Know how to use advanced interfaces such as I2C and SPI to communicate with sensors and actuators that use those
  • Know how to communicate between Arduino and a computer using your own protocol or Firmata, to implement a larger project requiring both Arduino and laptop capabilities
  • Know how to access the internet from your project
  • Know how to chose the right motor for your project, and how to control it
  • Know how to design and construct circuits and software for robustness and ease of maintenance, repair, and modification
  • Know how to tap into an existing device for control by or input to for a larger project
  • Know how to document your project so others can understand, duplicate, and build on your work
  • Know how to research and understand topics beyond what is taught in class

Required Equipment

  • Arduino Uno R3, either SMT or not (SparkFun, Maker Shed, Adafruit, Oddwires)
  • Solderless breadboard, full size (also known as 830 tie point) (SparkFun, Maker Shed, Adafruit, Oddwires)
  • Laptop (Windows, Linux, or Macintosh)

The Arduino Uno and solderless breadboard are available from multiple sources. Many vendors grant discounts for educational purposes so ask before you purchase. I encourage you to organize a group purchase to save on shipping fees, but do so immediately so we have the equipment on hand.

 Optional equipment

As you develop your projects and interests, you might need to purchase additional components and devices. This is impossible to predict as the range of projects you might approach are indeed infinite. At the low end, you can build amazing projects from discarded electronic devices such as printers at absolutely no cost; at the high end there is no limit; a complicated robotic project could easily start at hundreds of dollars. Some lessons I’ve learned:

  • Projects will cost more than you think they will
  • Projects will take longer than you think they will
  • You will order parts that are wrong or that you simply decide not to use. Be ready to accept this. Consider these items you might trade with other students (or the larger maker community) for parts that you do need, especially when you need that part urgently.
  • You will spend less time and money if you are flexible about your concept. Allow prototype iterations to modify your concept, not just your execution. The reverse is also true: If you strongly want to stick to your concept, be prepared to spend more time and money. The common way of looking at this is to consider that there is a relationship between time, money, and features. You can choose any two of them, and the third will grow (or shrink) to accommodate.


  • Introduction (or re-introduction) to Arduino and Processing
  • Electronic theory: understanding current limitations
    • How much current does an LED consume, and how to limit it
    • How much current does a motor consume, and how to control it from Arduino
  • Introduction to dataflow programming languages such as Max/MSP or PureData
  • Construction techniques
    • Soldering a circuit on a solderless breadboard
    • Laying out a PCB using Fritzing
    • Making a PCB on the Othermill
    • (motor controller, relay board, other?)
  • Debugging and asking for help
  • Electronic circuits: soldering, printed circuit boards (PCBs); CAD software (Fritzing)
  • Intermediate programming concepts: Arduino/Processing communication, classes, arrays, state machines, etc.
  • Firmata on the inside
  • Networking via Ethernet or WiFi
    • web interface
    • RESTful API
  • Other wireless options
  • Connecting to the internet with services such as IFTTT or Temboo
  • Intermediate hardware topics: other interfaces, filtering noisy data, motor controllers, etc.
  • Servo loops
  • Extending or combining Arduino with other circuits: multiplexers, shift registers, etc.
  • Telemetry data: Gathering information and storing on local SD card or on remote computer
  • Survey of other similar embedded options: Raspberry Pi, Beagle Board, Edison, Galileo
  • Advanced options
  • Motors: servo, PM, stepper, H-bridge
  • Power considerations and distribution


  1. Arduino control system: Taking input from at least 1 analog sensor and two digital sensors and controlling two digital outputs and one analog output, all of which will be represented by LEDs. The system must have at least 5 different states and must indicate, via the serial monitor, the current values of the inputs and outputs and the current system state.
    Skills: Basic Arduino IO: analog/digital read/write; conditionals; serial print; schematics; LEDs; resistors; multimeter; debugging software; debugging hardware
  2. Communication: Processing and Arduino: Sensors on Arduino control sound  and graphics on Processing and mouse or keys on Processing controls motor on Arduino
    Skills: Bidirectional communication; parsing; handshaking; motors; transistors
  3. Extending Arduino: Adding an external chip (Integrated Circuit or IC) to an Arduino to accomplish a specific task beyond the capabilities of Arduino
    Skills: Integrated Circuits; datasheets; soldering; layout; offboard connections; protoshield; oscilator; motor controller; I2C; SPI; mutliplexer; shift register
  4. Personal project

Week 1

  • Where are you
    • programming
    • electronics
    • physics
    • math
  • Intro to or review of Arduino
    • blink
    • breadboard

Homework due on week 2

  1. Order your Arduino and solderless breadboard before class so that they arrive by week 3.
  2. Create your online presence and send me the URL
  3. Bring your laptop to class every week

Week 2

  1. Basic electronics overview
  2. Schematics and schematic symbols
  3. AnalogReadSerial and LDR
  4. Multimeter (measure voltage e.g. at analog input and resistance e.g. of wire, resistor, body, or air)
  5. Serial.print as in AnalogReadSerial)
  6. Conditionals: if … then .. else
  7. Exercise
    1. Build circuit with photoresistor (use 10k ohm resistor) and two LEDs (and 1k ohm resistors)
    2. One LED comes on if sensorValue < 600
    3. Other LED comes on if sensorValue > 300.
    4. Both LEDs should be on if sensorValue is between 300 and 600
    5. The numbers 300 and 600 are arbitrary; chose any 2 values that are easy for you to create and test.
  8. Brief intro to using a pair of wires as a switch, and digitalRead()

Homework due on week 3

1. Review what we did in class, as necessary

2. Learn about switches and digitalRead

  1. Describe the following process on your website/blog/wiki/whatever in your words, accompanied by schematics, drawings (nothing fancy – simple hand sketches are fine), and programs, so take notes and save programs as you go along.
  2. Build the photoresistor circuit that we used in class, upload the sketch, open the serial monitor, and verify that the numbers change as you allow more or less light to fall on the photoresistor. Make note of the smallest and biggest numbers you get, very roughly (say rounded to the nearest 50). Remember that the diagrams I showed in class are here.
  3. Remove the photoresistor, and in its place put a pair of wires that go off the breadboard and connect to nothing. In the picture and diagram below the wires are white and blue:20150128_182110arduinoWireSwitch_bbarduinoWireSwitch_schem
  4. Observe the numbers in the serial monitor. They should be close to zero. Does this make sense? Remember what I said about the voltage divider: the voltage in the middle of the divider (at the Analog Input pin A0) will be somewhere between zero and five volts, depending on the ratio of the two resistors. The fixed 10k ohm resistor is still there, but the photoresistor is gone and in it’s place are a pair of wires that aren’t connected to anything, in other words, an open circuit. The resistance of an open circuit is infinite, and compared to infinity, the 10k ohm resistor is very small, so it pulls the middle voltage down, close to zero.
  5. While watching the numbers in the serial monitor, touch the ends of the white and blue wires to each other. The numbers should jump up to close to 1023. Again, remember that the voltage in the middle of the divider (at the Analog Input pin A0) depends on the ratio of the two resistors. This time in place of the photoresistor we have a pair of wires that are connected to each other, in other words, a closed circuit, and specifically, a circuit with no resistance. Compared to a circuit with no resistance, the 10k ohm resistor is very big, so the closed circuit pulls the middle voltage up, close to 5V.
  6. The blue and white wires are a switch. A switch simply makes a connection, in which case you have a circuit with no resistance, or opens the circuit, in which case you have an infinitely high resistance. Every switch is a variation on this basic principle.A switch can be either open or closed, resulting in a reading of close to zero or close to 1023. The Analog Input, which is designed for measuring voltages with many possible values, is wasted on this sort of input. Much more suited to a switch is a Digital Input, which is designed to only measure one of two values: LOW and HIGH.
  7. In the program, replace the analogRead() command with digitalRead() and upload the program. Close and open your switch, and see what you get in the serial monitor. You should see zero with the switch opened, and one with the switch closed. Zero represents LOW, and one represents HIGH.

3. Learn about analogWrite()

  1. Read and do the Arduino Fade tutorial. For another perspective, this is also described here.
    Note that analogWrite() only works on certain digital pins: 3, 5, 6, 9, 10, and 11.

4. Combine a pair of switches and an LED

  1. Build a circuit with two switches (you can use wires or switches, as you prefer) and an LED. The LED must be on one of the digital pins that works with analogWrite.
  2. Write a program that continuously fades the LED up and down when neither of the switches is closed. This is exactly what the Fade example does.
  3. When one of the switches is closed, the LED should be off. Use digitalWrite() for this.
  4. When the other switch is closed, the LED should be on at some intermediate brightness.
  5. Describe your work on your website/blog/wiki/whatever in your words, accompanied by schematics, drawings (nothing fancy – simple hand sketches are fine), and the program.

5. Other places to look

  1. Excellent introduction to Arduino: Arduino in a Nutshell
  2. Arduino overview with links to many other sources of information
  3. Endless resources on the web

Week 3 February 5

Homework Feedback

  • Website
    • Don’t post screenshots – include code (<code> </code>, <pre> </pre>), etc.)
  • Software:
    • Fade
    • Documentation and Readability
      • Well chosen variable names
      • Titles for blocks of code, especially functions
      • Indentation
    • Using comments to temporarily remove code (“commenting out”)
  • Circuit
    • Sensors that control actuators do so via software and not by direct connection
    • Sensors and actuators should not touch each other except at 5V and GND
    • How you implemented the circuit on your breadboard is an implementation but is not the schematic. Don’t confuse the two! You may include a picture of your implementation, but you MUST include the schematic (any of hand drawn, graphics, or CAD are fine) as well.
  • Schematics
    • GND and 5V labels
    • gnd symbol
  • Sketch


  • Download from
  • Examples
      • form -> star
      • transform -> arm
      • structures -> createGraphics
    • sketch_001:
      void setup() {
        // parameters are 
        //   x coordinate, 
        //   y coordinate, 
        //   x size, 
        //   y size
        ellipse( 15, 15, 30, 30);
    • sketch_002 change size of canvas:
      void setup() {
        // size of canvas (x, y)
        size(1024, 768);
        ellipse( 100, 200, 30, 30);
        // can change location and size
        // can also make multiple objects
    • sketch_003 mouse variables, draw function:
      void setup() {
        size(1024, 768);
      // draw() is like making a drawing on a new
      // page in a flip book
      void draw(){
        // draw circle wherever the mouse is
        ellipse( mouseX, mouseY, 30, 30);
    • sketch_004 our own variable that varies with every frame:
      void setup() {
        size(1024, 768);
      int myX = 0; // Create a variable and put 0 in it
      void draw(){
        // draw circle 
        ellipse( myX, 300, 30, 30);
        // change the x coordinate so on the next frame 
        // it will be in a different place; this makes
        // it appear to move
        myX = myX + 1;
    • sketch_005 change color of pen; erase behind us:
      void setup() {
        size(1024, 768);
        // change color of pen
      int myX = 0;
      void draw(){  
        // clear the background before drawing each frame
        // draw circle 
        ellipse( myX, 300, 100, 100);
        // change the x number so next frame it will 
        // be in a different place
        myX = myX + 1;

Processing and Arduino

  • Arduino File -> Examples -> Communication -> Graph
    • SerialEvent()
    • map()

Homework due week 4 February 12

  1. Read, watch, and do these tutorials to the extent you require
    1. Introductory video series on Processing
    2. Processing Processing Overview
    3. Hello Processing
    4. Processing Getting Started Introduction to Processing
    5. Coordinate System and Shapes
    6. Color
  2. Write a processing program which will create a simple drawing using lines, ellipses, and rectangles, and whatever else you want. Your picture should include all three of the following:
    1. Some of it should be static
    2. Some of it should change depending on mouse position and/or button clicks, like example sketch_003 I showed in class
    3. Some of it should change with every frame, like example sketch_004 or sketch_005 I showed in class

    The changes can be to position, size, shape, color, etc. of any of the objects in your picture.

  3. Starting with the Graph tutorial, modify the Processing sketch to do something that changes or moves as the light level changes on a light sensor on your Arduino. You may also integrate this with the drawing assignment above
  4. Read and do the Dimmer tutorial
  5. Read Daniel Shiffman’s Objects tutorial
  6. Read and run the examples from this simple Processing class example
    1. Modify the last examples to draw cubes instead of circles
    2. Add a third ball (or cube) to the example

Week 4 February 12

Install Arduino 1.6.0 from here

Homework Feedback


Processing and Arduino

  • Arduino File -> Examples -> Communication -> SerialCallResponseASCII
  • Potentiometers
  • Pong paddles

For() loops and Arrays

  • Arduino File -> Examples -> Analog -> Fading
  • Arduino File -> Examples -> Tone -> Tone Melody

Homework due week 5 February 19

You will create a rectangle that can be moved vertically according to a sensor on the Arduino. Later we will use this as a paddle for a game of Pong.

  1. Create a class for a rectangle:
    1. You may base your class on the examples we looked at in class.
    2. Your rectangle doesn’t need to move by itself, so you can delete the update() and checkCollisions() member functions. You can also remove the xSpeed and ySpeed member variables.
    3. You must be able to position the rectangle manually, so add a new member function called changeXPos() which takes one argument and changes the x position to this. Look at the constructor for some help in this.
    4. Test your new class. In the setup() function, create a rectangle anywhere. In the draw() function, move the rectangle vertically to the middle of the screen; wait there a bit, then move it up; wait there for a bit; then move the rectangle down and again wait there for a short while.
  2. Use your new rectangle class to modify the Graph example so that the sensor moves the rectangle:
    1. Open Arduino File -> Examples -> Communication -> Graph. Upload the Arduino sketch and copy the Processing sketch into a new Processing window.
    2. Copy your rectangle class from the first step into the Processing Graph sketch. In setup(), create a rectangle in the middle of the screen.
    3. Remove the part of the sketch that draws the graph. This will include the call to line() and the part that increments xPos. Instead, add a call to changeXPos of your rectangle, passing it the value of inByte. This should cause the rectangle to move to the position indicated by the sensor value.

Week 5 February 19

    1. Demonstration of my Pong paddle
import processing.serial.*;
Serial myPort;        // The serial port
// Paddle dimensions
int rectwidth=15;
int rectheight=40;
//create a Paddle object
Paddle paddle= new Paddle(50, height/2);
void setup() {
  //set up the window size
  size(600, 600);
  // List all the available serial ports
  // if using Processing 2.1 or later, use Serial.printArray()
  // I know that the first port in the serial list on my mac
  // is always my  Arduino, so I open Serial.list()[0].
  // Open whatever port is the one you're using.
  myPort = new Serial(this, Serial.list()[0], 9600);
  // don't generate a serialEvent() unless you get a newline character:
void draw () {
  // erase previous paddle
  // draw new paddle
void serialEvent (Serial myPort) {
  // get the ASCII string:
  String inString = myPort.readStringUntil('\n');
  if (inString != null) {
    // trim off any whitespace:
    inString = trim(inString);
    // convert to an int and map to the screen height:
    float inByte = float(inString);
    inByte = map(inByte, 0, 1023, 0, height);
    // The value from Arduino is used to move the paddle
class Paddle {
  // Private variables 
  float x;
  float y;
  float sizeX;
  float sizeY;
  Paddle(float temp1, float temp2) {
    x= temp1;
    y= temp2;
    sizeX = rectwidth;
    sizeY = rectheight;
  void moveMe(float dy) {
  void drawMe() {
    rect(x, y, sizeX, sizeY);
  • Arrays of objects
import processing.serial.*;
Serial myPort;        // The serial port
// Paddle dimensions
int rectwidth=15;
int rectheight=40;
// Create an array ready to hold two paddles. 
// Note this does not create the paddles yet
Paddle[] paddles= new Paddle[10];
void setup() {
  //set up the window size
  size(600, 600);
  // List all the available serial ports
  // if using Processing 2.1 or later, use Serial.printArray()
  // I know that the first port in the serial list on my mac
  // is always my  Arduino, so I open Serial.list()[0].
  // Open whatever port is the one you're using.
  myPort = new Serial(this, Serial.list()[0], 9600);
  // don't generate a serialEvent() unless you get a newline character:
  // Create the paddles and put them in the array
  for (int i = 0; i < paddles.length; i++)
    paddles[i] = new Paddle(i*50, height/2);
void draw () {
  // erase previous paddles
  // draw new paddles
  for (int i = 0; i < paddles.length; i++)
void serialEvent (Serial myPort) {
  // get the ASCII string:
  String inString = myPort.readStringUntil('\n');
  if (inString != null) {
    // trim off any whitespace:
    inString = trim(inString);
    // convert to an int and map to the screen height:
    float inByte = float(inString);
    inByte = map(inByte, 0, 1023, 0, height);
    //make a rect control by the arduino
    // If you had another sensor, the second value might control
    // the second paddle
class Paddle {
  float x;
  float y;
  float sizeX;
  float sizeY;
  Paddle(float temp1, float temp2) {
    x= temp1;
    y= temp2;
    sizeX = rectwidth;
    sizeY = rectheight;
  void moveMe(float dy) {
  void drawMe() {
    rect(x, y, sizeX, sizeY);
  • Functions that return values
  • Member functions that return values
  • Multiple sensors: Arduino File -> Examples -> Communication -> SerialCallResponseASCII
  • Potentiometers
  • Motors, transistors, and H-bridge
  • Soldering (maybe)

2 week Project

  • Motor and motion control
  • Programming and pong
  • something else


You chose! One of the following:

  • Soldering
  • Motors
  • Pong

Homework due week 6 February 26

Create a prototype of your project. Your prototype needn’t be pretty or complete, but must demonstrate some functionality. Your goal should be to have more than half the work done by this deadline.

Your final project is due on March 5. As I said in class, you may choose your own topic. I suggested something with motors and control or something like Pong. You may chose anything you want, but it must be completed in 2 weeks. I encourage you to consult with me (via email) to discuss your idea and verify that it is appropriate. You must do this in the next few days so that you have time left to make the prototype by the deadline.

Homework due week 7 March 5

Inability to chose a project will not excuse you.

If you want to play with sound and Processing, take a look at the minim library: Examples -> Libraries -> Minim -> PlayAFile

Week 6 February 26

  1. Review: What have we learned?
  2. Project and prototype presentations
  3. What do you need to learn to finish your project?
  4. Elevator demo?
  5. Open lab

Week 7 March 5

  1. Project presentations
  2. Fritzing
    1. Download from
    2. Make this schematic
    3. Make a printed circuit board (PCB) layout for this circuit. Below is an example, but you should try to make your own layout without copying mine:

Homework due week 8 March 12

Complete your circuit schematic and PCB layout in Fritzing. You do not have to do a breadboard view.

Week 8 March 12

Project feedback

Midterm grades

PCB project

  1. Fritzing and Othermill instructions are here
  2. Copy Andrew’s Arduino Shield Layout V2.fzz from here
  3. Save to a different file
  4. Add at least one each LED, pushbutton, and resistive sensor. The sensor will be off-board so use a 2 pin header for connector (use mystery part, select 2 pins and reduce ring thickness). Later, we will learn how to add sensors to the other end.

Homework due week 9 March 19

Design a printed circuit board

  1. Your circuit can be any design you chose as long as it is one of the following:
    1. An Arduino shield with at least one each LED, pushbutton, and resistive sensor. The sensor will be off-board, use header for connector (use mystery part, select 2 pins and reduce ring thickness)
    2. A circuit that has an integrated circuit (e.g. the 754410 dual H-bridge)
    3. A circuit that has at least 12 components, including connectors and headers
    4. Other circuits with my approval. Please email me your circuit early for my feedback. You may use this opportunity to create a board for your final project.
  2. You must follow the rules we learned in class and described here to design a board that can be millled with the limitations of our mill.

Week 9 March 19

  • Office hours: Office hours: Tuesday 3:00PM-3:30PM, Thursday 11:00AM-11:30AM, or by appointment
  • Review PCBs
  • Discuss projects
    • Discuss projects of those of you who have something in mind
    • Feedback as to project suitability
    • Guidance for those who don’t have ideas

Homework due week 11 April 2

  • Get your PCBs cut. They do not need to be perfect but everyone must make at least one attempt.  The Hybrid Lab is open during spring break during these hours:Saturday (3/21): Closed
    Sunday: Closed
    Monday: 9AM-5PM
    Tuesday: 9AM-5PM
    Wednesday: Closed
    Thursday: 9AM-5PM
    Friday: 9AM-5PM
    Saturday: 12PM-8PM
    Sunday: 12PM-8PM
  • Each of you must identify 3 topics that you would like to learn about. These can be topics we’ve mentioned in class that you would like to learn more about, or they can be topics we have never discussed. You may refer to the list of possible topics at the very top of this page. Write this on your web page.
  • Consider areas of interest for your final project. Your project must incorporate at least two of the three areas we’ve covered: Arduino and electronics, Processing and programming, mechanisms and movement. I will provide specific project requirements for those who prefer that I chose for them, but I’d like to know what you’re interested in. Write this on your web page.

Week 11 April 2



Sensors and actuators are symettrical in that they both convert information from one form to another. Sensors: physical world information to some kind of electrical signal; Actuators: the other way around.

It is important to understand both of the ends of sensors and actuators:

  1. What physical property is the sensor sensing or the actuator affecting?
  2. How do the sensors and actuators  communicate, or interface, with the computer (or Arduino)?

Understanding interfaces is crucial for understanding sensors, as well as being useful in other cases where you need to exchange information with another component, computer, or even another Arduino

Formal Interfaces

  1. Digital voltage, either HIGH or LOW (e.g. switch, reed switch)
  2. Analog voltage (what you already know, e.g. photoresistor)
  3. Parallel
    1. LCD
  4. Serial
    1. SPI
    2. I2C
    3. asynchronous serial
  5. PWM
  6. Frequency
  7. Ultrasonic
  8. etc.

Ad-hoc Interfaces

  1. Interfacing Arduino to arbitrary electronics


Build the circuit on your PCB

  1. Think carefully about which is the top and which is the bottom
  2. Remember that traces on the one side of the board do not automatically connect to traces on the other side unless you solder both the top and the bottom layers to a wire, a pin, or a component lead
  3. Install the flat components first; they will stay in place when you turn the board upside down and solder the leads.
  4. After you solder the first set of components, cut the leads as short as possible
  5. Go on to the set of components that are the next height and repeat stops 3 and 4
  6. The last set of components should be the tallest components, usually the connectors. Use the appropriate Arduino headers, depending on whether you need to solder to the top side or the bottom side
  7. If your circuit uses an integrated circuit (IC):
    1. Do not solder the IC to the PCB; solder a socket in the right place, and later insert the IC into the socket
    2. Make sure to install the IC socket on the correct side
    3. Orient pin 1 of the socket to correspond with pin 1 of the IC. Although the socket orientation makes no electrical difference, it will help you install the IC in correctly.

Homework due week 12 April 9

  1. Find at least two sensors that are not yet on this list, and add yours with your name and a brief description. Simple sensors are perfectly acceptable, as well as exotic or obscure. Some places to start your research are here and here.
  2. Chose your final project and describe it on your blog. Some inspiration is here and here.
  3. Your project must not be too simple or too complicated.
  4. Your project must work. This means you should understand what your project needs and feel confident you can achieve it. A great video of a finished project doesn’t tell you anything about how the project was implemented. You need to understand the implementation. Even when projects are well documented, they still might not work. It’s not enough to copy a schematic or library, you need to understand it as you might have to fix it.
  5. Your description must include a block diagram of all the major hardware and software components you think you will need for your project. (Later you will prototype each of these major units to remove any doubt that you can get the project to work.)
  6. If you have any questions email me.

Week 12 April 9

  1. Review sensors
  2. Review final projects
  3. Intro to Yun
  4. Parse example


  • Replacing wire (USB or otherwise)
    • XBee
    • Cheap radio modules
    • Bluetooth
      • Hacking existing BT devices
      • Phone? You have to write your own Android/iOS application (very difficult)
  • WiFi
    • WiFi shields
    • Yun
  • BLE
    • BLE shield
    • Blend Micro (Arduino + built-in BLE shield)
    • Phone? You have to write your own Android/iOS application (very difficult)
  • Internet
    • Interface via a web server
    • Storing and retrieving information from the cloud (Parse)
    • Using public APIs (Temboo)
    • Twilio
    • IFTTT
  • Issues
    • Peer-to-peer WiFi (one reason the cloud is so important)

Homework due week 13 April 16

Refine your project definition. You will present this in class next week. Your presentation (which must also be on your blog or web page) must include the following:

  • Description
  • Block diagram of hardware (if used)
  • Block diagram or pseudo-code (described here and here) of software (if used)
  • Block diagram of mechanisms (if used)
  • Parts list
  • Links or references to technical details (hardware, software, or mechanism) that you will be copying
  • Technical details (hardware, software, or mechanism) that you will be developing, creating, or making yourself
  • Identify two areas that you are most concerned about

Week 13 April 16

Project Presentations

  • 5 minute presentation
  • 10 minute discussion

Last meeting April 30

Present your projects


Discussion: What to prepare for your review next week

  1. Select a few (3-4) of your very best projects from all of your classes to talk about. You only have 10 minutes for this so select carefully. Make notes to keep in your hand during your presentation. You don’t need to prepare a fully written speech, but make note of the key points you want to address that will remind you of everything you want to say. Index cards are often handy for this. Practice your presentation. Speak loudly and clearly, and don’t go too fast.
  2. Bring all (or most) of your work from all of your classes so that you can show them if they come up in the conversation. From this class, you should bring:
    1. Your midterm project
    2. Your PCB
    3. Your final project
    4. Be prepared to show your blog

Final assignment: Final project documented on your blog/website due Sunday 10 May at 10 AM

Assignments received after this deadline will not be accepted. Do not ask for extensions as none will be granted.

Your final project must be documented so that someone else could build it without your help. Your documentation must include at least the following, along with anything else you think is necessary or helpful:

  • Project overview
  • Schematic, if used
  • Arduino code, if used
  • Processing code, if used. If it’s too large store it elsewhere and provide a link
  • Your software must be well documented so that someone reading your code will understand what’s going on
  • Other code, if used. If it’s too large store it elsewhere and provide a link
  • Links to resources you used
  • Describe any problems and solutions, if solutions where found
  • Explain how you tested and debugged the problems that someone trying to follow your instructions might encounter
  • Parts list. Provide specific details and links as necessary

Your documentation must follow all the guidelines that we discussed in class. Review the assignments and your notes.


  • If you want more LEDs than you have pins, you can do this by wiring up the LEDs in a matrix. The LEDs can be connected directly to the Arduino pins (which limits the number of LEDs you can have) or through an IC such as a shift register which can be extended indefinately. Using a matrix requires slightly more complex software.
    • This Instructable has excellent instructions on how to create the matrix of the LEDs. It uses shift registers.
    • Another Instructable using shift registers has an excellent explanation of how the matrix control works and how the shift register works.
    • In this tutorial from the Arduino website the LEDs rows and columns are connected directly to Arduino pins with no shift registers. The software includes an interrupt handler to automate refreshing the display. Note that it’s quite old and since it depends on a library it may no longer work.
  • Introduction to Arduino video
  • Extra resources on the solderless breadboard are here, here, and here. Let me know if you find these helpful or not
  • Excellent introduction to Arduino: Arduino in a Nutshell
  • Adafruit’s Arduino lessons
  • Arduino tutorials on
  • Arduino course on Open Source Hardware Group. Also has projects and tutorials.
  • Jeremy Blum’s excellent series of Arduino video tutorials. Scroll down past the first few posts to get to Tutorial 15. Click on “Previous Posts to see earlier tutorials, or go directly to tutorial 1.
  • Traer Physics library for Processing, and a great example
  • Examples from Daniel Shiffman’s Learning Processing book
  • Various links for working with Arduino projects
  • Hybrid lab hours, including Spring Break hours
  • Hybrid Lab Facebook page, also showing Spring Break hours


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

One thought on “DESGN-653-01 Digital Electronics, Spring 2015, CCA

  1. Pingback: week 4 Homework | Sophie Shao

Leave a Reply

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