introduction to arduino - concordia universityslab.concordia.ca/.../09/cart360_intro_arduino.pdf ·...

Post on 12-Jun-2020

21 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

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 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

top related