MedTechDIY20 Another Team
go back to Medizintechnik DIY
Contents
Abstract
Team
Another Team besteht aus den drei Studierenden Claude Portmann, Simon Schmitter und Louis Schibli der Hochschule Luzern. Im Rahmen der Blockwoche DIY Medizintechnik formierte sich das Team, um interaktiv an den grossen Problemen unserer Zeit zu arbeiten. Aufgrund der Interdisziplinarität des Teams (Simon und Claude studieren Maschinentechnik, Louis studiert Medizintechnik) sind bis Ende der Woche bahnbrechende Lösungen zu erwarten.
Einleitung
Kurzbeschrieb MedTech DIY
In der Blockwoche Medizintechnik DIY (DO IT YOURSELF) soll in interdisziplinären Gruppen gearbeitet werden. Nach kurzen Einführungen sollen die Gruppen selbstständig und kreativ eigene innovative Projekte planen und durchführen. Als erstes wurde von unserer Gruppe das Projekt #Backyard Brains durchgeführt.
FABLAB
Die Blockwoche Medizintechnik DIY wurde zum grössten Teil im FABLAB durchgeführt. Das FABLAB ist mit verschiedenen Anlagen und Maschinen ausgestattet wie zB. Laser-Cutter, 3D-Drucker, CNC-Fräsmaschine und Heissdraht-Schneidgeräten. Das FABLAB lädt ein zum DO IT YOURSELF Spirit (transdisziplinäres Peer-Learning) und ist dadurch der ideale Ort um Experimente auszuarbeiten und durchzuführen.
Vorbereitung
Alle Teilnehmer haben die Arduino Desktop IDE auf ihrem Laptop installiert, ein Arduino UNO inklusive USB Kabel und das orange Board von Backyard Brains dabei.
Arduino UNO (5min)
Arduino bezeichnet eine Gruppe von Microcontrollern der gleichnamigen italienischen Firma Arduino.
Da die PCBs (Leiterplatten) als open source zur Verfügung stehen gibt es viele Drittanbieter, welche ihre eigenen Arduino-ähnlichen Boards und Erweiterungen herstellen und verkaufen. Diese dürfen jedoch nicht Arduino genannt werden, da der Name geschützt ist.
Die Innovation der Firma Arduino besteht einerseits aus den diversen Microcontroller Boards, als auch aus der entwickelten Programmierumgebung, der Arduino IDE, welche das Programmieren von Microcontrollern erheblich vereinfacht hat. Zuvor mussten ähnliche AVR Microcontroller über Adapter programmiert werden.
Arduino Code (5min)
Die Arduino Desktop IDE ist eine Java Applikation die als ein Programmcode Editor und Compiler dient und auch in der Lage ist Firmware seriell zum Board zu senden. Die Entwicklungsumgebung basiert auf Processing, eine IDE entwickelt um das Programmieren Künstlern näher zu bringen, die normalerweise nicht viel Kontakt mit Programmierumgebungen haben. Die Programmiersprache basiert auf Wiring, eine C ähnlichen Sprache.
Der grundlegende Aufbau der Arduino Programmiersprache ist relativ einfach und teilt sich in mindestens zwei Teile auf. Diese zwei benötigten Teile oder Funktionen umschliessen Blöcke von Anweisungen. Hierbei ist setup() die Vorbereitung und loop() ist die Ausführung. Beide Funktionen sind notwendig damit das Programm ausgeführt werden kann.
Nach der setup() Funktion folgt die loop() Funktion. Sie beinhaltet Programmcode, der kontinuierlich in einer unendlichen Schleife ausgeführt wird - Eingänge auslesen, Ausgänge triggern, etc. Diese Funktion ist der Kern von allen Arduino Programmen und erledigt die Hauptarbeit.
// Definition der Variablen void setup() { anweisungen; // Vorbereitung } void loop() { anweisungen; // Ausführung }
Die Setup Funktion sollte der Variablen Definition folgen, die noch davor aufgeführt werden muss. Setup muss als erste Funktion in einem Programm druchlaufen werden. Es wird nur einmal ausgeführt und dient dem Setzen von PinMode oder der Initiierung der seriellen Kommunikation.
Nach der setup() Funktion folgt die loop() Funktion. Sie beinhaltet Programmcode, der kontinuierlich in einer unendlichen Schleife ausgeführt wird - Eingänge auslesen, Ausgänge triggern, etc. Diese Funktion ist der Kern von allen Arduino Programmen und erledigt die Hauptarbeit.
Für eine grundlegende und einfache Einarbeitung in die Programmierarbeit mit Arduino empfehlen wir dieses Handbuch
Geführte Übung (15min)
byte leds[] = {13, 12, 11, 10, 9, 8}; //initialize variables int k = 0; int wait = 50; void setup(){ // put your setup code here, to run once: for(k; k < 6; k++){ // initialize LEDs as outputs pinMode(leds[k], OUTPUT); } } void loop(){ for(k; k < 6; k++){ // turn off all LEDs digitalWrite(leds[k], LOW); delay (wait); } for(k; k >= 0; k--){ // turn on all LEDs digitalWrite(leds[k], HIGH); delay (wait); } }
byte leds[] = {13, 12, 11, 10, 9, 8}; int k = 0; int illum = 0; void setup() { Serial.begin(9600); // put your setup code here, to run once: for(k; k < 6; k++){ //initialize LEDs as outputs pinMode(leds[k], OUTPUT); } } void loop() { while(Serial.available() > 0){ illum = Serial.parseInt(); if(illum > 6){ //falls grösser als 6, = max 6 illum = 6; } int range = map(illum, 1, 6, 8, 13); digitalWrite(range, HIGH); delay(500); //1s warten for(k=0; k < 6; k++){ //write all LEDs low digitalWrite(leds[k], LOW); } } }
Freies Üben (15min)
Einführung
Inputs
Experiments
Backyard Brains
Wir haben den Bausatz gemäss den Instructions auf der Webseite fertiggestellt. Danach haben wir den default code so angepasst, dass nur die gemessene spannung nach der verstärkung über serial ausgegeben wird. dazu musste zwei zeilen code auskommentiert werde da mehrere Variablen auf dem Serial monitor ausgegeben werden.
Damit kann der Serial Plotter die Muskelkontraktionen graphisch darstellen.
#define NUM_LED 6 //sets the maximum numbers of LEDs #define MAX 150 //maximum posible reading. TWEAK THIS VALUE!! int reading[10]; int finalReading; byte litLeds = 0; byte multiplier = 1; byte leds[] = {8, 9, 10, 11, 12, 13}; void setup(){ Serial.begin(9600); //begin serial communications for(int i = 0; i < NUM_LED; i++){ //initialize LEDs as outputs pinMode(leds[i], OUTPUT); } } void loop(){ for(int i = 0; i < 10; i++){ //take ten readings in ~0.02 seconds reading[i] = analogRead(A0) * multiplier; delay(2); } for(int i = 0; i < 10; i++){ //average the ten readings finalReading += reading[i]; } finalReading /= 10; for(int j = 0; j < NUM_LED; j++){ //write all LEDs low digitalWrite(leds[j], LOW); } Serial.println(finalReading); //Serial.print("\t"); finalReading = constrain(finalReading, 0, MAX); litLeds = map(finalReading, 0, MAX, 0, NUM_LED); //Serial.println(litLeds); for(int k = 0; k < litLeds; k++){ digitalWrite(leds[k], HIGH); } //for serial debugging, uncomment the next two lines. //Serial.println(finalReading); //delay(100); }