Difference between revisions of "Team Auslöten"
(→Sensirion SCD41 Co2 Sensor) |
(→Material) |
||
Line 126: | Line 126: | ||
* Widerstände | * Widerstände | ||
* Potenziometer | * Potenziometer | ||
+ | |||
+ | Gehäuse: [[:File:co2-Messgerät-Gehäuse.svg]] | ||
===Planung und Durchführung=== | ===Planung und Durchführung=== |
Revision as of 15:25, 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 mit LCD
In diesem Projekt geht es darum einen CO2 Detektor zu bauen, welcher den CO2 Gehalt in der Luft in ppm (parts per million) anzeigen soll. Zudem soll visuell angezeigt werden, ob der Wert im Normalbereich liegt oder zu hoch ist. Da der hierzu verwendete Sensor ebenfalls die Luftfeuchtigkeit und Temperatur messen kann, werden diese Werte auch angezeigt. Nachfolgen findest man alle Informationen sowie den Code um das Projekt "CO2 Detector mit LCD" selbst umzusetzen.
Material
- Arduino UNO
- LCD-Display
- Holz für Gehäuse
- CO2-Sensor
- Breadboard
- Zwei LEDs
- 9V Batterie
- Stiftleisten
- Steckerkabel
- Schalter
- Widerstände
- Potenziometer
Gehäuse: File:co2-Messgerät-Gehäuse.svg
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 durch eine Hohe Genauigkeit aus.
Eigenschaften:
- Photoacoustic sensor
- Temperatur
- Luftfeuchtigkeit
- CO2 Gehalt
- High accuracy, specified range 400 – 5’000 ppm
- Ca. 60$
Weiterführende Infos zum Messprinzip findet man hier: Sensirion SCD41 Messprinzip
Verkabeln
Hier sieht man die Verkabelung vom LCD 1602 zusammen mit einem 10k Ohm Poti für das einstellen der Lichtstärke des LCDs und einen 220 Ohm Widerstand.
Da der Sensor über I2C kommuniziert wurde er wie folgt angeschlossen:
- VDD an 3.3V
- GND an GND
- SCL an Pin D19
- SDA an Pin D18
Die LEDs wurden mit jeweils einem 220 Ohm Vorwiderstand auf Pin 6 (grün) und Pin 7 (rot) gelegt.
Der Schalter wurde seriell in den Batterie Kreislauf geschalten.
Code
Nachfolgend findet man den Code zum Projekt. Der Grenzwert für den Normalbereich wurde auf 1399 gesetzt. Dieser kann natürlich auch nach eigenem bedarf abgeändert werden.
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); 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) { //<----------------GRENZWERT 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
So sieht das fertige Projekt aus.
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]