Schlagwort-Archive: Arduino

BitBastelei #489 – DIY Temperaturüberwachung mit DS18B20

BitBastelei #489 - DIY Temperaturüberwachung mit DS18B20

(1 GB) 00:29:55

2022-05-15 10:00 🛈

Wenn es um Temperaturen geht ist der DS18B20 einer meiner Lieblingssensoren: Digitale Kommunikation, vorkalibriert, wenig Kabel. Diesmal sollen diese wieder ein praktisches Problem Lösen: Kalte Füße. Also indirekt. Einerseits soll es in der Lage sein Störungen der Heizungsanlage zu erkennen und melden, andererseits sollen die Temperaturwerte helfen für einen etwaigen Ersatz ohne fossile Energieträger planen zu können.

Inhalt

  • 00:00 Warum das Ganze?
  • 02:26 Möglichkeiten 
  • 05:03 Funktion von Warmwasserheizungen
  • 06:54 Wo messen?
  • 08:45 Wie messen?
  • 12:52 Versuchsaufbau
  • 15:49 Software und erster Test
  • 22:53 Test mit mehreren Sensoren
  • 23:33 Aufbau
  • 28:34 Fazit

Transparenz

Die für das Gebastel genutzten Komponenten wurden selbst gekauft und bezahlt.

BitBastelei #471 – Soundmodul für Weihnachtskrippe

BitBastelei #471 - Soundmodul für Weihnachtskrippe

(2 GB) 00:28:02

2022-01-09 11:00 🛈

Weihnachtskrippen sind in meiner Ecke bei Christen ein fester Bestandteil der Weihnachtsfeierlichkeiten. Einige Ausführungen werden seit Generationen jedes Jahr wieder aufgebaut. Solch alte Basteleien haben aber ein Problem, denn die Zeiten ändern sich. Wo früher einmal Täglich der Bauer sein Pferdefuhrwerk entlang kutschierte rasen nun im Minutentakt tonnenschwere Blechkarossen mit Verbrennungsmotoren vorbei – da kommen die damaligen Spieluhren akustisch nicht mehr gegen an. Schauen wir mal, ob etwas moderne Technik Abhilfe schaffen kann.

Inhalt

  • 00:00 Pandemiefoo
  • 00:30 Vorgeschichte
  • 02:25 Bisherige Technik
  • 05:02 Konzept
  • 09:23 Module auflöten
  • 11:24 Verbindungsplan
  • 13:51 Erster Test / Kurzschlusssuche
  • 19:26 Software
  • 20:20 Fehlersuche: Kein UART
  • 23:53 Fertig.

Links zum Thema

Transparenz

Die gezeigten Geräte wurden selbst gekauft und bezahlt.

BitBastelei #466 – Quick’n’Dirty LED Dimmer

BitBastelei #466 - Quick'n'Dirty LED Dimmer

(915 MB) 00:15:59

2021-12-05 11:00 🛈

Wenn die Nachbarn plötzlich weihnachtsbedingt mehr LEDs als ich an ihren Häusern zur Schau stellen, dann kann ich das so nicht stehen lassen. Also raus mit der LED-Strippe und Licht an. Oder auch nicht. Einzig freie Outdoor-LED ist ein 230V-Streifen, dem ich zuletzt ein “meh” gegeben hab. Etwas wenig Isolation für meinen Geschmack. Aber was für gleichgerichtetes AC gedacht war funktioniert auch mit stromlimitiertem DC. Wenn man jetzt bloß noch eine Steuerung oder einen Dimmer hätte um das Konstrukt zeitgesteuert schalten zu können.

Inhalt

  • 00:00 Streifenplan
  • 00:44 DC-Versorgung
  • 02:04 Transistorforderung
  • 02:34 Transistorwünsche
  • 04:31 Transistorsuche
  • 08:44 Transistorketten
  • 10:04 Transistorlöterei
  • 10:58 Controllersuche
  • 12:05 Software
  • 13:38 Anschluss
  • 14:33 Ende

Code

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

#include <uri/UriBraces.h>
#include <uri/UriRegex.h>

#ifndef STASSID
#define STASSID ""
#define STAPSK  ""
#endif

#define PWMSTEPS 256
#define LED D1

const char *ssid = STASSID;
const char *password = STAPSK;

//https://gist.github.com/mathiasvr/19ce1d7b6caeab230934080ae1f1380e
const uint16_t CIE[256] = {
    0,    0,    1,    1,    2,    2,    3,    3,    4,    4,    4,    5,    5,    6,    6,    7,
    7,    8,    8,    8,    9,    9,   10,   10,   11,   11,   12,   12,   13,   13,   14,   15,
   15,   16,   17,   17,   18,   19,   19,   20,   21,   22,   22,   23,   24,   25,   26,   27,
   28,   29,   30,   31,   32,   33,   34,   35,   36,   37,   38,   39,   40,   42,   43,   44,
   45,   47,   48,   50,   51,   52,   54,   55,   57,   58,   60,   61,   63,   65,   66,   68,
   70,   71,   73,   75,   77,   79,   81,   83,   84,   86,   88,   90,   93,   95,   97,   99,
  101,  103,  106,  108,  110,  113,  115,  118,  120,  123,  125,  128,  130,  133,  136,  138,
  141,  144,  147,  149,  152,  155,  158,  161,  164,  167,  171,  174,  177,  180,  183,  187,
  190,  194,  197,  200,  204,  208,  211,  215,  218,  222,  226,  230,  234,  237,  241,  245,
  249,  254,  258,  262,  266,  270,  275,  279,  283,  288,  292,  297,  301,  306,  311,  315,
  320,  325,  330,  335,  340,  345,  350,  355,  360,  365,  370,  376,  381,  386,  392,  397,
  403,  408,  414,  420,  425,  431,  437,  443,  449,  455,  461,  467,  473,  480,  486,  492,
  499,  505,  512,  518,  525,  532,  538,  545,  552,  559,  566,  573,  580,  587,  594,  601,
  609,  616,  624,  631,  639,  646,  654,  662,  669,  677,  685,  693,  701,  709,  717,  726,
  734,  742,  751,  759,  768,  776,  785,  794,  802,  811,  820,  829,  838,  847,  857,  866,
  875,  885,  894,  903,  913,  923,  932,  942,  952,  962,  972,  982,  992, 1002, 1013, 1023,
};

bool changed = false;
uint16_t fadeTime = 100;
uint32_t delayTime = 0;
uint16_t target = 0;
uint16_t current = 0;

uint32_t systick = 0;

ESP8266WebServer server(80);

void setup(void) {
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
  delay(250);
  
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.print("\n\n\nConnecting.");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("OK");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  if (MDNS.begin("esp8266")) {
    Serial.println("MDNS responder started");
  }

  server.on(F("/"), []() {
    String state = "<h1>Status</h1><br>";
    state += "<b>Current</b>: "+String(current)+"<br>";
    state += "<b>Target</b>: "+String(target)+"<br>";
    state += "<b>FadeTime</b>: "+String(fadeTime)+"<br>";
    state += "<b>DelaydTime</b>: "+String(delayTime)+"<br>";
    state += "<b>Changed</b>: "+String(changed)+"<br>";
    state += "<b>Systick</b>: "+String(systick)+"<br>";
    state += "<b>Uptime</b>: "+String(millis())+"<br>";
    server.send(200, "text/html", state);
    Serial.println("Index");
  });

  server.on(UriBraces("/fadeTime/{}"), []() {
    String data = server.pathArg(0);
    fadeTime = data.toInt();
    server.send(200, "text/plain", String("FadeTime: '") + fadeTime + "'");
    Serial.println(String("FadeTime: '") + fadeTime + "'");
  });

  server.on(UriBraces("/fade/{}"), []() {
    String data = server.pathArg(0);
    target = data.toInt();
    delayTime = fadeTime * 1000 / PWMSTEPS;
    server.send(200, "text/plain", String("Fade: '") + target + "'");
    Serial.println(String("Fade: '") + target + "'");
  });

  server.on(UriBraces("/set/{}"), []() {
    String data = server.pathArg(0);
    target = data.toInt();
    current = target;
    changed = true;
    server.send(200, "text/plain", String("Set: '") + target + "'");
    Serial.println(String("Set: '") + target + "'");
  });

  server.begin();
  Serial.println("HTTP server started");
}

void loop(void) {
  server.handleClient();

  if(delayTime > 0) {
    uint32_t cmicros = micros();
    uint32_t cmp = systick;
    if(2^32 - systick >= delayTime) {
      cmp = 2^32 - systick - delayTime;
    }
  
    if(cmp >= delayTime) {
      if(target > current) current++;
      if(target < current) current--;
      if(target == current) delayTime = 0;
      changed = true;
      systick = cmicros;
    }
  }

  if(changed) {
    Serial.print("\nChanged");
    Serial.print(" - Current: ");
    Serial.print(current);
    uint16_t pwmt=PWMSTEPS-current;
    Serial.print(" - PWM: ");
    Serial.print(pwmt);
    pwmt = CIE[pwmt];
    Serial.print(" - CPWM: ");
    Serial.println(pwmt);
    analogWrite(LED, pwmt);
    changed = false;
  }
}

Transparenz

LED-Streifen, ESP und DC-DC-Wandler wurde selbst gekauft und bezahlt. Das Spenderboard wurde mir vor längerem als E-Schrott geschenkt.

BitBastelei #450 – RTL8720DN: ESP32-Alternative mit 5GHz-WLAN? (RTLDuino/BW16)

BitBastelei #450 - RTL8720DN: ESP32-Alternative mit 5GHz-WLAN? (RTLDuino/BW16)

(2 GB) 00:20:59

2021-08-15 10:00 🛈

Der ESP32 ist für viele Bastler einer der beliebteren Mikrocontroller – halbwegs schnell, internes WLAN und günstig. Ein großer Knackpunkt: Er kann nur zu 2.4GHz-WLANs verbinden. Mit dem RTL8720 aus der Realtek Ameba-Serie scheint es da eine Alternative zu geben – hiermit soll endlich Dual-Band, also auch 5GHz-WLAN möglich sein. Und günstige Development-Boards scheinen auch nicht wirklich teurer als ein ESP. Also schauen wir doch mal, ob sich da ein ESP-Killer startklar macht, oder ob fehlende Doku und zweifelhafte SDKs auch hier die Bastelmotivation ersticken.

Inhalt

  • 00:00 RTL8720 vs. ESP32
  • 05:12 Arduino-Support einrichten
  • 08:05 Erster Test
  • 11:38 RTLDuino-Uploadproblematik
  • 15:29 LED-Test
  • 16:33 WLAN-Test
  • 18:57 Fazit

Fehler und Ergänzungen

  • 07:44 Realtek hat die Anleitung inzwischen aktualisiert
  • Allgemein: Das RTL8720-Board scheint weniger Strom zu ziehen als ein vergleichbares mit ESP32

Links zum Thema

Transparenz

Die gezeigten Geräte wurden selbst gekauft und bezahlt.

BitBastelei #448 – RS485 Fehlersuche & Reparatur

BitBastelei #448 - RS485 Fehlersuche & Reparatur

(1 GB) 00:22:38

2021-08-01 10:00 🛈

Vor einiger Zeit hatte ich einen Stromzähler mit Modbus vorgestellt, also einer RS485-Schnittstelle. Dieses kann über einen TTL-Adapter von einem Mikrocontroller wie dem ESP8266 ausgelesen werden. Oder konnte, denn aktuell kommen keine Daten durch. Also schauen wir mal, ob wir die Ursache finden und den Fehler beheben können.

Inhalt

  • 00:00 Das Problem
  • 01:55 Zähler-Aufbau
  • 05:08 Fehlersuche
  • 08:14 RS485: Auto-Umschaltung vs. Manuell
  • 11:01 Code-Erneuerung
  • 11:58 Test mit neuem Adapter
  • 15:40 Ursachensuche

Fehler und Ergänzungen

Im Video hab ich den MAX485 an 3.3V angeschlossen, offiziell ist der nur für 5V-Betrieb spezifiziert. Eigentlich müsste man ihn also mit 5V betreiben und ggf. per Pegelwandler die Datenleitungen auf 3.3V umsetzen. Danke an Linux Undercover für den Hinweis.

Links zum Thema

Transparenz

Die gezeigten Geräte wurden selbst gekauft und bezahlt.

BitBastelei #422 – Pulse-Sensor mit Arduino … oder auch nicht?

BitBastelei #422 - Pulse-Sensor mit Arduino ... oder auch nicht?

(1 GB) 00:16:50

2021-01-31 11:00 🛈

Einer der eher wichtigen Parameter des eigenen Körpers ist der Puls. Kein Wunder also, dass unter anderem viele Smart-Watches einen Sensor mitbringen um diesen jederzeit erfassen zu können. Und wenn Sensoren so verbreitet sind, dann lassen sie sich üblicherweise auch für eigene Basteleien als fertiges Modul erwerben. Ein solches hat seinen Weg auf meine Werkbank gefunden.

BitBastelei #411 – DIY USB Power Logger mit WiFi

BitBastelei #411 - DIY USB Power Logger mit WiFi

(392 MB) 00:41:54

2020-11-15 11:00 🛈

Vor knapp 4 Jahren hatte ich mir einen eigenen USB Power Logger gebaut, welcher Spannung und Strom eines USB-Gerätes aufzeichnen, auf einem Display anzeigen und per Seriell an einen PC übertragen konnte. Praktische Sache, doch mit WLAN wäre das Ganze doch gleich viel portabler, oder? Also: Designen wir das damalige Projekt nochmal neu. Mit ESP32 für WLAN und einem INA219 statt dem damaligen ACS712 für die Strommessung.

Inhalt

  • 00:00 Der Plan
  • 01:36 Genutzte Bauteile
  • 10:06 Aufbau der Hardware
  • 22:56 Software (ESP)
  • 33:52 Software (Server)
  • 38:15 It’s alive

Links zum Thema

Weitere Inhalte

BitBastelei #402 – TuxCon Kitty PCB Badge

BitBastelei #402 - TuxCon Kitty PCB Badge

(1 GB) 00:37:11

2020-09-13 10:00 🛈

Vor einiger Zeit hatte ich eine Platinen-Lötübung in Eulenform gebaut. Ein Ähnliches Lötkit mit freier Lizenz gab es vor einigen Jahren auf der bulgarischen Linux-Konferenz “TuxCon“: Das TuxCon Kitty. Besonders interessant: Diese Badge besitzt einen Mikrocontroller, welcher sich per USB programmieren lässt. Und das, obwohl der verwendete Controller eigentlich gar kein USB kann. Also ran an den Lötkolben – das will ich sehen.

Links zum Thema

Inhalt

  • 00:00 Badges?
  • 01:14 TuxCon Kitty: Aufbau
  • 05:00 Löten
  • 27:06 Was nicht passt…
  • 30:02 Bootloader ohne Programmieranschluss
  • 31:29 ArduinoISP
  • 33:08 Attiny per USB mit Arduino unter Windows
  • 35:30 It’s alive.

BitBastelei #398 – Die “Magie” hinter PWM (analogWrite, Timer, Preload, etc)

BitBastelei #398 - Die "Magie" hinter PWM (analogWrite, Timer, Preload, etc)

(319 MB) 00:53:48

2020-08-16 10:00 🛈

Mittels PWM, bei Arduino erreichbar als “analogWrite”, lassen sich viele Aufgaben erledigen: LEDs dimmen, Motoren steuern oder analoge Spannungen ausgeben. Aber was hat das mit Frequenz, Tastverhältnis und Timern zu tun? In diesem Video schauen wir uns PWM von der einfachsten Anwendung bis hin zu den Timer-Registern eines ATMega328P mit Preloading an und wie man darüber eigene Anforderungen abdecken kann.

Inhalt

  • 00:00 Intro
  • 01:04 PWM mit delay() und digitalWrite()
  • 02:07 Frequenz, Pulsweite und Durchschnittspannung
  • 08:07 PWM mit analogWrite()
  • 11:14 Wie funktioniert analogWrite()? Timer, Compare-Units und Prescaler.
  • 29:06 Frequenz ändern durch Prescaler
  • 31:23 Vorsicht: Timer 0 und Arduino
  • 32:45 Zusammenfassung der bisherigen Themen
  • 35:45 Sonderfrequenzen per Preload
  • 51:40 Fazit

BitBastelei #394 – Flashen über WLAN: OTA mit ESP8266/ESP32

BitBastelei #394 - Flashen über WLAN: OTA mit ESP8266/ESP32

(132 MB) 00:15:14

2020-07-19 10:00 🛈

Wenn man neue Firmware auf einen ESP8266 oder ESP32 bringen möchte ist das Prozedere ja eigentlich klar: USB ran, Upload klicken, warten. Wenn der ESP aber irgendwo eingebaut ist, dann kann USB schnell unpraktisch sein. Mit ArduinoOTA kann man alternativ direkt über WLAN eine neue Software installieren.

Inhalt

  • 00:00 Was ist OTA
  • 01:23 ArduinoOTA mit Arduino IDE
  • 09:19 Fallstricke
  • 10:25 ArduinoOTA mit PlatformIO
  • 12:33 Wie funktioniert ArduinoOTA