Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Web-fähiges Arduino-Thermometer mit DS18B20-Sensor bauen

Komponenten und Zubehör

Arduino UNO × 1
PHPoC WiFi Shield für Arduino (alternativ PHPoC Shield) × 1
Adafruit DS18B20 Temperatursensor × 1
Seeed 4,7 kΩ Widerstand × 1
Schrumpfschlauch × 1

Über dieses Projekt

Als Einsteiger können Sie in den Tutorials WLAN und Arduino sowie DS18B20 Temperatursensor Grundlagen erlernen. Ein ähnliches Projekt ausschließlich mit PHPoC finden Sie hier.

Demo

Eine Live-Demonstration zeigt das fertige Web-Thermometer im Browser.

Datenfluss

Arduino → PHPoC WiFi Shield → Webbrowser

Der Arduino liest die Temperatur vom Sensor und sendet den Wert an das PHPoC WiFi Shield. Dieses leitet die Daten per WebSocket an den Browser weiter, wo JavaScript die Temperatur visualisiert.

Hinweis: Das PHPoC Shield besitzt ein integriertes Programm zur Datenweiterleitung von Arduino zum Browser – Sie müssen sich darum nicht kümmern.

Was zu tun ist

WLAN-Informationen für PHPoC Shield einrichten

Folgen Sie dieser Anleitung.

Neue Web-UI auf PHPoC Shield hochladen

Arduino-Code schreiben

Testen

Das beste Arduino-Starterkit für Einsteiger

Suchen Sie ein passendes Kit? Sehen Sie sich das beste Arduino-Kit für Anfänger an.

Funktionsreferenzen

Code

Arduino-Code

#include <OneWire.h>
#include <DallasTemperature.h>
#include "SPI.h"
#include "Phpoc.h"

// Datenleitung an Pin 8
OneWire oneWire(8);
DallasTemperature sensors(&oneWire);
PhpocServer server(80);
boolean alreadyConnected = false;

void setup() {
  Serial.begin(9600);
  while(!Serial);
  sensors.begin();
  Phpoc.begin(PF_LOG_SPI | PF_LOG_NET);
  server.beginWebSocket("thermometer");
  Serial.print("WebSocket-Server-Adresse: ");
  Serial.println(Phpoc.localIP());
}

void loop() {
  PhpocClient client = server.available();
  if (client) {
    sensors.requestTemperatures();
    float temp = sensors.getTempCByIndex(0);
    String txtMsg = String(temp) + "\r\n";
    char buf[txtMsg.length()];
    txtMsg.toCharArray(buf, txtMsg.length());
    server.write(buf, txtMsg.length());
    delay(300);
  }
}

remote_thermometer.php (Web-UI)

Diese Datei stellt die Benutzeroberfläche bereit. Laden Sie sie gemäß Anleitung auf das PHPoC WiFi Shield oder PHPoC Shield hoch.

<!DOCTYPE html>
<html>
<head>
<title>Arduino - PHPoC Shield - Thermometer</title>
<meta name="viewport" content="width=device-width, initial-scale=0.7, maximum-scale=0.7">
<meta charset="utf-8">
<style>
body { text-align: center; font-size: width/2pt; }
h1 { font-weight: bold; font-size: width/2pt; }
h2 { font-weight: bold; font-size: width/2pt; }
button { font-weight: bold; font-size: width/2pt; }
</style>
<script>
var canvas_width = 200, canvas_height = 450;
var ws;
var buffer = "";
function init() {
  var canvas = document.getElementById("remote");
  canvas.width = canvas_width;
  canvas.height = canvas_height;
  var ctx = canvas.getContext("2d");
  ctx.translate(canvas_width/2, canvas_height - 80);
  update_view(0);
}
function connect_onclick() {
  if(ws == null) {
    var ws_host_addr = "";
    if((navigator.platform.indexOf("Win") != -1) && (ws_host_addr.charAt(0) == "[")) {
      ws_host_addr = ws_host_addr.replace(/[\[\]]/g, '');
      ws_host_addr = ws_host_addr.replace(/:/g, "-");
      ws_host_addr += ".ipv6-literal.net";
    }
    ws = new WebSocket("ws://" + ws_host_addr + "/thermometer", "text.phpoc");
    document.getElementById("ws_state").innerHTML = "VERBINDET";
    ws.onopen = ws_onopen;
    ws.onclose = ws_onclose;
    ws.onmessage = ws_onmessage;
  } else ws.close();
}
function ws_onopen() {
  document.getElementById("ws_state").innerHTML = "<font color='blue'>VERBUNDEN</font>";
  document.getElementById("bt_connect").innerHTML = "Trennen";
  ws.send("B\r\n");
  update_view(0);
}
function ws_onclose() {
  document.getElementById("ws_state").innerHTML = "<font color='gray'>GETRENNT</font>";
  document.getElementById("bt_connect").innerHTML = "Verbinden";
  ws.onopen = null; ws.onclose = null; ws.onmessage = null; ws = null;
  update_view(0);
}
function ws_onmessage(e_msg) {
  e_msg = e_msg || window.event;
  console.log(e_msg.data);
  update_view(parseFloat(e_msg.data));
}
function update_view(temp) {
  var canvas = document.getElementById("remote");
  var ctx = canvas.getContext("2d");
  var radius = 70, offset = 5, width = 45, height = 330;
  ctx.clearRect(-canvas_width/2, -350, canvas_width, canvas_height);
  if(ws != null) { ctx.strokeStyle="blue"; ctx.fillStyle="blue"; }
  else { ctx.strokeStyle="Gray"; ctx.fillStyle="Gray"; }
  // Skalierung zeichnen (5er und 20er Schritte)
  var x = -width/2;
  ctx.lineWidth=2;
  for (var i = 0; i <= 100; i+=5) {
    var y = -(height - radius)*i/100 - radius - 5;
    ctx.beginPath(); ctx.lineTo(x, y); ctx.lineTo(x - 20, y); ctx.stroke();
  }
  ctx.lineWidth=5;
  for (var i = 0; i <= 100; i+=20) {
    var y = -(height - radius)*i/100 - radius - 5;
    ctx.beginPath(); ctx.lineTo(x, y); ctx.lineTo(x - 25, y); ctx.stroke();
    ctx.font="20px Georgia"; ctx.textBaseline="middle"; ctx.textAlign="right";
    ctx.fillText(i.toString(), x - 35, y);
  }
  // Thermometer-Grafik
  ctx.lineWidth=16;
  ctx.beginPath(); ctx.arc(0, 0, radius, 0, 2 * Math.PI); ctx.stroke();
  ctx.beginPath(); ctx.rect(-width/2, -height, width, height); ctx.stroke();
  ctx.beginPath(); ctx.arc(0, -height, width/2, 0, 2 * Math.PI); ctx.stroke();
  ctx.fillStyle="#e6e6ff";
  ctx.beginPath(); ctx.arc(0, 0, radius, 0, 2 * Math.PI); ctx.fill();
  ctx.beginPath(); ctx.rect(-width/2, -height, width, height); ctx.fill();
  ctx.beginPath(); ctx.arc(0, -height, width/2, 0, 2 * Math.PI); ctx.fill();
  // Temperaturanzeige
  if(ws != null) ctx.fillStyle="#ff1a1a"; else ctx.fillStyle="Gray";
  ctx.beginPath(); ctx.arc(0, 0, radius - offset, 0, 2 * Math.PI); ctx.fill();
  temp = Math.round(temp);
  var y = (height - radius)*temp/100.0 + radius + 5;
  ctx.beginPath(); ctx.rect(-width/2 + offset, -y, width - 2*offset, y); ctx.fill();
  if(ws != null) {
    ctx.fillStyle="white"; ctx.font="bold 34px Georgia";
    ctx.textBaseline="middle"; ctx.textAlign="center";
    ctx.fillText(temp.toString() + "°C", 0, 0);
  }
}
window.onload = init;
</script>
</head>
<body>
<h1>Arduino - Web-Thermometer</h1>
<canvas id="remote"></canvas>
<h2>
  WebSocket: <span id="ws_state">null</span>
  <button id="bt_connect" type="button" onclick="connect_onclick()">Verbinden</button>
</h2>
</body>
</html>

Schaltplan

  1. PHPoC WiFi Shield oder PHPoC Shield auf den Arduino stecken.
  2. Verdrahtung gemäß Abbildung durchführen.

(Bilder im Originalprojekt verfügbar)

Herstellungsprozess

  1. Das Thermometer: Von Galileos Thermoskop zu modernen digitalen Sensoren
  2. Bluetooth-gesteuerter Arduino-Spybot bauen – Überwachungsroboter mit IP-Kamera
  3. FlickMote: Gestensteuerung per Ultraschall & IR für Smart Home (Arduino 101)
  4. DIY Arduino TV-B-Gone: Universelle TV-Aus-Fernbedienung
  5. Einen eigenen LED-Master-Clock mit Alarm bauen – aus 12 Metern Entfernung ablesbar
  6. Find Me: Smarter Gegenstands-Finder mit Arduino und Bluetooth
  7. Optimierte Stromversorgungslösungen für Arduino-Projekte
  8. Arduino Web-MP3-Player: Browsergesteuerte Audio-Wiedergabe
  9. Arduino Tic Tac Toe mit MAX7219 LED-Matrix und Karton-Gehäuse
  10. Intelligenten Arduino-Vierbeiner-Roboter bauen: Schritt-für-Schritt-Anleitung