introduction to arduino - concordia universityslab.concordia.ca/.../09/cart360_intro_arduino.pdf ·...
TRANSCRIPT
INTRODUCTION TO ARDUINO
TANGIBLE MEDIA & PHYSICAL COMPUTING
ARDUINO HARDWARETHE IDE & SETUP BASIC PROGRAMMING CONCEPTS DEBUGGING & HELLO WORLD INPUTS AND OUTPUTS DEMOS
AGENDA
ARDUINO HISTORYIN 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 & HELPARDUINO FORUM ARDUINO REFERENCE INSTRUCTABLES LADYADA ARDUNIO PLAYGROUND THE ITP PHYSICAL COMPUTING WIKI MAKE: PROJECTS
ARDUINO BOARDS** DRAFTARDUINO 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 R3ARDUNIO 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
ARDUINO HARDWARETHE IDE & SETUP BASIC PROGRAMMING CONCEPTS INPUTS AND OUTPUTS DEMOS
AGENDA
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!
LIBRARIESUNDER 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
ARDUINO HARDWARETHE IDE & SETUP BASIC PROGRAMMING CONCEPTS INPUTS AND OUTPUTS DEMOS
AGENDA
THE ARDUINO LANGUAGEEVENTHOUGH 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.
COMPILATIONYOU 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.
FUNCTIONSPLEASE 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); …}
VARIABLESPROGRAMS 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 UNOA VARIABLE MUST HAVE A DATATYPE: boolean 1 byte true/falsechar 1 byte -127 to 127 (ASCII)unsigned char 1 byte 0 to 255 (ASCII)byte 1 byte 0 to 255int/short 2 bytes -32768 to 32767unsigned int 2 bytes 0 to 65535long 4 bytes -2*31 to 2*31 -1unsigned long 4 bytes 0 to 2*32 -1float 4 bytes 6-7 decimals of precision (total)
VARIABLE SCOPEint 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;}
CONSTANTSSOME 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
CONSTANTSSOME 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.
CONSTANTSDEFINE 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
OPERATORSARDUINO SUPPORTS UNARY AND BINARY OPERATIONS:
Arithmetic: + , - , * , / , % Compound: += ,-= ,*= , /= Inc & Dec: ++ , - - Comparison: == , != , < , > , ≥ ,≤ Logical: ! , && , || Bitwise: << , >> , | , &,^
CONDITIONAL STATEMENTSif ( 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 CASE1: 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 LOOP1: 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 LOOP1: 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 LOOP1: 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 )
ARRAYSA 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 ELEMENTSTHE 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 containsrandom 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 ITERATIONTO 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] …;}
ARDUINO HARDWARETHE IDE & SETUP BASIC PROGRAMMING CONCEPTS INPUTS AND OUTPUTS DEMOS
AGENDA
ANALOG AND DIGITAL SIGNALSWE 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 SIGNALSMICROCONTROLLERS: 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/ODIGITAL 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 setmode: INPUT, OUTPUT, INPUT_PULLUP
DIGITAL I/O: READdigitalRead ( pin );pin: the number (int) of the pin to readreturns HIGH or LOW.
EXAMPLE: #define BUTTON_PIN 2;void setup() { pinMode(BUTTON_PIN, OUTPUT); }
void loop() { int val = digitalRead(BUTTON_PIN); }
DIGITAL I/O: WRITEdigitalWrite ( pin, value );pin: the number (int) of the pin to readvalue: HIGH or LOW.
EXAMPLE: #define LED_PIN 7;void setup() { pinMode(LED_PIN, INPUT); }
void loop() { digitalWrite(LED_PIN,HIGH); }
ANALOG I/O: READANALOG 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 readreturns an int between 0 and 1023.
EXAMPLE: void loop() { int val = analogRead(A0); }
ANALOG I/O: WRITINGUSE DIGITAL PINS LABELED WITH ~ analogWrite ( pin, value );pin: the number (int) of the pin to readvalue: between 0 (always off) & 255 (always on)
EXAMPLE: void loop() { int val = analogRead(A0); //0 to 1023 analogWrite( 3, val/4); //0 to 255}
ARDUINO HARDWARETHE IDE & SETUP BASIC PROGRAMMING CONCEPTS INPUTS AND OUTPUTS DEMOS
AGENDA
DEMO 1: DIGITAL OUTBLINK LED
DEMO 2: DIGITAL IN /OUTBLINK LED ONLY WHEN BUTTON PRESSED 2A: USE BUTTON TO TURN LED ON AND AGAIN OFF
DEMO 3: DIGITAL OUT /ANALOG INCHANGE DELAY OF BLINKING LED ACCORDING TO POT VALUE
USE A POT TO ALTER VALUE OF AN LED ****PLEASE CHANGE LED TO PIN 11 *****
DEMO 4: PWM OUT /ANALOG IN
DEMO 4A & B: DIGITAL IN / PWM OUT4A: 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 IITHE ETUDE