AdSense

Dienstag, 2. Juli 2019

WLAN-Thermometer mit dem DHT22 und EPS8266-12E

(English version) Eigentlich sollte ich ja an den Posts zum Drucker weitermachen, aber ich habe gerade an einem ESP8266-12E gearbeitet und dabei super einfach ein WLAN-Thermometer (mit dem ESP8266-12E als Web-Client, welcher an einen Apache-Server auf meinem Raspberry PI sendet) realisiert, sodass ich das erstmal hier erklären möchte.


1. Der ESP8266-12E
Der ESP8266-12E ist ein Arduino-ähnlicher Baustein, welcher einen WLAN-Baustein mit integriert hat. Sucht man auf Google danach, findet man diesen bei vielen Quellen zu kaufen. Das Tolle ist, dass er mit der Arduino-Umgebung programmiert werden kann, sodass alle Libraries auch funktionieren!

2. Einrichtung Arduino für den ESP8266-12E
Zuerst sollte der CH340-Treiber installiert werden. Da es dazu genug im Internet gibt werde ich darauf nicht eingehen. Als nächstes muss in der Arduino-Umgebung auf die Voreinstellungen gehen:

Hier trägt man nun die zusätzliche Boardverwalter-URL ein:
http://arduino.esp8266.com/stable/package_esp8266com_index.json

Danach kann man dann auch schon im Boardverwalter die Einstellungen für die Boards herunterladen:

Hier muss nun nach "ESP8266" gesucht werden und das sollte dann auch installiert werden:

Nun ist eigentlich alles vorbereitet und wir können das Board auswählen, ich habe dabei "NodeMCU 1.2 (ESP8266-12E Module)" ausgewählt:


3. Der Code
Zu dem Code gibt es eigentlich nicht viel zu erklären. Einerseits muss man seine WLAN-Daten eingeben, darunter wird der DHT22-Sensor initialisiert. In "Loop" wird getestet ob man mit dem WLAN verbunden ist, sollte dies der Fall sein, so wird Temperatur und Luftfeuchte gemessen (float t und float h), diese Werte werden in einen String (requestString) geschrieben und dann als HTTP Get-Request an einen Webserver gesendet. Den Code für den Web-Server habe ich unten angefügt.

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
const char* ssid     = "***";
const char* password = "***";   
int wifiStatus;
    
#include "DHT.h"
#define DHTPIN D2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  // put your setup code here, to run once:

  Serial.print("Your are connecting to;");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }

  dht.begin();
}

void loop() {
  // put your main code here, to run repeatedly:
  wifiStatus = WiFi.status();
  
  if(wifiStatus == WL_CONNECTED){
    Serial.println("");
    Serial.println("Your ESP is connected!");  
    Serial.println("Your IP address is: ");
    Serial.println(WiFi.localIP()); 
    float t = dht.readTemperature(); 
    float h = dht.readHumidity(); 
    HTTPClient http;
    char requestString[255] = "";
    sprintf(requestString, "http://webServer.de/Send.php?name=TemperatureSensor&data=%f,%f", t, h);
    http.begin(requestString);  //Specify request destination
    int httpCode = http.GET();                                                                  //Send the request
    
    if (httpCode > 0) 
    { //Check the returning code
      String payload = http.getString();   //Get the request response payload
      Serial.println(payload);                     //Print the response payload
    }
    
    http.end();   //Close connection
    
    delay(300000);
  }
  else{
    Serial.println("");
    Serial.println("WiFi not connected");
    delay(1000);
  }
}

4. Der Server-Code
Auf meinem Raspberry Pi läuft ein Apache-Webserver. In /var/www liegt die Datei "Send.php", welche einfach Sensordaten annimmt und in .csv-Dateien schreibt. Dabei übergibt der Sensor im Get-Befehl seinen Namen, das wird dann auch der Dateiname, hier wird dann mit aktuellem Zeitstempel der Inhalt von "data" angehängt, was in diesem Fall die Temperatur in °C und die Luftfeuchte in % ist.

<html>
 <head>
  <title>Send Sensor Values</title>
 </head>
 <body>
  <?php

$name = htmlspecialchars($_GET["name"]);
$data = htmlspecialchars($_GET["data"]);

$date = date("Y-m-d") . "T" . date("H:i:s.u") . "Z";

$file = "data/".$name.".csv";
$Saved_File = fopen($file, 'a');
fwrite($Saved_File, $date . "," . $data . "\r\n");
fclose($Saved_File);

  ?>
 </body>
</html>

Donnerstag, 20. Juni 2019

2.85mm-Filament Bowden Extruder Getriebe-Feeder

(English version) Wie angekündigt werde ich nun die Einzelteile meines Multimaterial-Ultimakers beschreiben. Heute widme ich mich dem Feeder. Leider habe ich keine gute fertige Lösung gefunden, deshalb musste ich aus teils gekauften Teilen den Feeder selber bauen. Der Feeder besteht aus einigen 3D-gedruckten Teilen.

Für den Extruder werden folgende Teile benötigt:
  • 3D-Druck Teile: https://www.thingiverse.com/thing:3703063
  • Einige Teile von ebay oder anderen Shops (hier am besten anhand der Bilder unten die richtigen Teile kaufen)
    • Ein 1,75 mm Metall-Feeder ("MK8 Metal Bowden Extruder" bei ebay)
    • Ein 4/6 mm Bowden-Schlauch (PTFE, Innendurchmesser 4 mm, Außendurchmesser 6 mm)
    • Ein Bowden-Coupler (vergleichbar mit den Originalteilen beim Ultimaker 2+, "Bowden tube clip" bei ebay)
    • Extruder-Vorschubrad
    • 2 x 26-zähniges Extruder-Vorschubrad
    • 2 x Kugellager 625ZZ (16x5x5 mm)
    • Nema17-Motor, 1,7A, 0,9°
  • Schrauben
    • 3 x M3x10
    • 3 x M3x30 (besser sind eher längere Schrauben, also z.B. 35 mm Länge)
    • M4x30
  • Alu-Stange, 5 mm Durchmesser (bei mir gab es nur 5,3, das passt aber auch)
Zuerst wird nun der Motor am Hauptgestell befestigt.

Als nächstes muss beim Feeder ein Loch aufgebohrt werden, dafür nehme ich einen 5er Metallbohrer. Anschließend sollten die Kanten etwas abgerundet werden.

Danach muss die Schraube, auf welche die kleine Feder gesteckt wird, gekürzt werden, da sonst die zwei sich gegenüberliegenden Schrauben berührer bevor die Feder genug Druck aufbaut.

Als nächstes wird nun auch der Bowden-Coupler montiert und der Bowden-Schlauch montiert.

Danach wird der Feeder mit einer M3x10-Schraube an das Hauptgestell geschraubt, von unten wird dabei ein Kugellager in die dafür vorhergesehene Halterung gelegt und dies alles zusammen mit der Schraube befestigt. Dabei sollte man achten, dass der Kopf der Schraube im Metallteil liegt, sonst könnte es später Probleme geben.


Als nächstes wird der Arm des Feeders zusammengebaut (Hier wird auch die M4-Schraube eingebaut) und montiert, dafür werden nun drei M3x30-Schrauben in entgegengesetzter Richtung wie die M3x10-Schraube eingesetzt. Danach wird die Feder für den Arm eingesetzt.



Danach wird ein 52 mm langes Stück von dem Alu-Stab abgeschnitten und mit 7 mm Abstand zu einer Seite das Vorschubrad montiert.

Auf dieses Stück wird nun die lange Hülse geschoben, danach wird es von oben durch das Kugellager geschoben. Hier muss man eventuell den Hebel unter der Feder etwas drücken, damit es hinein passt.

Falls man die M3x30-Schrauben davor mit Muttern fixiert hat, sollte man diese Muttern jetzt entfernen. Als nächstes wird das zweite Kugellager auf die Achse gesteckt und der passende Halter dafür von oben aufgesetzt. Das Ganze kann man nun an der unteren Schraube fixieren, wenn man etwas Druck auf die Feder über die M4-Schraube ausübt fallen die anderen Schrauben nun auch nicht mehr heraus.

Danach wird noch der große Halteclip montiert, hier können nun die beiden anderen Muttern angeschraubt werden

Als nächstes geht es auf der anderen Seite weiter. Dabei werden die zwei Vorschubräder mit 26 Zähnen in die großen Zahnräder montiert, dabei kann man einen kleinen Tropfen Klebstoff aufsetzen, damit die Zahnräder nicht entlang der Achse auseinanderrutschen. Die kleine Hülse wird auf die Achse gesteckt, ansonsten reibt das große Zahnrad auf dem Kunststoffteil, welches das Kugellager hält und fängt an, mit diesem Teil zusammenzuschmelzen. Die Zahnräder werden nun auf die Achse bzw. die Achse vom Motor montiert, dabei sollte ein wenig Gegendruck von unten auf die Achse ausgeführt werden, damit es kein Spiel gibt und etwas anfängt, zu wackeln.

Und damit ist der Extruder fertig und kann eingesetzt werden. Der Extruder kann natürlich auch einfach so für 3D-Drucker eingesetzt werden und muss nicht zwingend im Zusammenhang mit einem Mehrfarbendruck stehen.

Sollte ich irgendeinen Schritt nicht sauber erklärt haben oder falls ich Materialien benutze, von denen ich oben nichts geschrieben habe, bitte einfach kurz Bescheid geben, dann passe ich das an.

Sonntag, 16. Juni 2019

Vollautomatischer Mehrfarbendruck mit dem Ultimaker 2+

(English version) Wie im letzten Post vom November letzten Jahres angekündigt habe ich mich mit dem Mehrfarbendruck mit dem Ultimaker 2+ beschäftigt. Inzwischen habe ich nach vielen Monaten Arbeit eine Lösung gefunden, um mit einem Ultimaker 2+ mit beliebig vielen Farben zu drucken. In diesem Post möchte ich die einzelnen Komponenten davon kurz beschreiben und dann in den folgenden Posts jeweils darauf eingehen.

Das Grundprinzip ist ähnlich wie beim halbautomatischen Mehrfarbendruck, es wird im Gegensatz zum Ultimaker 3 nur eine Nozzle benutzt und bei einem Farbwechsel wird das Material herausgezogen und das nächste Material hineingeschoben. Dafür habe ich hinter dem Extruder einen Y-Splitter angebracht, in welchem mehrere Filamentschläuche zusammenlaufen. Am Ende von jedem dieser Schläuche befindet sich dann ein eigenen Feeder, sodass ich für jede Farbe, mit der ich gleichzeitig drucken möchte, einen extra Feeder bauen musste. Beim Herausziehen von einem Material kodiert der Drucker dabei den nächsten benötigten Extruder in der Bewegung, sodass eine externe Elektronik erkennt, welcher Motor als nächstes angeschaltet werden soll und schaltet diesen dann über eine Relaiskarte an. Das Gesamtprojekt gliedert sich also in die folgenden Teile:
  1. Y-Splitter für die Filamentschläuche
  2. Multiple Feeder
  3. Externe Elektronik zum Umschalten der Extruder
  4. Skripte in Slic3r
Punkt 1 ist relativ leicht gelöst, dazu habe ich Designs für 4, 8 und 16 Filamentschläuche erstellt und diese auf Thingiverse hochgeladen. Eventuell muss hier bei den Druckeinstellungen (Horizontal expansion) gespielt werden, dass die Adapter gut passen.
https://www.thingiverse.com/thing:3695457