TANGIBLE MEDIA & PHYSICAL COMPUTING INTRODUCTION TO ARDUINO
AGENDA ARDUINO HARDWARE THE IDE & SETUP BASIC PROGRAMMING CONCEPTS DEBUGGING & HELLO WORLD INPUTS AND OUTPUTS DEMOS
ARDUINO HISTORY IN 2003 HERNANDO BARRAGÁN CREATED THE DEVELOPMENT PLATFORM WIRING AS A MASTER'S THESIS PROJECT AT IDII, UNDER THE SUPERVISION OF MASSIMO BANZI AND CASEY REAS, KNOWN FOR THEIR WORK ON THE PROCESSING LANGUAGE. GOAL: CREATE SIMPLE, LOW COST TOOLS FOR CREATING DIGITAL PROJECTS BY NON ENGINEERS. WIRING CONSISTED OF A PCB WITH AN ATMEGA 168 MICRO CONTROLLER, AN IDE BASED ON PROCESSING AND LIBRARY FUNCTIONS TO PROGRAM THE CONTROLLER EASILY. IN 2005, MASSIMO BANZI, DAVID MELLIS AND DAVID CUARTIELLES, ADDED SUPPORT FOR THE CHEAPER ATMEGA8 MICROCONTROLLER TO WIRING. THEY FORKED THE WIRING SOURCE CODE AND STARTED RUNNING IT AS A SEPARATE PROJECT, CALLED ARDUINO.
WHAT IS AN ARDUINO TODAY? ARDUINO IS AN OPEN-SOURCE ELECTRONICS PROTOTYPING PLATFORM BASED ON FLEXIBLE, EASY-TO- USE HARDWARE AND SOFTWARE. IT IS INTENDED FOR ARTISTS, DESIGNERS, HOBBYISTS, AND ANYONE INTERESTED IN CREATING INTERACTIVE OBJECTS OR ENVIRONMENTS. THE PREMIER RESOURCE FOR ANYTHING ARDUINO - THE HOME OF THE ORIGINAL DOCUMENTATION FOR THE IDE, BUNDLED LIBRARIES, AND THE HARDWARE: HTTPS://WWW.ARDUINO.CC/
ARDUINO: INSPIRATION & HELP ARDUINO FORUM ARDUINO REFERENCE INSTRUCTABLES LADYADA ARDUNIO PLAYGROUND THE ITP PHYSICAL COMPUTING WIKI MAKE: PROJECTS
ARDUINO BOARDS** DRAFT ARDUINO MAKES SEVERAL DIFFERENT BOARDS, EACH WITH DIFFERENT CAPABILITIES. A FEW OPTIONS THAT ARE WELL-SUITED TO SOMEONE NEW TO THE WORLD OF ARDUINO: UNO R3 LILYPAD ARDUINO ARDUINO MEGA R3 ARDUNIO LEONARDO 3RD PARTY MANUFACTURERS CERTIFIED BY ARDUINO
ARDUINO UNO SPECS ATMEL ATMEGA328P 8-BIT MICROCONTROLLER 32KB OF FLASH MEMORY FOR APPLICATION PROGRAMS, 2KB OF SRAM 1KB OF EEPROM FOR NON-VOLATILE DATA. THE CLOCK SPEED IS 16MHZ.
ARDUINO UNO 1 & 2 : POWER (USB /BARREL JACK)
ARDUINO UNO 3&4&5 : PINS: 5V, 3.3V, GND
ARDUINO UNO 6 : PINS: ANALOG
ARDUINO UNO 7 & 8 : PINS: DIGITAL
ARDUINO UNO 9 : PINS: AREF
ARDUINO UNO 10 : RESET BUTTON
ARDUINO UNO 11 : POWER LED INDICATOR
ARDUINO UNO 12 : TX & RX LEDS
ARDUINO UNO 13 : MAIN IC
ARDUINO UNO 14 : VOLTAGE REGULATOR
AGENDA ARDUINO HARDWARE THE IDE & SETUP BASIC PROGRAMMING CONCEPTS INPUTS AND OUTPUTS DEMOS
DOWNLOAD & SETUP PREREQUISITES: LATEST JAVA SDK ( SHOULD BE PRE-INSTALLED) DOWNLOAD: HTTPS://WWW.ARDUINO.CC/EN/MAIN/SOFTWARE FOLLOW THE INSTALLATION GUIDE (FOR YOUR OS): HTTPS://WWW.ARDUINO.CC/EN/GUIDE/HOMEPAGE
THE IDE
LET S UPLOAD! PLUG YOUR ARDUINO INTO YOUR COMPUTER VIA THE USB CABLE SELECT THE CORRECT BOARD : (TOOLS> BOARDS) SELECT THE SERIAL/COM PORT: (TOOLS > PORT) OPEN THE BLINK EXAMPLE SKETCH BY GOING TO: FILE > EXAMPLES > 1.BASICS > BLINK
LET S UPLOAD! WITH YOUR ARDUINO BOARD CONNECTED, AND THE BLINK SKETCH OPEN, PRESS THE UPLOAD BUTTON. AFTER A SECOND, YOU SHOULD SEE SOME LEDS FLASHING ON YOUR ARDUINO, FOLLOWED BY THE MESSAGE DONE UPLOADING IN THE STATUS BAR OF THE BLINK SKETCH. IF EVERYTHING WORKED, THE ONBOARD LED ON YOUR ARDUINO SHOULD NOW BE BLINKING! YOU JUST PROGRAMMED YOUR FIRST ARDUINO!
LIBRARIES UNDER FILE > EXAMPLES, YOU WILL ALREADY FIND SOME USEFUL LIBRARIES WITH EXAMPLE SKETCHES( EEPROM, SOFTWARE SERIAL ) YOU CAN ALSO FIND A LIST WITH NAMES AND DESCRIPTIONS OF ALL THE LIBRARIES CURRENTLY INSTALLED IN YOUR IDE. GO TO SKETCH> INCLUDE LIBRARY >MANAGE LIBRARIES, AND THE LIBRARY MANAGER WILL POP UP, ALLOWING YOU TO VIEW AND INSTALL NEW LIBRARIES EASILY
AGENDA ARDUINO HARDWARE THE IDE & SETUP BASIC PROGRAMMING CONCEPTS INPUTS AND OUTPUTS DEMOS
THE ARDUINO LANGUAGE EVENTHOUGH THE ARDUINO LANGUAGE IS C++, MOST OF THE TIME YOU WILL BE PROGRAMMING PROCEDURALLY USING C, A SUBSET OF C++. THOSE WITH A FAMILIARITY WITH JAVA WILL NOT FIND PROGRAMMING FOR THE ARDUINO HARD. C++ IS OBJECT ORIENTED - AND EXTERNAL LIBRARIES ARE WRITTEN USING THIS PARADIGM. YOU NEED TO UNDERSTAND HOW TO INSTANTIATE OBJECTS FROM THESE LIBRARIES AND INVOKE THEIR METHODS. YOU WILL PROBABLY NOT HAVE TO CREATE YOUR OWN CLASS DEFINITIONS FROM SCRATCH - RATHER WE WILL FOCUS ON PROGRAM FLOW, FUNCTIONS AND OPTIMIZATION STRATEGIES.
COMPILATION YOU WRITE CODE IN THE ARDUINO IDE. YOUR SKETCH IS COMPILED INTO MACHINE CODE, WHICH THE MICRO CONTROLLER UNDERSTANDS. WE NEED A COMPILER TO SUPPORT THIS PROCESS: LUCKILY ARDUINO COMES WITH OPEN SOURCE C++ COMPILERS. WHEN YOU PRESS UPLOAD, THE IDE AUTOMATICALLY STARTS THE COMPILER, COMPILES THE CODE AND SENDS IT TO THE MICRO CONTROLLER VIA USB CABLE.
BASIC PROGRAMMING CONCEPTS AS EVERY USEFUL PROGRAMMING LANGUAGE, C++ IS MADE UP OF VARIOUS KEYWORDS AND CONSTRUCTS. THERE ARE CONDITIONALS, FUNCTIONS, OPERATORS, VARIABLES, CONSTRUCTORS, DATA STRUCTURES, AND MANY OTHER THINGS.
STRUCTURE OF A SKETCH: VOID SETUP(){ /*PUT YOUR SETUP CODE HERE */} THIS FUNCTION IS EXECUTED ONCE (WHEN PROGRAM STARTS) VOID LOOP(){/*MAIN CODE HERE */} THIS FUNCTION IS EXECUTED REPEATEDLY UNTIL YOU RESET OR CUT POWER. THESE FUNCTIONS MUST EXIST IN ORDER FOR THE PROGRAM TO COMPILE CORRECTLY.
FUNCTIONS PLEASE WRITE CUSTOM FUNCTIONS TO KEEP YOUR CODE ORGANIZED AND MODULAR! FUNCTION DEF EX: int sumfunction (int a, int b) { int c = a + b; return c; } FUNCTION CALL: void loop(){ int res = sumfunction(5,6); }
VARIABLES PROGRAMS ARE MOST USEFUL WHEN THEY PROCESS DATA: FROM USER, SENSOR, NETWORK, LOCAL FILE SYSTEM, LOCAL MEMORY WE MUST STORE THIS DATA IN MEMORY - SO THAT THE EXECUTING PROGRAM CAN PERFORM STANDARD OPERATIONS ON THE DATA: WRITE, READ, MODIFY AND USE. A VARIABLE: ASSOCIATES A MEMORY LOCATION WITH A NAME. PLEASE USE MEANINGFUL NAMES AND START WITH THEM WIT A LOWERCASE LETTER.
STANDARD DATATYPES FOR UNO A VARIABLE MUST HAVE A DATATYPE: boolean 1 byte true/false char 1 byte -127 to 127 (ASCII) unsigned char 1 byte 0 to 255 (ASCII) byte 1 byte 0 to 255 int/short 2 bytes -32768 to 32767 unsigned int 2 bytes 0 to 65535 long 4 bytes -2* 31 to 2 *31-1 unsigned long 4 bytes 0 to 2 *32-1 float 4 bytes 6-7 decimals of precision (total)
VARIABLE SCOPE int vala; int valb =6; void setup(){ int vala = 4; } void loop(){ int res = sumfunction(vala,valb); } int sumfunction (int a, int b) { int vala = a + b; return vala; }
CONSTANTS SOME INBUILT CONSTANTS FOR UNO: HIGH (INPUT): A VOLTAGE GREATER THAN 3.0V IS PRESENT AT THE PIN HIGH (OUTPUT): 5V SIGNAL IS OUTPUT LOW (INPUT): A VOLTAGE LESS THAN 1.5V IS PRESENT AT THE PIN LOW(OUTPUT): 0V SIGNAL IS OUTPUT
CONSTANTS SOME INBUILT CONSTANTS FOR UNO CONT: A DIGITAL PIN IS CONFIGURED AS AN INPUT OR OUTPUT USING THE PINMODE() FUNCTION. USE THE KEYWORD INPUT, OUTPUT, OR INPUT_PULLUP AS A PARAMETER TO THIS FUNCTION, DEPENDING ON YOUR INTENTIONS TRUE: ANY INTEGER (BOOLEAN SENSE) THAT IS NOT 0. FALSE: 0.
CONSTANTS DEFINE YOUR OWN: #DEFINE: GIVE A CONSTANT A NAME BEFORE COMPILING: #define <NAME> <value> CONST: MAKES A VARIABLE READ-ONLY const <datatype> <NAME> = <value>; GOOD PRACTICE: CAPITALIZE CONSTANTS
OPERATORS ARDUINO SUPPORTS UNARY AND BINARY OPERATIONS: Arithmetic: +, -, *, /, % Compound: +=,-=,*=, /= Inc & Dec: ++, - - Comparison: ==,!=, <, >,, Logical:!, &&, Bitwise: <<, >>,, &,^
CONDITIONAL STATEMENTS if ( boolean expr is true ) { /*perform instructions in this clause*/ } else if ( another boolean expr is true ) { /* perform instructions in this clause*/ } else { /*previous statements were false*/ }
SWITCH CASE 1: TESTVAL IS THE VARIABLE THAT WE TEST WITH 2: EXECUTE CORRESPONDING SWITCH STATEMENT 3: BREAK : JUMP OUT OF THE SWITCH CONSTRUCT 4: DEFAULT : IF NO OTHER CASE IS MATCHED switch ( testval ) { case 1: { // do this; break; } case 2: { // do this; break; } case n: { //do this; break; } default: { // no other cases were true; } }
FOR LOOP 1: COUNTER START 2: TERMINATING CONDITION 3: HOW MUCH TO CHANGE COUNTER EACH TIME for ( int i = 0; i < max ; i++ ) { /* do whatever repeatedly until counter(here: var named i) reaches max. */ }
WHILE LOOP 1: COME UP WITH BOOLEAN EXPRESSION 2: STATEMENTS INSIDE WHILE CLAUSE WILL EXECUTE UNTIL BOOLEAN EXPRESSION IS FALSE 3: MAY NOT EVEN EXECUTE ONCE 4: BEWARE OF INFINITE LOOPS while ( boolean expression is true ) { /* do whatever repeatedly until boolean expression is false */ }
DO WHILE LOOP 1: COME UP WITH BOOLEAN EXPRESSION 2: STATEMENTS INSIDE WHILE CLAUSE WILL EXECUTE UNTIL BOOLEAN EXPRESSION IS FALSE 3: WILL EXECUTE AT LEAST ONCE 4: BEWARE OF INFINITE LOOPS do { /* do whatever repeatedly until boolean expression is false */ } while ( boolean expression is true )
ARRAYS A COLLECTION OF VARIABLES (ALL OF THE SAME DATATYPE) THAT ARE ACCESSED WITH AN INDEX NUMBER. int numbers[6]; int mypins[] = {2, 4, 8, 3, 6}; int mysensvals[6] = {2, 4, -8, 3, 2}; char message[6] = hello ; 1; DECLARE AN ARRAY WITHOUT INITIALIZING IT 2: INITIALIZE AN ARRAY WITHOUT SPECIFYING A SIZE 3: SPECIFY SIZE AND INITIALIZE AN ARRAY 4: WHEN DECLARING AN ARRAY OF TYPE CHAR: SIZE == N+1, TO HOLD THE REQUIRED NULL CHARACTER.
ACCESSING ARRAY ELEMENTS THE FIRST ELEMENT OF THE ARRAY IS AT INDEX 0, AND THE LAST ELEMENT IS ACCESSED BY ARRAYSIZE-1: int testarray[ 10 ] = { 9,3,2,4,3,2,7,8,9,11 }; // testarray [ 0 ] contains 9 // testarray [ 9 ] contains 11 // testarray [ 10 ] is invalid and contains random information (other memory address) ASSIGN AND RETRIEVE: testarray [ 0 ] = 10; int test = testarray [ 3 ];
ARRAYS :: SIZEOF() THE SIZEOF OPERATOR RETURNS THE NUMBER OF BYTES IN A VARIABLE TYPE, OR THE NUMBER OF BYTES OCCUPIED BY AN ARRAY. SINGLE VAR USAGE: int test = 10; sizeof ( test ) returns 2. USE TO DETERMINE SIZE OF A GIVEN DATATYPE sizeof ( int ) returns 2.
ARRAYS :: SIZEOF() AND ITERATION TO DETERMINE ARRAY SIZE, IT DEPENDS ON THE DATATYPES OF ELEMENTS STORED IN THE ARRAY: int testints [ ] = { 1,2,3,4,5,6 }; int arraysize = sizeof(testints )/sizeof(int); arraysize == 6 ITERATE THROUGH AN ARRAY: for (int i = 0; i<sizeof(testints)/sizeof(int); i++) { // do something with testint[i] ; }
AGENDA ARDUINO HARDWARE THE IDE & SETUP BASIC PROGRAMMING CONCEPTS INPUTS AND OUTPUTS DEMOS
ANALOG AND DIGITAL SIGNALS WE LIVE IN AN ANALOG WORLD: ANALOG SIGNALS HAVE INFINITE POSSIBILITIES DIGITAL SIGNALS AND OBJECTS DEAL IN THE REALM OF THE DISCRETE OR FINITE, MEANING THERE IS A LIMITED SET OF VALUES THEY CAN BE. WORKING WITH ELECTRONICS MEANS DEALING WITH BOTH ANALOG AND DIGITAL SIGNALS, INPUTS AND OUTPUTS. OUR ELECTRONICS PROJECTS HAVE TO INTERACT WITH THE REAL, ANALOG WORLD IN SOME WAY, BUT MOST MICROPROCESSORS, COMPUTERS, AND LOGIC UNITS ARE PURELY DIGITAL COMPONENTS. THESE TWO TYPES OF SIGNALS ARE LIKE DIFFERENT ELECTRONIC LANGUA GES, SOME COMPONENTS UNDERSTAND BOTH, OTHERS JUST ONE.
ANALOG AND DIGITAL SIGNALS AN ELECTRONIC SIGNAL: A VOLTAGE THAT CHANGES OVER A GIVEN TIME PERIOD, & IS PASSED BETWEEN DEVICES IN ORDER TO SEND AND RECEIVE INFORMATION TRANSMISSION MEDIUM: WIRE OR BY AIR THROUGH RADIO FREQUENCY
ANALOG SIGNALS A TIME-VERSUS-VOLTAGE GRAPH OF AN ANALOG SIGNAL SHOULD BE SMOOTH AND CONTINUOUS.
DIGITAL SIGNALS MOST COMMON DIGITAL SIGNALS WILL BE ONE OF TWO VALUES LIKE EITHER 0V OR 5V. TIMING GRAPHS OF THESE SIGNALS LOOK LIKE SQUARE WAVES. DIGITAL WAVES ARE STEPPING, SQUARE, AND DISCRETE.
ANALOG AND DIGITAL SIGNALS MICROCONTROLLERS: ARE CAPABLE OF DETECTING BINARY SIGNALS, WHICH ARE INHERENTLY DIGITAL: FOR EXAMPLE IF MIICROCONTROLLER IS POWERED FROM 5V: 0V = BINARY 0 &5V = BINARY 1 WORLD: MORE COMPLEX: WHAT IF THE SIGNAL IS 2.72V? IS THAT A 0 OR A 1? WHEN READING AN ANALOG SENSOR, WE NEED TO MEASURE SIGNALS THAT VARY: (ANALOG SIGNALS) - HOW? SOLUTION: MOST MICROCONTROLLERS HAVE AN ADC: A DEVICE TO CONVERT THESE VOLTAGES INTO VALUES THAT THE MICROCONTROLLER CAN WORK WITH (DISCRETE VALUES) BY CONVERTING FROM THE ANALOG WORLD TO THE DIGITAL WORLD, WE CAN BEGIN TO USE ELECTRONICS TO INTERFACE TO THE ANALOG WORLD AROUND US.
DIGITAL I/O DIGITAL PINS: 0 TO 13 ON THE ARDUINO UNO READ THE STATE OF BUTTONS, SWITCHES WRITE (CHANGE THE STATE) OF LEDS, TRANSISTORS THE PIN CAN BE IN TWO POSSIBLE STATES : HIGH /LOW. TO CONFIGURE A SPECIFIED PIN TO BEHAVE EITHER AS AN INPUT OR AN OUTPUT: pinmode ( pin, mode ); pin: the number (int) of the pin to set mode: INPUT, OUTPUT, INPUT_PULLUP
DIGITAL I/O: READ digitalread ( pin ); pin: the number (int) of the pin to read returns HIGH or LOW. EXAMPLE: #define BUTTON_PIN 2; void setup() { pinmode(button_pin, OUTPUT); } void loop() { int val = digitalread(button_pin); }
DIGITAL I/O: WRITE digitalwrite ( pin, value ); pin: the number (int) of the pin to read value: HIGH or LOW. EXAMPLE: #define LED_PIN 7; void setup() { pinmode(led_pin, INPUT); } void loop() { digitalwrite(led_pin,high); }
ANALOG I/O: READ ANALOG PINS: A0 TO A5 ON THE ARDUINO UNO 10-BIT ANALOG TO DIGITAL CONVERTER: MAP INPUT VOLTAGES BETWEEN 0-5 VOLTS TO 0-1023 analogread ( pin ); pin: the number (int) of the pin to read returns an int between 0 and 1023. EXAMPLE: void loop() { int val = analogread(a0); }
ANALOG I/O: WRITING USE DIGITAL PINS LABELED WITH ~ analogwrite ( pin, value ); pin: the number (int) of the pin to read value: between 0 (always off) & 255 (always on) EXAMPLE: void loop() { } int val = analogread(a0); //0 to 1023 analogwrite( 3, val/4); //0 to 255
AGENDA ARDUINO HARDWARE THE IDE & SETUP BASIC PROGRAMMING CONCEPTS INPUTS AND OUTPUTS DEMOS
DEMO 1: DIGITAL OUT BLINK LED
DEMO 2: DIGITAL IN /OUT BLINK LED ONLY WHEN BUTTON PRESSED 2A: USE BUTTON TO TURN LED ON AND AGAIN OFF
DEMO 3: DIGITAL OUT /ANALOG IN CHANGE DELAY OF BLINKING LED ACCORDING TO POT VALUE
DEMO 4: PWM OUT /ANALOG IN USE A POT TO ALTER VALUE OF AN LED ****PLEASE CHANGE LED TO PIN 11 *****
DEMO 4A & B: DIGITAL IN / PWM OUT 4A: USE A BUTTON AS TRIGGER TO FADE AN LED W/ LOOP 4B: USE A BUTTON AS TRIGGER TO FADE AN LED W/O LOOP
DEMO 5: RGB LED COLOR MIXING INTRO -> MULTIPLE ANALOG OUT
DEMO 6: SOUND TONE EXERCISE - MAPPING VALUES TO A SPEAKER
DEMO 6: SOUND II THE ETUDE