Welcome to my Major Studio: Interactive class page. Most of my work, for now, will appear on the blog. All the work I do in the class will appear there, so keep an eye open for the torrent of new stuff that will appear week after week.
Haptics Research
My group in studio was assigned to investigate touch interfaces by digging into vibrating motors, timed stimulus, and other odd bits of perception. The results of our work are detailed here.
First Prototypes
For our initial assignment, we were tasked to build devices that communicated to the users via their sense of touch.
Arduino Coding Session
Today, we will run through the basics of Arduino programming. To follow along, please go to the reference section of the Arduino site and step through the functions as we go.
Also, download the files below. They are the Arduino code examples we'll follow once we start making real circuits.
Intro
- Analog "Voltage"
- Voltage in 1024 divisions between 0 and 5V
Data Types
- numbers
- byte 0 - 255
- space saving! use this when possible!
- int
- handy for negative numbers and most other uses bigger than a byte
- long
- -2,147,483,648 to 2,147,483,647
- Four times bigger than a byte
- Do you REALLY need numbers this size? Only use this when necessary
- char
- but you can use ASCII characters instead of numbers
- google for "ASCII table" to see what number is what character
- Handy to know for sensors and other stuff that uses serial. Bytes = chars.
- arrays
- an array is a kind of list of other data types
- can be set to be whatever size you need
- arrays are numbered starting from 0
Control structures
- switch case
- more complicate branching
- like if the input is 1, go to first base, 2 go to second base, 3 go to third, 4 home run, default strike out
- after each case, be sure to add break; otherwise, it'll keep on going
- for loop
- good for loop a set number of times
- like looping through all the pins
- while
- good for loop an unknown number of times
- maybe until something happens to break out
Tutorial 1: Data and Serial
Arduino Hooked UpNow we'll run the knight_rider_1 tutorial. Open up the files in the zip archive. All you need for this is to plug in the Arduino to your computer.
Once the board is plugged in, hit reset on the board, then click the Upload to I/O icon on the Arduino interface. Once that's done, click the Serial Monitor icon to see the numbers move up and down. Now you're talking (to the Arduino!)
Digital Read/Write
- pinMode
- takes the pin to be determined
- takes the mode -> in or out
- MUST do this for most pins. Forgetting this will get you in trouble
- digitalWrite
- takes pin and sets it HIGH or LOW
- that is, gives that pin 0 or 5V
- digitalRead
- takes pin and returns HIGH or LOW
Other Cool Stuff
- Math
- max, min, contrain, randomSeed, random
- Time
- delay
- important for adding pauses
- otherwise things will run crazy fast
Tutorial 2: Digital Read and Write
Knight LightsNow let's put some of this stuff together into a new circuit. You'll need four LEDs, four 220 ohm or 470 ohm resistors, one 1K ohm resistor, a push button, and a bunch of wires.
Hook four wires into the Arduino's digital outputs (check the code to see which ones.) Connect the smaller resistors to each of those wires, then connect an LED to each resistor with its short leg to ground. Be sure to hook up the 5V and GND lines between your Arduino and breadboard.
Connect the 1K resistor to ground (this is a pull down) and to one pole of the switch. Hook that same pole to the input on the arduino. Hook the other pole to the 5V source.
You're all set!
Analog Read/Write
- Analog pins don't require pinMode -- they are fixed
- analog read pins are on a separate set up pins
- analogue write pins (PWM pins) are on 9, 10, and 11
- analogWrite takes a pin and a value (but the value must be between 0 and 255)
- analogRead takes a pin (must be numbered from the analog pins) and returns a value 0 - 1023
- This is four times larger than analogWrite
- The number corresponds with the voltage
- You can test your sensors and see what voltage that give off with a multimeter, then build your circuit around that
- or check the output from serial and calibrate your application that way
Tutorial 3: Fun With Pot and Vibrators
Buzzy BasicsOkay, actually, that's a pot as in potentiometer. Nyuk, nyuk. Anyway, let have some fun here!
- Connect pot to analog in pin
- Connect vibrator to PWM out pin
- Get the input for the analog in
- Scale the input
- Scaling adjusts the input values of 0 - 1024 to a different range that we can use
- In this case, we want the output to be from 0 to 127
- write the output to the PWM pin
Advanced Stuff
- shiftOut
- turns numbers into streams of data
- handy for working with other chips
- especially simple ones that don't take serial
- pulseIn
- Can measure pulses sent in by simple devices and chips