52
standard Arduino workshop 2017 Hands-on Arduino introduction Tom Tobback www.cassiopeia.hk 2017

Cassiopeia Ltd - standard Arduino workshop

Embed Size (px)

Citation preview

Page 1: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Hands-on Arduino introduction

Tom Tobbackwww.cassiopeia.hk2017

Page 2: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

some of Tom’s projectscassiopeia.hk/category/projects/

Page 3: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Before we start… check the connection between your Arduino board and your laptop:

● plugin your Arduino board USB cable into your laptop● open Arduino IDE software (www.arduino.cc) ● open the Blink sketch from File>Examples>Basic● pick the correct port from Tools>Serial Port ● pick the correct board type from Tools>Board “Uno”● hit ‘upload’ to test the connection● look for ‘Done uploading’ and check if the onboard LED

is blinking

Page 4: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: what is it?Arduino is an open-source electronics prototyping platformbased on flexible, easy-to-use hardware and softwareIt is intended for artists, designers, hobbyists and anyone interested in creating interactive objects or environments• sensors• sound• light• wifi• ...

Page 5: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Our program for today

terminology 4software 2basic electronics 4projects 20+

metronometheremin

Page 6: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino terminology

software:• IDE• web editor• sketch• uploading

hardware:• board• microcontroller (mcu)• pin headers• input• output• digital/analog• breadboard• jumper wires• components

Page 7: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino vs Raspberry Pi➔ looks similar➔ similar price

➔ micro-controller vs mini-computer

➔ Arduino: IO➔ Pi: OS

Other popular platforms: ESP8266, Particle Photon, micro:bit

Page 8: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino boards➔ many official boards➔ different sizes➔ different connections➔ use same code➔ mostly compatible➔ extra functions via shields

Page 9: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino UNO

Page 10: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino-style boards

➔ many copies➔ many improvements➔ extra functions included

(Wifi, GPS, motor, Ethernet,...)➔ use same code➔ mostly compatible➔ cheaper!

Page 11: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino software: IDE➔ Integrated Development Environment➔ Write sketch -> upload to board➔ Useful examples➔ ‘Libraries’ to make our life easier

Always make sure to pick the correct BOARD➔ Connect using USB cable, pick correct PORT➔ Upload sketch➔ Check output of Serial Monitor➔ Save your sketches..

Page 12: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino software: Web EditorSame functionality with:➔ Browser based editor (needs login)➔ Accessible from any computer➔ Storage in the cloud

➔ Need to sign up for username➔ Need to install the Arduino Create plugin for upload

Page 13: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Basic electronics➔ DC direct current vs alternating current AC➔ voltage: volts 5V (usb), 3V3, 9V➔ current: milli ampere 40 mA = 0.04 A➔ power: watts 1-2 W (USB limit)

➔ resistors: reduce voltage➔ diodes: one-way + light➔ capacitors: small battery

➔ schematics

Page 14: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Basic electronicsDIGITAL: on/off

1/0 true/false high/low 0V/5V

ANALOG: variable 0->5V

Ohm’s law: U = I * R

Kirchoff’s laws:

Page 15: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

From prototype to product

Page 16: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

From prototype to product

Page 17: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Breadboard = connections

Page 18: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Breadboard power rails

5V to red lineGND to blue line

Optional:connect to other side

Page 19: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Breadboard

Page 20: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino projects for today➔ Blink: the ‘hello world’ of Arduino pinMode

digitalWritedelay

➔ Read push button digitalRead➔ Read potentiometer analogRead➔ Output to Serial Monitor Serial.print➔ Buzzer music tone➔ Potentiometer + blink + buzzer = metronome➔ Read photoresistor/LDR➔ Fading (PWM) analogWrite➔ Input to Serial Monitor Serial.read

Page 21: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: blinkBlink: the ‘hello world’ of Arduino

220 ohm

Page 22: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

resistor colour code

220 ohm = 220 Ωred red black black (brown)

10k ohm = 10,000 Ωbrown black black red (brown)

Page 23: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: ‘blink’ sketch/* Blink Turns on an LED on for one second, then off for one second, repeatedly. Most Arduinos have an on-board LED you can control. On the Uno and Leonardo, it is attached to digital pin 13. If you're unsure what pin the on-board LED is connected to on your Arduino model, check the documentation at http://www.arduino.cc This example code is in the public domain. modified 8 May 2014 by Scott Fitzgerald */

// the setup function runs once when you press reset or power the boardvoid setup() { // initialize digital pin 13 as an output. pinMode(13, OUTPUT);}

// the loop function runs over and over again forevervoid loop() { digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(13, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second}

initialisation

setup { }

loop { }

bonus:attach a second LED to pin12 doing exactly opposite of LED on pin13

Page 24: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: RGB LED blinkRed Green Blue = primary colours (additive)

V = common negativeR = red positiveB = blue positiveG = green positive(including resistors)

use digitalWrite to mix colourse.g. on pin 10, 11, 12

Page 25: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: RGB LED blink

Page 26: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

[optional] Arduino: button

boolean button_pressed = false;---pinMode(2, INPUT);---button_pressed = digitalRead(2);

if (button_pressed == true) { digitalWrite(13, HIGH);}else { digitalWrite(13, LOW);}

use pinMode(2, INPUT_PULLUP);or: pull-down resistor (e.g. 10kΩ)

Page 27: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: potentiometer

Page 28: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: potentiometerint pot_value; [VARIABLE]

[SETUP][LOOP]pot_value = analogRead(A0);

[change your delay to:]delay(pot_value);

[analogRead returns 0->1023]

5k ohm

Page 29: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: Serial Monitor[SETUP]Serial.begin(9600);

[LOOP][try one by one:]Serial.print(“hello”);[or]Serial.println(“hello”);[or]Serial.print(“pot value: “);Serial.println(pot_value); bonus:

print description of your program on startup and format output with \t

Page 30: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: Serial Plotter[LOOP]Serial.println(pot_value);

Page 31: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: metronomeBlink with variable speed, and bpm in serial monitorHow?

read pot_value (analogRead)print pot_value (Serial.print)calculate beats per minute (=)print BPM (Serial.print)

LED ON for 100ms (digitalWrite)LED OFF for variable time: pot_value

100ms variable pot_value

ON OFF

Page 32: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: metronometotal ‘beat’ length = 100ms ON + variable OFFbeat_length = 100 + pot_value

beats per minute = (60 * 1000) / beat_length

BPM will vary from 53 to 600

100ms variable pot_valuebonus:attach a second LED to pin12 doing exactly opposite of LED on pin13

ON OFF

total beat length

Page 33: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: metronome

‘int’ type does not work with large numbers(larger than around 32000, 16 bits)type to use = ‘long’

long bpm;[SETUP][LOOP]

bpm = (60 * 1000L) / (100 + pot_value);

bonus:format your output with \t

Page 34: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: soundPiezo buzzer = speaker

SYNTAX:tone(pin, freq);tone(pin, freq, duration);noTone(pin);

[SETUP][LOOP]tone(3, 261); [put in correct place!]noTone(3); [put in correct place!]

Page 35: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: metronome + sound

● LED on and beep (100ms) + LED off and no beep● variable speed with potentiometer● serial monitor BPM

frequency examples (Hz):C 261D 293E 329G 392

bonus:try different frequencies

Page 36: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: light dependent resistor

LDR or photoresistor = variable resistor, similar to potentiometer -> analogReadvoltage divider: sum=5V and analog input sees 0->5V

1K ohm

Page 37: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: light dependent resistor

int ldr_value;[SETUP][LOOP]ldr_value = analogRead(A1);Serial.println(ldr_value);

check on the Serial Monitor for min, max values of the LDR

how to go from e.g. 50-500 values to 200-5000Hz frequencies? use ‘map’ function

Page 38: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: light dependent resistor

int freq;

[SETUP][LOOP]

freq = map(ldr_value, 50, 500, 200, 5000);

tone(3, freq); [just update this line]

SYNTAX: map(value, fromLow, fromHigh, toLow, toHigh)

Page 39: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Basic theremin

Page 40: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: basic theremin sketchint pot_value;int ldr_value;int freq;long bpm;

void setup() {pinMode(13, OUTPUT);Serial.begin(9600);

}

void loop() {pot_value = analogRead(A0);bpm = (60 * 1000L) / (100 + pot_value);

ldr_value = analogRead(A1);freq = map(ldr_value, 50, 500, 200, 5000);

Serial.print(“BPM: “);Serial.println(bpm);

digitalWrite(13, HIGH);tone(3, freq);delay(100);

digitalWrite(13, LOW);noTone(3);delay(pot_value);

}

1

2

3

Page 41: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Advanced theremin

1. Use a pentatonic scale with a lookup table= table of frequencies on a pentatonic scale, accessible by index

2. Add a 2 step ‘sequencer’

1 loop = constant base note + variable note on second beat

100ms variable pot_value 100ms variable pot_value

base note silence variable pentatonic note silence

Page 42: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Pentatonic theremin

Pentatonic scale with a lookup table

int pentatonicTable[50] = { 0, 19, 22, 26, 29, 32, 38, 43, 51, 58, 65, 77, 86, 103, 115, 129, 154, 173, 206, 231, 259, 308, 346, 411, 461, 518, 616, 691, 822, 923, 1036, 1232, 1383, 1644, 1845, 2071, 2463, 2765, 3288, 3691, 4143, 4927, 5530, 6577, 7382, 8286, 9854, 11060, 13153, 14764 };

OLD: freq = map(ldr_value, 50, 500, 200, 5000);

NEW: freq = pentatonicTable[map(ldr_value, 50, 500, 20, 45)];

Page 43: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

2 step sequencer theremin

1 loop = constant base note + variable note on second beat

tone(3, 206); noTone(3); tone(3, freq); noTone(3);delay(100); delay(pot_value); delay(100); delay(pot_value);

Now you can add steps, change length of steps etc...

100ms variable pot_value 100ms variable pot_value

base note silence variable pentatonic note silence

Page 44: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: AnalogWrite (PWM)

Analog input = 0 to 5 VArduino does not outputa real analog signal (0-5V)

analogWrite(pin, value);PWM = Pulse Width Modulation

only available on pins 3,5,6,9,10,11can use this to fade LED

values from 0 to 255 (8 bits)

Page 45: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: AnalogWrite (PWM)‘for’ structure = loop for X times

Open sketch: Examples > 03.Analog > Fading[change your breadboard LED to pin 9] // fade in from min to max in increments of 5 points: for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { // sets the value (range from 0 to 255): analogWrite(ledPin, fadeValue); // wait for 30 milliseconds to see the dimming effect delay(30); }

Page 46: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: input via Serial Monitortop box of Serial Monitor = inputsend data from computer to Arduino - ASCII format (bytes)

Page 47: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: input via Serial MonitorLet’s read a number 0-9 for intensity of LED[remove all commands from loop]

int brightness;[SETUP]Serial.begin(9600);[LOOP]if (Serial.available()) { brightness = Serial.read(); Serial.print("Arduino received: "); Serial.println(brightness);}[switch to ‘No line ending’ at bottom of Serial Monitor?]

Page 48: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: input via Serial Monitorfor analogWrite we need to map the brightness from 48-57 (ASCII for 0 to 9)to 0-255 for analogWrite (0% to 100%)

[add this line in the loop]analogWrite(ledPin, map(brightness, 48, 57, 0, 255));

Page 49: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: suppliersONLINE➔ Official Arduino shop: http://arduino.cc/

great documentation, projects, forum➔ Seeedstudio: http://www.seeedstudio.com/depot/➔ Telesky: https://telesky.world.tmall.com/ ➔ Adafruit: http://www.adafruit.com/ great documentation

IN HONG KONG - Apliu St➔ WECL http://www.weclonline.com/wecl_eng/index.html➔ Tell How http://tellhow-tech.com/

Page 50: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Arduino: kits

➔ Seeedstudio Sidekick Arduino kit

➔ Arduino Starter Kit

Page 51: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Dimsum Labs

the hackerspace of HK www.dimsumlabs.com/ community of technology enthusiastsspace for creativity in Sheung Wan

Tuesday evening HackJamwww.facebook.com/groups/hackjamhk/

Page 52: Cassiopeia Ltd - standard Arduino workshop

standard Arduino workshop 2017

Thank you

www.cassiopeia.hk

Happy tinkering!