cassiopeia ltd - standard arduino workshop
TRANSCRIPT
standard Arduino workshop 2017
Hands-on Arduino introduction
Tom Tobbackwww.cassiopeia.hk2017
standard Arduino workshop 2017
some of Tom’s projectscassiopeia.hk/category/projects/
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
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• ...
standard Arduino workshop 2017
Our program for today
terminology 4software 2basic electronics 4projects 20+
metronometheremin
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
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
standard Arduino workshop 2017
Arduino boards➔ many official boards➔ different sizes➔ different connections➔ use same code➔ mostly compatible➔ extra functions via shields
standard Arduino workshop 2017
Arduino UNO
standard Arduino workshop 2017
Arduino-style boards
➔ many copies➔ many improvements➔ extra functions included
(Wifi, GPS, motor, Ethernet,...)➔ use same code➔ mostly compatible➔ cheaper!
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..
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
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
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:
standard Arduino workshop 2017
From prototype to product
standard Arduino workshop 2017
From prototype to product
standard Arduino workshop 2017
Breadboard = connections
standard Arduino workshop 2017
Breadboard power rails
5V to red lineGND to blue line
Optional:connect to other side
standard Arduino workshop 2017
Breadboard
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
standard Arduino workshop 2017
Arduino: blinkBlink: the ‘hello world’ of Arduino
220 ohm
standard Arduino workshop 2017
resistor colour code
220 ohm = 220 Ωred red black black (brown)
10k ohm = 10,000 Ωbrown black black red (brown)
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
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
standard Arduino workshop 2017
Arduino: RGB LED blink
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Ω)
standard Arduino workshop 2017
Arduino: potentiometer
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
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
standard Arduino workshop 2017
Arduino: Serial Plotter[LOOP]Serial.println(pot_value);
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
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
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
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!]
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
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
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
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)
standard Arduino workshop 2017
Basic theremin
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
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
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)];
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
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)
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); }
standard Arduino workshop 2017
Arduino: input via Serial Monitortop box of Serial Monitor = inputsend data from computer to Arduino - ASCII format (bytes)
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?]
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));
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/
standard Arduino workshop 2017
Arduino: kits
➔ Seeedstudio Sidekick Arduino kit
➔ Arduino Starter Kit
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/
standard Arduino workshop 2017
Thank you
www.cassiopeia.hk
Happy tinkering!