Difference between revisions of "Team Auslöten"
(→xxx) |
(→Hack 1 - CO2 Detector) |
||
Line 110: | Line 110: | ||
==Hack 1 - CO2 Detector== | ==Hack 1 - CO2 Detector== | ||
+ | |||
+ | [[File:Bild1.PNG|300px]] | ||
===Material=== | ===Material=== |
Revision as of 13:16, 18 September 2021
Contents
Einleitung
Herzlich willkommen auf der offiziellen Seite vom Team Auslöten.
Einführung Tools
Lasercutter
Beim Lasercutter werden Platten aus verschiedenen Materialien wie Holz, Karton, Plexiglas, Kunststoff, Leder, ect. mit einem Hochleistungslaser durchtrennt oder graviert. Mit einem Zeichnungsprogramm werden die 2D Pläne erstellt oder von vorhandenen OpenSource Daten übernommen und angepasst. Wenn die Pläne bereitstehen, werden diese mittels Stick auf den Lasercutter übertragen, da werden die Pläne gelasert. Eines der Vorteile ist der schnelle Herstellungsprozess, so können zum Beispiel hochwertige Gehäuse für Prototypen hergestellt werden. Im FabLab in Horw stehen zwei von Acctek (AKJ6090 und AKJ9060).
3D-Drucker
Im FabLab stehen drei Original Ultimaker 3D-Drucker und vier neuere Versionen. Für die Herstellung eines 3D-Teils wird ein CAD Plan vom Objekt und eine PLA-Kunststoff-Rolle gebraucht, das beim Drucker eingefädelt ist. Ein Roboterarm druckt den flüssigen Kunststoff und nach dem abkühlen stehen die Objekte bereit. Gegenüber dem Lasercutter ist der 3D-Drucker extrem langsam, was bei der Planung berücksichtigt werden muss.
Mitglieder
Jan Scala
Medizintechnikstudent, 5. Semester
Jan Scala hat eine Lehre als Orthopädist und anschließend die Berufsmatura absolviert. Seinen Militärdienst hat er als Hundeführer mit seinem Holländischen Schäferhund gemeistert. Er studiert nun Medizintechnik an der HSLU.
Susmida Jeyakanthan
Medizintechnikstudent, 5. Semester
Susmida ist gelernte Ingenieur-Bauzeichnerin. Nach der Lehre arbeitete sie im erlernten Beruf und ging anschließend für 4 Monate nach Kanada um ihrem geliebten Hobby, der Pinguinfotografie, nachzugehen. Die Berufsmatura hat sie vor dem Studium im Vollzeitstudium durchgezogen. Jetzt studiert sie Medizintechnik.
Robin Schaumlechner
Medizintechnikstudent, 5. Semester
Robin ist das kleine Schlitzohr in unserem Team. Er Absolvierte eine Lehre als Elektroniker. Anschließend an die Lehre hat Robin den Militärdienst als Loadmaster im Durchdiener Modell vollzogen. Danach Absolvierte er die Berufsmatura. Jetzt studiert er Medizintechnik an der HSLU.
Hack 0
Material
- Muscle SpikerShield mit Kit
- Lötkolben
- Lötzinn
- Auslötlitze
Planung und Durchführung
Wir bekamen einen Bausatz zum Hack und fanden die Beschreibung dazu im Internet. Gleich darauf begannen wir das Board zu löten. Als das Board fertig war positionierten wir die Elektroden am arm. Nachdem der Code, welcher zum Download auf der Seite des Entwicklers zur Verfügung steht, auf das Arduino geladen wurde, konnten wir loslegen.
Löten
Beim Löten sollte man sich konzentrieren, denn wenn Teile falsch positioniert sind wird es mühsam, diese wieder zu entfernen.
Muscle SpikerShield
Auf diesem Foto sieht man den Versuchsaufbau. Die Elektroden greifen das Signal am Muskel ab und leiten es auf das Board weiter. Im Board wird das signal verstärkt. Die Intensität wird dann mithilfe der LED`s angezeigt.
Resultat
Nachdem das Board RICHTIG gelötet wurde ging alles ohne weitere Probleme. Die LED haben die Intensität des Signals pflichtbewusst angezeigt. Wichtig ist die Positionierung der Elektroden, wenn diese falsch positioniert wurden, ist die Weiterleitung nicht gewärleistet.
Code
#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.print(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); }
Hack 1 - CO2 Detector
Material
- Arduino UNO
- LCD-Display
- Holz für Gehäuse
- CO2-Sensor
Planung und Durchführung
Sensirion SCD41 Co2 Sensor
Da wir vor Ort den Sensirion SCD41 Co2 Sensor zur Verfügung hatten, haben wir diesen verwendet. Der Sensor zeichnet sich aus durch eine Hohe Genauigkeit.
Eigenschaften:
- Photoacoustic sensor
- Temperatur
- Luftfeuchtigkeit
- CO2 Gehalt
- High accuracy, specified range 400 – 5’000 ppm
- Ca. 60$
Code
C02_Sensor_mit_LCD
/*Co2 Detector made my Team Auslöten */ #include <Arduino.h> #include <SensirionI2CScd4x.h> #include <Wire.h> #include <LiquidCrystal.h> #include "LED.h" #define LED_GREEN 6 #define LED_RED 7 SensirionI2CScd4x scd4x; const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //int whichLine = 0; LED ledG(LED_GREEN); LED ledR(LED_RED); void printUint16Hex(uint16_t value) { Serial.print(value < 4096 ? "0" : ""); Serial.print(value < 256 ? "0" : ""); Serial.print(value < 16 ? "0" : ""); Serial.print(value, HEX); } void printSerialNumber(uint16_t serial0, uint16_t serial1, uint16_t serial2) { Serial.print("Serial: 0x"); printUint16Hex(serial0); printUint16Hex(serial1); printUint16Hex(serial2); Serial.println(); } void setup() { Serial.begin(115200); lcd.begin(16, 2); lcd.print("Co2 Detector"); while (!Serial) { delay(100); } Wire.begin(); uint16_t error; char errorMessage[256]; scd4x.begin(Wire); // stop potentially previously started measurement error = scd4x.stopPeriodicMeasurement(); if (error) { Serial.print("Error trying to execute stopPeriodicMeasurement(): "); errorToString(error, errorMessage, 256); Serial.println(errorMessage); } uint16_t serial0; uint16_t serial1; uint16_t serial2; error = scd4x.getSerialNumber(serial0, serial1, serial2); if (error) { Serial.print("Error trying to execute getSerialNumber(): "); errorToString(error, errorMessage, 256); Serial.println(errorMessage); } else { printSerialNumber(serial0, serial1, serial2); } // Start Measurement error = scd4x.startPeriodicMeasurement(); if (error) { Serial.print("Error trying to execute startPeriodicMeasurement(): "); errorToString(error, errorMessage, 256); Serial.println(errorMessage); } Serial.println("Waiting for first measurement... (5 sec)"); } void loop() { uint16_t error; char errorMessage[256]; delay(5000); // Read Measurement uint16_t co2; float temperature; float humidity; error = scd4x.readMeasurement(co2, temperature, humidity); lcd.clear(); if (error) { Serial.print("Error trying to execute readMeasurement(): "); errorToString(error, errorMessage, 256); Serial.println(errorMessage); lcd.print("Error"); } else if (co2 == 0) { Serial.println("Invalid sample detected, skipping."); lcd.print("Error"); } else { lcd.setCursor(0,0); //setCursor(col, row) lcd.print("Co2: "); lcd.print(co2); Serial.print(" Co2: "); Serial.print(co2); Serial.print("\t"); Serial.print("Temperature:"); Serial.print(temperature); lcd.setCursor(0,1); //setCursor(col, row) lcd.print("Temp: "); lcd.print(temperature); Serial.print("\t"); Serial.print("Hum: "); Serial.println(humidity); lcd.setCursor(9,0); //setCursor(col, row) lcd.print("Hum: "); lcd.print(humidity); if (co2 < 1399) { ledG.on(); ledR.off(); } else { ledG.off(); ledR.on(); } } }
LED.cpp
#include "LED.h" LED::LED(const int pin) : Switchable(pin){ }
LED.h
#ifndef RGBLED_H #define RGBLED_H #include "Switchable.h" class LED : public Switchable { public: LED(const int pin); }; #endif //__LED_H
Switchable.cpp
#include "Switchable.h" #include <Arduino.h> Switchable::Switchable(const int pin) : m_pin(pin) { // Set pin as output pinMode(m_pin, OUTPUT); // Start state if off off(); } //turn on: void Switchable::on() { digitalWrite(m_pin, 1); //high m_state = true; } //turn off: void Switchable::off() { digitalWrite(m_pin, 0); //low m_state = false; } void Switchable::toggle() { digitalWrite(m_pin, !m_state); //low m_state = !m_state; } // dim pin void Switchable::dim(int dimVal) { analogWrite(m_pin, dimVal); } bool Switchable::getState() { return m_state; } void Switchable::setState(bool state) { digitalWrite(m_pin, state); m_state = state; }
Switchable.h
#ifndef _SWITCHABLE_H_ #define _SWITCHABLE_H_ //Base class for output that can be switched on/off via single digital pin: class Switchable { public: // Consturcutor accepts pin number for output Switchable(const int pin); // Turn pin on void on(); // Turn pin off void off(); // Toggle pin void toggle(); // dim pin void dim(int dimVal); // Get current state bool getState(); // Set state with bool variable void setState(bool state); private: const int m_pin; //output pin bool m_state; //current state }; #endif // _SWITCHABLE_H_
Resultat
Recherche für weitere Projekte
Drawbot (Hack 2)
Krawatte
Stoppuhr
Wearable Heart Rate Monitor
Kurzbeschreibung
Code
Die Software kann auf der folgenden Seite heruntergeladen werden. [https://www.hackster.io/aka3d6/heart-rate-monitor-wearable-and-wireless-using-ecg-e96dce]