Warning: Declaration of aec_contributor_list::form() should be compatible with WP_Widget::form($instance) in /var/www/ddlab/wp-content/plugins/ajax-event-calendar/inc/widget-contributors.php on line 0

Warning: Declaration of & CR_Data_Sources::add($name, $defining_module, $label_singular, $label_name, $table_basename, $col_id, $col_name, $args) should be compatible with & AGP_Config_Items::add($name, $defining_module, $args = Array) in /var/www/ddlab/wp-content/plugins/role-scoper/data_sources_rs.php on line 0

Warning: Declaration of & CR_Taxonomies::add($name, $defining_module, $label_singular, $label_name, $uses_standard_schema = true, $default_strict = true, $args = Array) should be compatible with & AGP_Config_Items::add($name, $defining_module, $args = Array) in /var/www/ddlab/wp-content/plugins/role-scoper/taxonomies_rs.php on line 0

Warning: Declaration of & CR_Capabilities::add($name, $defining_module, $src_name, $object_type, $op_type, $args = Array) should be compatible with & AGP_Config_Items::add($name, $defining_module, $args = Array) in /var/www/ddlab/wp-content/plugins/role-scoper/capabilities_rs.php on line 0
Pulse Sensor + Adafruit Neopixel | DD Lab

Nyeste indlæg

  • Denne hjemmeside er forældet!: DD Lab har fået en ny hjemmeside: http://ddlab.au.dk/ Denne hjemmeside bliver ikke længere brugt, og der vil derfor ikke blive lagt...
  • Oprydning i Schön: Vi gør klar til det nye semester og den halvårlige oprydning i Schön-bygningen.Det foregår d.17 august hvor vi gennemgår fællesarealer...
  • DD Lab holder ferielukket: Tik-tok tiden går og sommeren står for døren. DD Lab holder sommerlukket indtil semesterstart - god sommer til alle!...
  • Åbningstider, eksamensperiode F16: På grund af eksamener vil lab'et på flere tidspunkter være åbent uden bemanding. På disse tidspunkter kan der gøres brug...
  • Nye åbningstider fra 16/5: DD Lab holder igen åbent om mandagen, fra d.16/5 (og juni ud). Åbningstiderne er derfor som følger: Mandage: 11-15 Tirsdage: 10-16 Onsdage: 10-17 Torsdage:...

Pulse Sensor + Adafruit Neopixel

Adafruits neopixel kan eksempelvis sættes sammen med en Pulse Sensor, begge tilgængelige i labbet. Neopixels lyser så kraftigt at de sagtens kan ses i dagslys, man kan læse mere om den her. Vi har også den mindre udgave af ringen.

neopixel

Ved at sætte neopixel sammen med pulssensor kan man få et ret fedt udtryk, hvor ringen lyser op og fader ud ved hver pulsslag, efter at pulssensoren har opfanget pulsen. Du kan læse mere om pulssensoren her.

Vi har sammensat kodeeksemplerne fra PulseSensorAmped og Adafruit_Neopixel. Adafruit neopixels library skal lægges i din Arduino/libraries mappe. Herefter skal du genstarte Arduino IDE’et, hvis du har den åbent og du kan nu bruge vedhæftede kode:

#include <Adafruit_NeoPixel.h>

/*
>> Pulse Sensor Amped 1.2 <<
This code is for Pulse Sensor Amped by Joel Murphy and Yury Gitman
    www.pulsesensor.com 
    >>> Pulse Sensor purple wire goes to Analog Pin 0 <<<
Pulse Sensor sample aquisition and processing happens in the background via Timer 2 interrupt. 2mS sample rate.
PWM on pins 3 and 11 will not work when using this code, because we are using Timer 2!
The following variables are automatically updated:
Signal :    int that holds the analog signal data straight from the sensor. updated every 2mS.
IBI  :      int that holds the time interval between beats. 2mS resolution.
BPM  :      int that holds the heart rate value, derived every beat, from averaging previous 10 IBI values.
QS  :       boolean that is made true whenever Pulse is found and BPM is updated. User must reset.
Pulse :     boolean that is true when a heartbeat is sensed then false in time with pin13 LED going out.

This code is designed with output serial data to Processing sketch "PulseSensorAmped_Processing-xx"
The Processing sketch is a simple data visualizer. 
All the work to find the heartbeat and determine the heartrate happens in the code below.
Pin 13 LED will blink with heartbeat.
If you want to use pin 13 for something else, adjust the interrupt handler
It will also fade an LED on pin fadePin with every beat. Put an LED and series resistor from fadePin to GND.
Check here for detailed code walkthrough:

http://pulsesensor.myshopify.com/pages/pulse-sensor-amped-arduino-v1dot1

Code Version 1.2 by Joel Murphy & Yury Gitman  Spring 2013
This update fixes the firstBeat and secondBeat flag usage so that realistic BPM is reported.

*/

#define PIN            6

#define NUMPIXELS      24

//  VARIABLES
int pulsePin = 0;                 // Pulse Sensor purple wire connected to analog pin 0
int blinkPin = 13;                // pin to blink led at each beat
int fadePin = 5;                  // pin to do fancy classy fading blink at each beat
int fadeRate = 0;                 // used to fade LED on with PWM on fadePin

// these variables are volatile because they are used during the interrupt service routine!
volatile int BPM;                   // used to hold the pulse rate
volatile int Signal;                // holds the incoming raw data
volatile int IBI = 600;             // holds the time between beats, must be seeded! 
volatile boolean Pulse = false;     // true when pulse wave is high, false when it's low
volatile boolean QS = false;        // becomes true when Arduoino finds a beat.

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup(){
  pinMode(blinkPin,OUTPUT);         // pin that will blink to your heartbeat!
  pinMode(fadePin,OUTPUT);          // pin that will fade to your heartbeat!
  Serial.begin(115200);             // we agree to talk fast!
  interruptSetup();                 // sets up to read Pulse Sensor signal every 2mS 
  pixels.begin(); 
   // UN-COMMENT THE NEXT LINE IF YOU ARE POWERING The Pulse Sensor AT LOW VOLTAGE, 
   // AND APPLY THAT VOLTAGE TO THE A-REF PIN
   //analogReference(EXTERNAL);   
   for(int i=0;i<NUMPIXELS;i++){
    // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
    pixels.setPixelColor(i, pixels.Color(0,255,0)); // Moderately bright green color.
    //pixels.show(); // This sends the updated pixel color to the hardware.
  }
  pixels.show(); // This sends the updated pixel color to the hardware.
}

void loop(){
  sendDataToProcessing('S', Signal);     // send Processing the raw Pulse Sensor data
  if (QS == true){                       // Quantified Self flag is true when arduino finds a heartbeat
        fadeRate = 255;                  // Set 'fadeRate' Variable to 255 to fade LED with pulse
        //sendDataToProcessing('B',BPM);   // send heart rate with a 'B' prefix
        //sendDataToProcessing('Q',IBI);   // send time between beats with a 'Q' prefix
        QS = false;                      // reset the Quantified Self flag for next time    
     }

  ledFadeToBeat();
   delay(20);                             //  take a break
}

void ledFadeToBeat(){
    fadeRate -= 15;                         //  set LED fade value
    fadeRate = constrain(fadeRate,0,255);   //  keep LED fade value from going into negative numbers!
    //analogWrite(fadePin,fadeRate);          //  fade LED
  //pixels.setBrightness(fadeRate);
  for(int i=0;i<NUMPIXELS;i++){
    // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
    pixels.setPixelColor(i, pixels.Color(fadeRate,fadeRate/5,fadeRate/5)); // Moderately bright green color.
    //pixels.show(); // This sends the updated pixel color to the hardware.
  }
  pixels.show();  
}

void sendDataToProcessing(char symbol, int data ){
    Serial.print(symbol);                // symbol prefix tells Processing what type of data is coming
    Serial.println(data);                // the data to send culminating in a carriage return
  }

Du skal også bruge det andet kodestykke fra Pulse Sensor Amped. De to kodestykker, eller sketches, skal ligge i samme mappe. Når du åbner et af dem, skulle begge kodestykker gerne åbnes i to tabs i samme vindue.

volatile int rate[10];                    // array to hold last ten IBI values
volatile unsigned long sampleCounter = 0;          // used to determine pulse timing
volatile unsigned long lastBeatTime = 0;           // used to find IBI
volatile int P =512;                      // used to find peak in pulse wave, seeded
volatile int T = 512;                     // used to find trough in pulse wave, seeded
volatile int thresh = 512;                // used to find instant moment of heart beat, seeded
volatile int amp = 100;                   // used to hold amplitude of pulse waveform, seeded
volatile boolean firstBeat = true;        // used to seed rate array so we startup with reasonable BPM
volatile boolean secondBeat = false;      // used to seed rate array so we startup with reasonable BPM

void interruptSetup(){     
  // Initializes Timer2 to throw an interrupt every 2mS.
  TCCR2A = 0x02;     // DISABLE PWM ON DIGITAL PINS 3 AND 11, AND GO INTO CTC MODE
  TCCR2B = 0x06;     // DON'T FORCE COMPARE, 256 PRESCALER 
  OCR2A = 0X7C;      // SET THE TOP OF THE COUNT TO 124 FOR 500Hz SAMPLE RATE
  TIMSK2 = 0x02;     // ENABLE INTERRUPT ON MATCH BETWEEN TIMER2 AND OCR2A
  sei();             // MAKE SURE GLOBAL INTERRUPTS ARE ENABLED      
} 

// THIS IS THE TIMER 2 INTERRUPT SERVICE ROUTINE. 
// Timer 2 makes sure that we take a reading every 2 miliseconds
ISR(TIMER2_COMPA_vect){                         // triggered when Timer2 counts to 124
  cli();                                      // disable interrupts while we do this
  Signal = analogRead(pulsePin);              // read the Pulse Sensor 
  sampleCounter += 2;                         // keep track of the time in mS with this variable
  int N = sampleCounter - lastBeatTime;       // monitor the time since the last beat to avoid noise

    //  find the peak and trough of the pulse wave
  if(Signal < thresh && N > (IBI/5)*3){       // avoid dichrotic noise by waiting 3/5 of last IBI
    if (Signal < T){                        // T is the trough
      T = Signal;                         // keep track of lowest point in pulse wave 
    }
  }

  if(Signal > thresh && Signal > P){          // thresh condition helps avoid noise
    P = Signal;                             // P is the peak
  }                                        // keep track of highest point in pulse wave

  //  NOW IT'S TIME TO LOOK FOR THE HEART BEAT
  // signal surges up in value every time there is a pulse
  if (N > 250){                                   // avoid high frequency noise
    if ( (Signal > thresh) && (Pulse == false) && (N > (IBI/5)*3) ){        
      Pulse = true;                               // set the Pulse flag when we think there is a pulse
      digitalWrite(blinkPin,HIGH);                // turn on pin 13 LED
      IBI = sampleCounter - lastBeatTime;         // measure time between beats in mS
      lastBeatTime = sampleCounter;               // keep track of time for next pulse

      if(secondBeat){                        // if this is the second beat, if secondBeat == TRUE
        secondBeat = false;                  // clear secondBeat flag
        for(int i=0; i<=9; i++){             // seed the running total to get a realisitic BPM at startup
          rate[i] = IBI;                      
        }
      }

      if(firstBeat){                         // if it's the first time we found a beat, if firstBeat == TRUE
        firstBeat = false;                   // clear firstBeat flag
        secondBeat = true;                   // set the second beat flag
        sei();                               // enable interrupts again
        return;                              // IBI value is unreliable so discard it
      }   

      // keep a running total of the last 10 IBI values
      word runningTotal = 0;                  // clear the runningTotal variable    

      for(int i=0; i<=8; i++){                // shift data in the rate array
        rate[i] = rate[i+1];                  // and drop the oldest IBI value 
        runningTotal += rate[i];              // add up the 9 oldest IBI values
      }

      rate[9] = IBI;                          // add the latest IBI to the rate array
      runningTotal += rate[9];                // add the latest IBI to runningTotal
      runningTotal /= 10;                     // average the last 10 IBI values 
      BPM = 60000/runningTotal;               // how many beats can fit into a minute? that's BPM!
      QS = true;                              // set Quantified Self flag 
      // QS FLAG IS NOT CLEARED INSIDE THIS ISR
    }                       
  }

  if (Signal < thresh && Pulse == true){   // when the values are going down, the beat is over
    digitalWrite(blinkPin,LOW);            // turn off pin 13 LED
    Pulse = false;                         // reset the Pulse flag so we can do it again
    amp = P - T;                           // get amplitude of the pulse wave
    thresh = amp/2 + T;                    // set thresh at 50% of the amplitude
    P = thresh;                            // reset these for next time
    T = thresh;
  }

  if (N > 2500){                           // if 2.5 seconds go by without a beat
    thresh = 512;                          // set thresh default
    P = 512;                               // set P default
    T = 512;                               // set T default
    lastBeatTime = sampleCounter;          // bring the lastBeatTime up to date        
    firstBeat = true;                      // set these to avoid noise
    secondBeat = false;                    // when we get the heartbeat back
  }

  sei();                                   // enable interrupts when youre done!
}// end isr

Du kan se eksemplet her, hvor det blev sat op til Physical Computing workshoppen E2014: IMG_1259

Posted by

Tilmeldning til Arduino-workshop

Der er åben for tilmeldning til Arduino-workshoppen, der finder sted i DD lab på Finlandsgade 25 d. 18 og 19 april kl 10-16.

Tilmeldingen sker ved at skrive til rasl@dac.au.dk

Mere information kan findes på:

http://www.ddlab.dk/fysisk-interaktion-med-arduino-og-elektroniske-kredslob/

Posted by

Tilmelding til UNITY workshop

Tilmeldingen til UNITY workshoppen er åben og tilmeldning sker ved at skrive en mail til rasl@dac.au.dk

Workshoppen er mandag d. 16 marts, mandag d. 23 marts og mandag d. 30 marts. Alle dage 18-22

Mere information på: http://www.ddlab.dk/programmering-af-3d-visualiseringer-til-apps-i-unity/

Det UNITY 5 er netop udkommet i dag så få fat i det på:  http://unity3d.com/get-unity

Nedenunder ses en video af APP’en Draw in 3D udviklet af Steffan (der skal undervise)

Posted by

Reminder: laser cut workshop

Tilmeldingen til workshop med DDLABs nye lasercutter er åben og tilmeldning sker ved at skrive en mail til rasl@dac.au.dk

Workshoppen er lørdag d. 7 marts og søndag d. 8 marts, fra 10-16.

Mere information på: http://www.ddlab.dk/how-to-lasercut/

Herunder er en video af lab’ets nyerhvervede og -installeret  lasercutter!

Posted by

INDBRUD I DDLAB

Her til aften har der været indbrud i Schönbygningen/DD Lab, kl. 18:30, tyveriet blev heldigvis delvist spoleret.
MEN; tyvene var ikke brudt ind i bygningen! Kun i DD Lab. De var kommet ind af en åben yderdør, der normalt altid er låst!
Derfor; hvis du/I tillfældigvis har hørt eller set noget kort før ovenstående tidspunkt. Så må du/I meget gerne kontakte Rasmus Lunding rasl@cs.au.dk.

Posted by

Nye åbningstider for F15 i DD lab

Vi har nye åbningstider for forået 2015 i DD lab:

Mandage: 11-17
Tirsdage: 09 – 17
Onsdage: Lukket
Torsdage: 10 – 15
Fredage: 10 – 16

Vel mødt!

Posted by

Workshops i foråret 2015

DD Lab udbyder i samarbejde med ODDS og SAIS følgende tre workshops i foråret:

1. How to laser cutLaserCutterPic-F15

Vi har fået lasercutter! I samarbejde med Chomsky lab udbyder vi denne workshop i hvordan lasercutteren betjenes og du lærer hvordan maskinen kan indgå i din produktion af prototyper i forbindelse med studiet. Læs mere her.

2. Programmering af 3D visualiseringer til Apps i UnityUnityAppPic-F15

Vi udbyder igen en Unity workshop, denne gang fordelt over 3 aftener, således at deltageren kan nå at arbejde lidt videre med projektet i mellemtiden og blive hjulpet videre til næste trin den efterfølgende workshopgang. Læs mere her.

3. Fysisk interaktion med Arduino og Elektroniske KredsløbArduinoElectronicsPic-F15

Kendskab til elektroniske kredsløb er essentielt i fht. produktion af funktionelle prototyper. Til denne workshop introduceres til de grundlæggende koncepter og er både for begyndere og let-øvede brugere. Læs mere her.

 

Tilmelding til workshops åbnes tidligst 3 uger inden afholdelsen af workshoppen og sker via mail til rasl@dac.au.dk.

 

Vi glæder os til at se jer!

Posted by

Hvad er DD Lab?

annaddlab

Hvor er DD Lab?
DD Lab er en forholdsvis ny facilitet på Katrinebjerg etableret for at imødekomme et voksende behov for et sted hvor eksamens-, projekt- og forsknings-baserede aktiviteter kan udfolde sig. I Lab´et er der mulighed for at realisere ideér indenfor fysisk interaktion og digitalt design -fx i form af prototyper, og/eller produktion af fungerende mock-ups m.m.

Continue reading…

Posted by

Denne hjemmeside er forældet!

DD Lab har fået en ny hjemmeside: http://ddlab.au.dk/

Denne hjemmeside bliver ikke længere brugt, og der vil derfor ikke blive lagt nyheder og andet op her fremover. Opslagene vil indtil videre forblive på hjemmesiden, men gå til den nye hjemmeside for nyheder om åbningstider, nye projekter, arrangementer og andet fremover.

Posted by

Oprydning i Schön

Vi gør klar til det nye semester og den halvårlige oprydning i Schön-bygningen.Det foregår d.17 august hvor vi gennemgår fællesarealer og projektrum.
 
Derfor: hvis I har projekter eller udstyr stående som I vil gemme, så sørg for at fjerne det inden d.17. Hvis I ikke kan nå at fjerne det så send en mail til esbenh@cc.au.dk med en udførlig beskrivelse af hvad det er og hvornår I kan komme efter det.
 
Vi glæder os til et herligt E2016 med jer!

Posted by

DD Lab holder ferielukket

Tik-tok tiden går og sommeren står for døren. DD Lab holder sommerlukket indtil semesterstart – god sommer til alle!

Posted by

Åbningstider, eksamensperiode F16

På grund af eksamener vil lab’et på flere tidspunkter være åbent uden bemanding. På disse tidspunkter kan der gøres brug af lab’et som normalt, men der kan ikke foretages udlån, aflevering eller salg af materialer.

Det drejer sig om følgende tidspunkter:

Fredag d. 3/6: 12 – 15

Onsdag d. 8/6: 15 – 17

Torsdag d. 9/6: 9 – 13

Onsdag d. 15/6: 15 – 17

Torsdag d. 23/6: 9 – 15

Fredag d. 24/6: 9 – 15

Posted by

Nye åbningstider fra 16/5

DD Lab holder igen åbent om mandagen, fra d.16/5 (og juni ud). Åbningstiderne er derfor som følger:

Mandage: 11-15
Tirsdage: 10-16
Onsdage: 10-17
Torsdage: 9-15
Fredage: 9-15

Vi ses i labbet!

Posted by

DD Lab survey 2016

DD Lab har i 4 år været et praksis-understøttende supplement til Digital Design og Informationsvidenskabs-uddannelserne på IKK.

Imidlertid er lab´et et frivilligt tilbud og for at få et overblik over DD Lab´s faktiske rolle i de studerendes uddannelses-forløb, har vi udarbejdet en online survey.

Det ert vigtigt at så mange studerende som muligt, får lejlighed til at udfylde denne survey. For DD Lab, -og potentielt set, også for dig der er studerende.

Du kan finde spørgeskemaet på dette link.

KH DD Lab staff

Posted by

Nye åbningstider fra d.29/3

DD Lab får nye åbningstider fra d.29/3

Mandage: LUKKET
Tirsdage: 10-16
Onsdage: 10-17
Torsdage: 9-15
Fredage: 9-15

God påske!

Posted by

3D printer workshop

File 16-03-16 15 14 37

Lær hvordan du bruger DD Labs 3D Printer med 3D maestro Mark Moore. På denne uformelle workshop bliver du taget gennem forløbet fra 3D computermodel til færdigprintet objekt og får mulighed for at stille spørgsmål undervejs.

Hvornår: onsdag d.6/4 kl.14-15.30

Hvor: DD Lab

Underviser: Mark Moore

Posted by

Smart City prototyping med Arduino og Bluetooth

arduino_bluetooth

Alexandra Instituttet afholder workshop i DD Lab

Er du interesseret i at udvikle dine skills og værktøjskasse i forbindelse med prototypeudvikling? Så er her en mulighed for at få hands-on erfaring med ny teknologi til netop dette!

 Hos Alexandra Instituttet er vi i gang med at udvikle et værktøj, der skal gøre det nemt at lave sensorer, der trådløst sender data op i skyen og gør disse data tilgængelige så de kan visualiseres. Et værktøj vi tænker kan være særligt anvendeligt i forbindelse med at udvikle prototyper til Smart-City orienterede løsninger – uden at skulle være datalog eller It-ingeniør.

Derfor afholder vi en workshop, hvor vi gerne vil give værktøjet i hænderne på sådan nogle som jer for at se hvordan det fungerer. Så hvis du ikke bliver skræmt når du hører ordet Arduino og hvis du tænker at det kunne være sjovt og lærerigt at arbejde med nye prototypeværktøjer, så tilmeld dig ASAP via dette link. Her kan du også læse mere om workshoppen.

Vi giver kaffe og frokost!

Spørgsmål til workshoppen? -> kasper.andersen@alexandra.dk / 26 83 80 44

Posted by

Få dine projekter i browseren med p5.js

p5_logo

Tid:

Del 1: Tirsdag d.15/3 kl.19-22

Del 2:Tirsdag d.22/3 kl.19-22

I forlængelse af ODDS’ portfolio workshop har DD Lab besluttet at afholde en ‘opgrader-din-kode’ workshop. Kodesprog bliver, ligesom det meste andet teknologi, forældet og understøttelse på mobil- og desktop browsere forsvinder. Derfor giver vi jer muligheden til at opgradere jeres gamle processing sketches og actionscript3 kode til p5.js.
P5.js er en version af processing der kan afspilles på alle browsere og enheder da det er baseret på javascript og html5, det betyder at jeres online portefølje bliver ENDNU federe!

Formatet bliver således:
Aftenen starter med et oplæg fra Niels og Nikolaj. Her vil i blive introduceret for processing-sproget, dets struktur og tankerne bag det. Herefter vil i blive præsenteret for p5.js og få en kort gennemgang af de unikke aspekter i skal være opmærksomme på, når i går i gang med at omskrive jeres egne projekter.
Efter oplægget vil resten af aftenen bestå af fri leg hvor vi sammen sidder og skriver p5js programmer. Her vil Nikolaj og Niels selvfølgelig stå til rådighed for spørgsmål, hjælp til kodefejl og alt der ellers følger med en aften med programmering.

Vær opmærksom på at fokus for aftenen er omskrivning af programmer til p5.js. Der er altså ikke tale om en generel intro til programmering. Er du dog i den situation at du ikke har noget program at omskrive, må du selvfølgelig gerne sidde og kode med på en helt ny p5.js sketch.
Inden i mødes ser vi gerne at i har fundet et program i gerne vil omskrive. Jo simplere jo bedre og har i stadig koden kan det også være en fordel, men det er ikke afgørende.
Vær dog opmærksom på at p5.js ikke er et program i giver jeres kode og så bare får spyttet et interaktivt projekt ud. I skal selv sidde og (om)skrive jeres kode, så det kræver en villighed til at sætte sig ind i sit projekt igen og måske også skulle lave aspekter af det om. Til gengæld får i et projekt, der kan fremvises og interageres med i en browser, kendskab til og erfaring med p5.js og måske et endnu bedre projekt end i havde før.

TL;DR
Hav et tidligere projekt klar.
Du skal kode, men vi lærer dig ikke at kode fra bunden.
Vi holder et kort oplæg, derefter koder vi sammen.

Posted by