Startseite Skripte für das Wintersemester 2018/19 Projekt „Citizen Science“ Arduino Grundlagen Temperatur-Anzeige in Processing


Temperatur-Anzeige in Processing

Identischer Hardware-Aufbau wie bei „Temperatur Sensor“

Der Arduino-Sketch muss auf den Arduino geladen werden, damit der Processing-Sketch funktionieren kann!

Arduino

// Arduino Project Book, Seite 43ff

// ACHTUNG: Der Serial-Monitor von Arduino muss geschlossen sein
// sonst funktioniert die Kommunikation mit Processing nicht!
// Umgekehrt muss das Processing-Applet beendet werden, bevor man wieder etwas auf den Arduino hochladen kann

// Analoger Eingang 0
int sensorPin = A0;

// die LED
int ledPin = 13;

// Grenzwert-Temperatur, wenn LED an/ausgehen soll
float grenzwert = 23.0;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  // roher Sensor-Wert
  int sensorVal = analogRead(sensorPin);

  // Umrechung in Volt (muss zwischen 0V und 5V liegen!)
  float voltage = (sensorVal / 1024.0) * 5.0;

  // Temperatur in Celsius
  float temperature = (voltage - 0.5) * 100;

  Serial.println(temperature);

  // Wenn die Temperatur unter einen bestimmten Wert fällt
  // soll die LED angehen
  if (temperature < grenzwert){
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }

  // Messung alle 0.5 sek
  delay(500);
}

Processing

// ACHTUNG: Der Serial-Monitor von Arduino muss geschlossen sein
// sonst funktioniert die Kommunikation mit Processing nicht!

// https://learn.sparkfun.com/tutorials/connecting-arduino-to-processing

import processing.serial.*;

Serial myPort;  // Create object from Serial class
String val;     // Data received from the serial port
String Ausgabe = ""; // die Textaufgabe

float v = 22.0; // Float-Wert aus dem String, erst mal mit Platzhalter.-Wert belegt
float grenzwert = 23.0; // wie bei Arduino

void setup() {
  size(440, 440);
  frameRate(2); // nicht zu hoch, sonst gibt es Kommunikationsprobleme!

  // Abfrage aller Ports, hier sollte der gleiche Port auftauchen, den Ihr bei Arduino verwendet!
  // am Mac heisst dieser so etwas wie „dev/tty.usbmodem1411
  printArray(Serial.list());

  // bei mir ist der rel. Port an 5. Stelle
  String arduinoPort = Serial.list()[5];
  myPort = new Serial(this, arduinoPort, 9600);
}

void draw() {
  // je nach Temperatur ändert sich Hintergrund- und Strichfarbe
  if (v < grenzwert){
    background(0);
    stroke(255, 0, 0);
  } else {
    background(255,0,0);
    stroke(0);
  }

  // Einlesen der Arduino-Werte, falls diese vom Arduino geschickt werden können
  if ( myPort.available() > 0) {
    val = myPort.readStringUntil('\n');
    v = float(val.trim()); // das trim ist ganz wichtig!
  } 

  // Ausgabe von val und v in der Konsole
  // println(val); 
  println(v);

  // Textausgabe des Wertes auf dem Screen
  String Anfang = "Temperatur: ";
  String Ausgabe = Anfang + val;
  text(Ausgabe, 10, v);

  // keine Füllfarbe bei der Ellipse
  noFill();

  // Durchmesser erhöht, damit man Änderungen besser sieht
  ellipse(width/2, height/2, v*6, v*6);
}

Läuft der Arduino-Sketch und startet man das Processing-Applett, sollten jetzt die Temperatur-Werte auf dem Screen sichtbar sein…