Difference between revisions of "Team Auslöten"

From Hackteria Wiki
Jump to: navigation, search
(Hack 1 - CO2 Detector)
(Hack 1 - CO2 Detector)
Line 109: Line 109:
 
</pre>
 
</pre>
  
==Hack 1 - CO2 Detector==
+
==Hack 1 - CO2 Detector mit LCD==
  
[[File:Bild1.PNG|300px]]
+
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===
 
===Material===
Line 118: Line 118:
 
* Holz für Gehäuse
 
* Holz für Gehäuse
 
* CO2-Sensor
 
* CO2-Sensor
 +
* Breadboard
 +
* Zwei LEDs
 +
* 9V Batterie
 +
* Stiftleisten
 +
* Steckerkabel
 +
* Schalter
 +
* Widerstände
 +
* Potenziometer
  
 
===Planung und Durchführung===
 
===Planung und Durchführung===
  
 
====Sensirion SCD41 Co2 Sensor====
 
====Sensirion SCD41 Co2 Sensor====
Da wir vor Ort den Sensirion SCD41 Co2 Sensor zur Verfügung hatten, haben wir diesen verwendet.
+
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.
 
Der Sensor zeichnet sich aus durch eine Hohe Genauigkeit.
  
Line 133: Line 141:
 
* High accuracy, specified range 400 – 5’000 ppm
 
* High accuracy, specified range 400 – 5’000 ppm
 
* Ca. 60$
 
* Ca. 60$
 +
 +
===Verkabeln===
 +
 +
[[File:Verdrahtung_LCD.PNG|400px]]
 +
 +
  
 
===Code===
 
===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===
 
===C02_Sensor_mit_LCD===
 
<pre>
 
<pre>
Line 151: Line 168:
 
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
 
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
 
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
 
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
//int whichLine = 0;
 
 
LED ledG(LED_GREEN);
 
LED ledG(LED_GREEN);
 
LED ledR(LED_RED);
 
LED ledR(LED_RED);
Line 255: Line 271:
 
         lcd.print("Hum: ");
 
         lcd.print("Hum: ");
 
         lcd.print(humidity);
 
         lcd.print(humidity);
         if (co2 < 1399) {
+
         if (co2 < 1399) {           //<----------------GRENZWERT
 
           ledG.on();
 
           ledG.on();
 
           ledR.off();
 
           ledR.off();
Line 384: Line 400:
  
 
===Resultat===
 
===Resultat===
 +
 +
[[File:Bild1.PNG|300px]]
  
 
== Recherche für weitere Projekte ==
 
== Recherche für weitere Projekte ==

Revision as of 13:52, 18 September 2021


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

Jan Scala.jpg 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

Susmida Jeyakanthan.jpg 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

Robin Schaumlechner.jpg 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

Löten2.jpeg

Beim Löten sollte man sich konzentrieren, denn wenn Teile falsch positioniert sind wird es mühsam, diese wieder zu entfernen.

Muscle SpikerShield

Musclespiker.jpeg

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

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$

Verkabeln

Verdrahtung LCD.PNG


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

Bild1.PNG

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]

Car

Reflexion

Präsentation

File:Gruppe A.pdf