WiFi + hjemmeside
SSID: PhysicalKode: workshopHjemmeside: http://physical.io/tl(præsentation og kodeeksempler)
© Physical.io, 2020 1
Lær at lave kostumermed lyd og lysTeknisk Landsforbund, Haderslev, 03.02.2020
© Physical.io, 2020 2
I eftermiddag har vi
— Hygget. Med hinanden
— Lært. Om Arduino, wearables, lysdioder, knapper, mikrofon og programmering
— Bygget. Et projekt med den udleverede hardware
— Fået. Et projekt med hjem. Blod på tanden.
© Physical.io, 2020 3
Program 1/2
— Navnerunde, jer og os
— Hvad er Arduino?
— Hvad er wearables?
— Elektriske grundprincipper
— Hvad er der i posen?
— Forberedelser
— Øvelser og introduktioner
— Installation af de nødvendige programmer m.m.
— Hello World. Dit første program
— Frokost i kantinen (ca. 12.00-13.00)
© Physical.io, 2020 4
Program 2/2
— Øvelser og introduktioner
— Projekt
— PAUSE (ca. 14:40-15.00)
— Projekt
— Opsamling og evaluering (ca. 16.30-17)
© Physical.io, 2020 5
Slides og kodeeksempler
http://physical.io/tl
SSID: PhysicalKode: workshop
© Physical.io, 2020 6
Måske når vi ikke alle øvelser og det er
!
© Physical.io, 2020 7
Kursets formål
— Hands dirty med Arduino og Flora platformen, som bruges til wearables
— Få forståelse for de elektroniske komponenter
— Få forståelse for programmering og brug af Arduino-hardware og biblioteker
© Physical.io, 2020 8
Physical.io
© Physical.io, 2020 9
Physical.io - undervisning
© Physical.io, 2020 10
Physical.io - foredrag
© Physical.io, 2020 11
Physical.io - prototyper
© Physical.io, 2020 12
Physical.io + TL
— Physical computing
— DIY/DIT
— Making + open source
— 'Smart' alting
— Ny viden
— Inspiration
© Physical.io, 2020 13
Hvad laver man på et DIY/makerkursus?
— Selvbyg: Lodde, breadboard, samle
— Servos, lysdioder, knapper, sensors
— Eksperimenteren, samarbejde, videndeling
© Physical.io, 2020 14
Navneleg og jeres baggrund
—Elektronikerfaring
— Programmering
— Design
— Andet?
© Physical.io, 2020 15
Hvad er Arduino?
© Physical.io, 2020 16
Hvad er Arduino?
Baggrund
— 2003, Italien: Hernando Barragán skaber Wiring som en del af sin uddannelse i interaktionsdesign
— Massimo Banzi og Casey Reas er hans vejledere
— Reas' Processing er inspirationen - sketching med so!ware
— Projektet får udmærkelser og videreføres. Bliver med tiden og ad omveje til Arduino
© Physical.io, 2020 17
Hvad er Arduino?
Popularitet
— Open source hardware giver mulighed for nye typer boards
— Den lave barriere for at komme i gang gør det interessant for ikke-tekniske
— Den lave pris giver mulighed for udbredelse
— Internettet giver mulighed for videndeling
© Physical.io, 2020 18
Hvad er Arduino?
I brug
— Hobbyister
— Kunstnere
— Tekniske fagfolk
— En 'standard' for prototyper
© Physical.io, 2020 19
Hvad er Arduino?
I dag
— Boards fra helt små til store med forskellig funktionalitet
— BlueTooth / WiFi
— 32 BIT
— On-board sensors
— Wearables
— Kits med temaer fx. IoT, getting started mv.
— Aktive fora + so!wareudvikling
— Nye boards o!e
© Physical.io, 2020 20
Hvad er wearables?
© Physical.io, 2020 21
Hvad er wearables?
Overordnet
— 'Smart' tøj
— Smartwatches (bærbare sensorer + notifikationer fra smartphone)
— 'Pædometre' (bærbare sensorer - FitBit fx.)
— Gør-det-selv tøjtech (lys og sensorer)
© Physical.io, 2020 22
Hvad er wearables?
'Smart' tøj
© Physical.io, 2020 23
Hvad er wearables?
Smartwatches
© Physical.io, 2020 24
Hvad er wearables?
Pædometre
© Physical.io, 2020 25
Hvad er wearables?
Gør-det-selv tøjtech
© Physical.io, 2020 26
Elektriske grundprincipper
© Physical.io, 2020 27
Elektriske grundprincipper
Spænding
— Spændingen (volt) er differencen af energi mellem to punkter (mængden af vand)
© Physical.io, 2020 28
Elektriske grundprincipper
Strøm
— Strøm (ampere) er hastigheden/flowet (trykket på vandet)
© Physical.io, 2020 29
Elektriske grundprincipper
Modstand
— Modstanden (modstanden) er et materiales evne til at modstå hastigheden/flowet (vandrøret)
© Physical.io, 2020 30
Elektriske grundprincipper
Ohms lov
U = Spænding i voltI = Strøm i ampere R = Modstand i Ohm
© Physical.io, 2020 31
Elektriske grundprincipper
Mere forklaring om Elektriske principper
— Hvad er elektricitet
— Spænding, Strøm, Modstande og Ohms low
— LEDs (lysdioder)
(se også bagest i præsentationen)
© Physical.io, 2020 32
Hvad er der i posen?
© Physical.io, 2020 33
Hvad er der i posen?
Flora
— Arduino udviklingsboard som er god til tekstiler (ingen skarpe hjørner)
— USB
— Battery pack forbindelse
— 14 montage huller til at sy (6 er til strøm)
— 8 Digital GPIO muligheder
— I2C (til sensorer)
— 4 PWM muligheder
— 3 analoge muligheder
— Indbygget LED
— Indbygget Neopixel (RGB LED)
© Physical.io, 2020 34
Hvad er der i posen?
Flora kit
— FLORA main board
— 4 stk Flora RGB NeoPixels
— 3 x AAA Battery holder med JST connector og on/off kontakt
— Stainless Medium ledende tråd 18 meter
— Nåle
— 12 ledninger med krokodillenæb
— USB Kabel
— AAA batterier
© Physical.io, 2020 35
Hvad er der i posen?
Mikrofon
© Physical.io, 2020 36
Forberedelser
© Physical.io, 2020 37
Forberedelser
Flora Driver installation
Kun Windows: Drivers
© Physical.io, 2020 38
Forberedelser
Arduino IDE: Installation
— Hent den seneste version på https://www.arduino.cc/en/Main/So!ware
— En Arduinosketch består altid (næsten) af en Setup og en Loop funktion.
— I Setup forbereder man alting og Loop kører igen og igen.
© Physical.io, 2020 39
Forberedelser
Arduino IDE: Referencemanual
© Physical.io, 2020 40
Forberedelser
Arduino IDE: Installation af Flora board
Først: Preferences → Under "Additional Boards Manager URLs" indsæt: https://adafruit.github.io/arduino-board-index/package_adafruit_index.json
Dere!er: Tools/Værktøjer → Boards → Boards Manager: Søg på Flora og installer Adafruit AVR Boards by Adafruit
© Physical.io, 2020 41
Forberedelser
Arduino IDE: Installation af library
Sketch → Include Library → Manage Libraries: Adafruit Neopixel
© Physical.io, 2020 42
Øvelser og introduktioner
© Physical.io, 2020 43
Øvelser
Hello World - Blink med en LED (blink_led)
Værktøjer → Board → Adafruit FloraVærktøjer → Port → (Vælg port)
#define LED_PIN 7
void setup() { pinMode(LED_PIN, OUTPUT);}
void loop() { digitalWrite(LED_PIN, HIGH); delay(500); digitalWrite(LED_PIN, LOW); delay(500);}
Klik Upload (Pilen øverst →)
© Physical.io, 2020 44
Øvelser
Modificer Blink
Modificer blink_led/HELLO WORLD-eksemplet så det blinker to gange kort og venter 2 sekunder
© Physical.io, 2020 45
Introduktioner
Variabler
Når man laver programmer, spil etc. involverer det altid at man skal gemme og arbejde med forskellige slags data. Det gøres med variabler. En variabel indeholder/gemmer på noget data og navn giver det.
Nogle forskellige typer: char, byte, int, unsigned int, long, unsigned long, float, double
Deklaration/oprettelse:
int inputVariabel1;int inputVariabel2 = 0; // begge er korrekte
© Physical.io, 2020 46
Introduktioner
Variabler Scope og inititalisering
Scope: Der man deklarere en variabel bestemmer dens "scope". dvs hvor den kan bruges
Initalisering af Variabler:Variabler kan have en start værdi når de er deklareret eller ingen. Det er dog altid god skik at sikre sig man har valid data i variablen før den brugesEksempel:
int calibrationVal = 17; // declare calibrationVal and set initial value
© Physical.io, 2020 47
Introduktioner
Variabel Rollover
Når en variable når "lo!et"/Maximal værdi ruller den over til deres minimums værdi (typisk 0) og omvendt
byte x;x = 0;x = x - 1; // x indeholder nu 255..x = 255;x = x + 1; // x indeholder nu 0
© Physical.io, 2020 48
Introduktioner
Variabel eksempler
int temperature = analogRead(A2);int Alder = 30;if (Alder > 30){ // gør noget}else{ // gør noget andet ?}
© Physical.io, 2020 49
Øvelser
Standardfunktion: void setup()
setup()-funktionen kaldes når "sketchen"/programmet startes. Den bruges til at initialisere variabler, pin modes og andre ting der kun skal køres en gang.
int buttonPin = 3;
void setup(){ while (!Serial); // Venter indtil serial monitor åbnes Serial.begin(115200); pinMode(buttonPin, OUTPUT);}
void loop(){ // ...}
© Physical.io, 2020 50
Øvelser
Standardfunktion: void loop()
loop()-funktionen køres igen og igen, så længe der er strøm på Arduinoen. Vi bruger en krokodille-ledning som "knap" forbind den til GND og rør D6 for at "trykke" på knappen. Dette kunne evt. være 2 stk kobbertape som trykkes sammen.
const int buttonPin = 6;
// setup initialiserer seriel kommunikation og pin til knapvoid setup(){ while (!Serial); // Venter indtil serial monitor åbnes Serial.begin(115200); pinMode(buttonPin, INPUT);}
// loop checker knappen hver gang,// og sender via seriel forbindelse om knap er trykketvoid loop(){ if (digitalRead(buttonPin) == HIGH) Serial.write('High'); else Serial.write('Low');
delay(1000);}
© Physical.io, 2020 51
Introduktioner
Parenteser og kommentarer
; (semicolon){} (curly braces)// (single line comment)/* */ (multi-line comment)#define#include
© Physical.io, 2020 52
Øvelser
If-else (if_else)
Stille spørgsmål i Arduino/c.
void setup(){ while (!Serial); // Venter indtil serial monitor åbnes // initialiser seriel porten til 115200 bit per sekund Serial.begin(115200);
int Alder = 30; if (Alder > 30) { Serial.print("you are awesome"); } else { Serial.print("you are too young"); }}
void loop() {}
© Physical.io, 2020 53
Øvelser
While-løkke (while)
Gentag en kodeblok indtil en tilstand er mødt.
void setup(){ while (!Serial); // Venter indtil serial monitor åbnes // initialiser seriel porten til 115200 bit per sekund Serial.begin(115200);
int count = 0; while (count < 9) { Serial.print("The count is: "); Serial.print(count); Serial.println(); count = count + 1; } Serial.println("hej hej!");
while(true) { delay(1000); Serial.println("hello world"); }}
void loop() {}
© Physical.io, 2020 54
Øvelser
Funktioner (funktion_blink)
En funktion gør det muligt at genbruge din kode og gør det nemmere at være organiseret. Skal være deklareret (placeret) uden for andre funktioner.
#define LED_PIN 7
void setup() { pinMode(LED_PIN, OUTPUT);
// initialiser seriel porten til 115200 bit per sekund Serial.begin(115200); Serial.println("indtast antal blink");}
int blink(int antalblink){ int count = 0; while (count < antalblink) { digitalWrite(LED_PIN, HIGH); delay(500); digitalWrite(LED_PIN, LOW); delay(500); count ++; }}
void loop() { if (Serial.available()) { // læs tastetryk int antal = Serial.parseInt(); blink(antal); }}
© Physical.io, 2020 55
Øvelser
Seriel modtagelse og fortolkning (seriel_modtag)
#define LED_PIN 7
void setup(){ pinMode(LED_PIN, OUTPUT); // OBS husk at indstille til 'no line ending' nederst i den serielle monitor while (!Serial); // Venter indtil serial monitor åbnes // initialiser seriel porten til 115200 bit per sekund Serial.begin(115200); // skriv en linie til seriel porten Serial.println("Hello World!");}
void loop(){ // hvis der er modtaget data på seriel porten så læs en byte og // skriv den til seriel porten (loopback) if (Serial.available()) { // læs tastetryk char tast = Serial.read(); // hvis tastetryk er 'a' så tænd lysdiode if (tast == 'a') { digitalWrite(LED_PIN, HIGH); } else { digitalWrite(LED_PIN, LOW); } // send tastetryk tilbage Serial.write(tast); }}
© Physical.io, 2020 56
Øvelser
Onboard RGB LED aka Neopixel (floraonboardneopixeltest)
#include <Adafruit_NeoPixel.h>
#define PIN 8#define RGBLED_COUNT 1// Parameter 1 = number of pixels in strip// Parameter 2 = pin number (most are valid)// Parameter 3 = pixel type flags, add together as needed:// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)Adafruit_NeoPixel strip = Adafruit_NeoPixel(RGBLED_COUNT, PIN, NEO_GRB + NEO_KHZ800);
void setLEDs(int r, int g, int b);
void setup() { strip.begin(); strip.show(); // Initialize all pixels to 'off'}
void loop() { setLEDs(0x50, 0x00, 0x00); strip.show(); delay(500); setLEDs(0x00, 0x50, 0x00); strip.show(); delay(500); setLEDs(0x00, 0x00, 0x50); strip.show(); delay(500);}
void setLEDs(int r, int g, int b) { for (int i = 0; i < RGBLED_COUNT; i++) { strip.setPixelColor(i, r, g, b); }}
© Physical.io, 2020 57
Øvelser
Eksterne Neopixels
— Lav opstilling med 1, 2, 3 eller 4 neopixels ved hjælp af ledningerne
— Brug samme eksempel som ved intern neopixel
— Men sæt PIN til 6 og antal pixels korrekt
© Physical.io, 2020 58
Øvelser
Mikrofon (mikrofon)
— Tilføj mikrofonen og test at den virker med eksemplet
© Physical.io, 2020 59
Projekt
© Physical.io, 2020 60
Projekt
Overordnet
— Smart cap/kjole/skjorte
— Sys på stof
— Kombination af mikrofon og neopixels
© Physical.io, 2020 61
Projekt
Sytips
— Wearables syguide
— 10 sytips video
— Undgå neglelak mellem ledning og elektronik
— Pas på at sytråden ikke kortslutter hvis tekstilet foldes
— Lav knuderne på bagsiden og ikke oppe på elektroniksiden
— Brug gerne at lave dobbelt forbindelse med knude i midten
© Physical.io, 2020 62
Projekt
Mic to RGB (micToRgb)
— Brug mikrofon input (0-1023) til at tænde LEDs (0-255)
— Dvs. jo højere lyd desto kra!igere lys
© Physical.io, 2020 63
Projekt
VU meter (vuMeter)
— Volumen giver udslag på Neopixels.
© Physical.io, 2020 64
Projekt
Sparkle skirt (sparkleSkirt)
— Blinker et tilfældigt mønster når lyden er over et vist niveau
© Physical.io, 2020 65
Opsamling, evaluering + inspiration
(og ekstra information)
© Physical.io, 2020 66
Opsamling og evaluering
— Afsluttende spørgsmål og kommentarer
— Evaluering
© Physical.io, 2020 67
Inspiration
Inspiration til projekter:- https://www.youtube.com (søg på fx. Raspberry Pi projects, Arduino robots osv.)- http://www.instructables.com- http://hackaday.com- https://blog.adafruit.com- ledende stof
Køb af komponenter:- https://www.adafruit.com (USA)- https://www.sparkfun.com (USA)- http://www.watterott.com (Tyskland)- http://www.exp-tech.de (Tyskland)- https://shop.pimoroni.com (England)- http://eud.dx.com og http://dx.com (Kina og EU)- https://www.aliexpress.com (Kina)- https://www.elextra.dk/main.aspx (Danmark)
Andet:- Adafruit wearables kategori- Loddeguide- Labitat (Hackerspace/teknologifællesskab)- Arduino forum- Creative Applications (flotte projekter)
© Physical.io, 2020 68
Ekstra information
© Physical.io, 2020 70
På de følgende slides er information som kan være nyttig, hvis I vil arbejde videre hjemme.
© Physical.io, 2020 71
Elektriske grundprincipper
Beregn for modstand til LED
5 Volt = 2.0 Volt (LED) + Modstand
Modstand = 5 - 2.0 VoltModstand = 3 Volt
Modstandens størrelse = 3 V / 16 mA = 187.5 Ohm
© Physical.io, 2020 72
Elektriske grundprincipper
AC (og DC) strøm
© Physical.io, 2020 73
Elektriske grundprincipper
LED uden beregning
© Physical.io, 2020 74