Fysisk Design 2013 Instruktorer Troels, Søren og Oskar
Introduktion - hvem er det der? Troels: Kandidat IT Produktudvikling Lyd med Arduino guy Søren: Bachelor IT Mac og Arduino guy Oskar: Kandidat IT Produktudvikling Arduino og Sensor guy Desuden kan vi alle hjælpe med jeres idéer og designs!
Agenda Lab tour Peter Krogh forelæsning @ Skype Arduino Intro Input = Sensors (tryk, distance, acceleration...) Output = Aktuator, lys, lyd, ild & stød Kode (IDE intro) Import af externe biblioteker Lyd med Arduino Pure Data intro Lyd med ekstern højtaler Opgaven i dag
Lab tour 1. Værksted 2. Opbevaringsrum og sensor 3. Lode og små-elektronik 4. Projektkasser og skabe
Arduino - http://arduino.cc Reference listen: http://arduino.cc/en/reference/homepage
The Arduino board 14 digital pins 6 pins with PWM, marked with ~ 6 analog input pins Pin 0 & 1 = TX & RX Bruges til at overføre programmer på Power: 3.3v output (50mA) 5v output (40mA) 3 x GND 9v input USB 5v input
Analog input Hvad er analog input Input i form a spænding 0V - 5V. ADC converter, konverterer signalet fra analog til digital Digitale værdier fra 0-1023. Eksempelvis et accelerometer.
Digital input/output Hvad er digital input? Input i form af spænding, enten 0V eller 5V. Digitale værdier 0 eller 1 (binære værdier). Eksempelvis en knap. Hvad er digital output? Output i form af enten 0V eller 5V. F.eks. tænde/slukke diode. PWM = Pulse Width Modulation. Simulering af analoge værdier fra 0 til 255, f.eks. en diode, som skal kunne lyse med tre forskellige lysstyrker.
Sensors / Input Analog Sensors: Tryk (pres) Lys Lyd Temperatur Barometer Luftfugtighed Accelerometer Gyroskop Piezo/vibration Afstand Gas Variabel modstand Bevægelse Digitale Sensors: RFID Knapper (On/Off) Magnetkort (ID-kort) Magnet
Analog Setup Tryk sensor - pull down resistor
Analog Kode //Setup køres kun én gang void Setup(){ //Sætter seriel-forbindelsen op m. BAUD 9600 Serial.begin(9600); } //Loop køres "uendeligt" antal gange void Loop(){ //Læser værdier fra den analoge pin A0 //Analog pins er altid inputs int sensorvalue = analogread(a0); //Skriver variablen sensorvalue til COMporten Serial.println(sensorValue); }
Digital Setup
Digital Kode //Setup køres kun én gang void Setup(){ //Sætter serial-forbindelsen op m. BAUD 9600 Serial.begin(9600); //pinmode sætter pin 2 til digital INPUT pinmode(2, INPUT); } //Loop køres "uendeligt" antal gange void Loop(){ //Læser værdier fra den digitale pin 2 int sensorvalue = digitalread(2); //Skriver variablen sensorvalue til COMporten Serial.println(sensorValue); }
Aktuators, lys, lyd, ild og stød Aktuators: Lineær aktuatorer Roterende aktuatorer 180 grader 360 grader DC Motor Lys: Light Emitting Diode = LED Displays Lyd: Højtalere Buzzers Ild og Stød: Gå til spejder og hent et 9v batteri og sæt tungen på!
Aktuator Setup
Aktuator Kode // Importere bibliotek #include <Servo.h> // Laver et Servo objekt til at styre servoen Servo myservo; //Setup køres kun én gang void setup() { myservo.attach(9); //attaches the servo on pin 9 } //Loop køres "uendeligt" antal gange void loop() { // Skriver en vinkel til servoen myservo.write(50); delay(15); // Venter 15ms }
LEDSetup
LEDKode - TÆND/SLUK const int LED = 9; int i = 0; //Setup køres kun én gang void setup() { //Sætter pin mode på pin 9 til OUTPUT pinmode(led, OUTPUT); } //Loop køres "uendeligt" antal gange void loop(){ digitalwrite(led,high); //Tænd delay(500); //Vent 500ms digitalwrite(led,low); //Sluk delay(500); //Vent 500ms }
LED - Kode - FADE in/out m. PWM const int LED = 9; int i = 0; //Setup køres kun én gang void setup() { pinmode(led, OUTPUT); } //Loop køres "uendeligt" antal gange void loop(){ for(i = 0; i < 255; i++) { analogwrite(led, i); // i 0 til 254 delay(10); //Vent 10ms } for (i = 255; i > 0; i--){ analogwrite(led, i); // i 255 til 0 delay(10); //Vent 10ms } }
Arduino IDE Koden http://arduino.cc/en/reference/homepage Live eksempel!
Arduino IDE - some build-in functions Delay: delay(ms) Serial: Serial.begin(BAUD), Serial.print(string), Serial. println(string + new line) Map: map(value, fromlow, fromhigh, tolow, tohigh)
PAUSE :)
Pure Data Pure Data er et real-time visuelt programmeringsmiljø Anvendes til lyd-, video- og grafikprogrammering. Open source
Eksempel i Pure Data
Komponenter i Pure Data Inlet Outlet
Argumenter (lidt som i Java...)
Control level & signal level thin cable = flow of control data thick cable = flow of signal
Oscillatorer [osc~] Producerer en sinus kurve med en frekvens bestemt af argumentet, som gives med. [phasor~] Producerer en sawtooth kurve med en frekvens bestemt af argumentet som gives
DAC [dac~] Digital to Analog Converter Konverterer digital signal (44100 samples/sek) til elektriske signaler.
Matematik
Matematik og mange flere...
Tids objekter [metro] sender bangs i et interval givet ved argumentet til objektet. I dette tilfælde sendes bangs hvert 2000ms. Objektet startes desuden med et bang til dets inlet. Ligesom [metro], men kører kun én gang. Dvs. et bang sendes til dets inlet, og 3000ms efter sendes et bang fra dets outlet.
Tids objekter Ligesom [delay] objektet, men kan sende alle mulige beskeder, eksempelvis numre, med et delay. Kan bedst forklares ved handson eksperimenter :)
Hjælpe objekter [Bang] [Bang] bruges til at sætte en "lavine" af beskeder i gang. Hvis værdien på venstre inlet er mindre end værdien på højre inlet, så sendes den ud af venstre outlet. Omvendt, hvis værdien er ligmed eller større, så sendes de nud af højre outlet. Værdier på den venstre inlet routes til de korrekte outlets ud fra argumenterne i [route].
Hjælpe objekter Værdien 0 på højre inlet blokerer for værdien på venstre inlet, imens værdien 1 på højre inlet, lader væriden på venstre inlet passere. [trgger bang bang] Først sendes et bang på højre outlet, derefter sendes et bang på venstre outlet. Fungerer altid fra højre i mod venstre.
Afspil lyd fra fil (understøtter w.av og.aiff) playing sound file "voice.wav" playing sound file selected from file explorer
Afspil MIDI note
Mere avanceret lyd eksempel Kontrol af playback
Interface Pure Data med Arduino Interfacet består af to dele.. PD (PureData patch): "PureDataFramework. pd" Arduino kode bibliotek: "FysiskDesignLib" Begge dele kan findes på Fysisk Design hjemmesiden.
Interface Pure Data med Arduino Åbn PureDataFramework.pd
Interface Pure Data med Arduino Brug FysiskDesignLib Først inkluderes FysiskDesignLib #include <FysiskDesignLib.h> I setup() funktionen laves kaldet FysiskDesignLib.begin(); Brug én enkelt metode til at sende værdier til Pure Data frameworket. Det første argument er værdien og det andet argument er pin nummeret FysiskDesignLib.sendValue(1003, 5);
Interface Pure Data med Arduino Eksempel med FysiskDesignLib brugbiblioteket i brug
Spil lyd med ekstern højtaler void loop(){ /*creates square wave on pin 8, with frequency 400Hz and duration of 1000ms*/ tone(8, 400, 1000); }
Opgaven i dag Rød Gul Grøn - Kør!! Lav et lyskryds. Følgende scenarie skal overholdes: Når en bil nærmer sig krydset, skal blinklyset skifte fra rød til gul til grøn. Når bilen er kørt forbi, skal blinklyset skifte tilbage til rød. I har disse ting til rådighed: Sharp (IR) distance sensor LED dioder Højtaler Tryk sensor Servo
Oversigt sensorer/aktuatorer
Tryk sensor
Sharp (IR) - afstands sensor http://code.google.com/p/gp2y0a21yk-library/ Ellers brug denne metode til at beregne afstanden i cm: distance = ((2914 / (sensorvalue + 5)) -1);
Flex sensor Kan godt være ustabil, men prøv at mappe værdierne den laver til noget du/i kan bruge..
Ping sensor Lidt tricky... men ret præcis http://arduino.cc/en/tutorial/ping
Knock sensor 1 mega Ohm http://www.arduino.cc/en/tutorial/knocksensor
RFID sensor
Potentiometer
Servo aktuator
Knap
Google - You KNOW IT! Brug google til at søge på "Arduino" + din sensor/aktuator...
Liste over ting vi har: 8 Ohm vandtæt højtaler HItec HS-311 Servo Stepper motor DC motor HItec HS-322HD Servo Parallax standard servo Arduino UNO Arduino Leonardo Arduino Wifi Shield Heating pad 50x150mm Flexinol (SMA Wire) Firgelli L12 Linear Actuator 100mm m/ styring SM-S4303R 360grader Servo HYX-S0090F Servo med metalgear Tower Pro SG-5010 Servo Miga NanoMuscle Miga Rotary 6P FlexiForce 100 Sensor Force pad 40x40mm Flex sensor Solenoid pin Rod magnet Ø6 x 13mm Triple Axis Accelerometer Mx2125 double axis accelerometer 3-axis accelerometer m/3-axis magnetometer BUZZER, PIEZO,CONTINUOUS,73DB Vibration Motor LilyPad Vibe Board GTC-16011 16X1 LCD Serial Miniature OLED Module 1.5" Membrane Potentiometer - 500mm BOB-09964 Electret Microphone PIR Motion Sensor Sharp IR distance sensor 300mm Sharp IR distance sensor 800mm PING Sensor Arduino Prototype Shield V2 Arduino Prototype Shield V2 PCB ER400TS - RF Transmitter ER400RS - RF Reciver Arduino host shield FTDI Basic WRL-10393 BT mate silver WRL-10269 BT Modem BlueSMiRF Silver LilyPad XBee Board Arduino Wireless Proto Shield Xbee Board Xbee Antenna Module RFID Reader IDParallax RFID Reader RFID Tag Ø10, Ø20 & Ø40 RFID Tag creditcard RFID Tag key
Hvis du mangler noget så kontakt Rune... :D