Schlagwort-Archive: Arduino

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

BitBastelei #386 – ESP01-Programmer: Boot/Reset Transistor Mod

BitBastelei #386 - ESP01-Programmer: Boot/Reset Transistor Mod

(2 GB) 00:31:56

2020-05-24 10:00 🛈

Um ESPs zu programmieren benötigt man einen USB-UART-Adapter und muss einige Pins beim Einschalten passend gegen VCC und/oder GND verbinden. Um das für ESP01-Module zu vereinfachen hatte ich mir vor einiger Zeit einen „ESP Programmer“ gekauft, auf welchen man das Modul einfach Einstecken kann. Nur leider nicht Programmieren, denn für das korrekte halten der Pins gibt es keine Ansteuerelektronik – man muss die Pins selbst mit Pinzette o.Ä. richtig ziehen. Das geht auch besser, also ergänzen wir mal eine automatische Programmierfunktion.

BitBastelei #383 – Kapazitiver Bodenfeuchtesensor

BitBastelei #383 - Kapazitiver Bodenfeuchtesensor

(1 GB) 00:23:39

2020-05-03 10:00 🛈

Achso, hm, Gießen soll man die Pflanzen? Und dann auch noch selbst dran denken? Das gibt doch keinen. Also muss wohl irgendetwas her, dass mich daran erinnert den grünen Balkonbewohnern ab und an auch etwas frisches Nass zu beschaffen. Mit einem Bodefeuchtesensor sollte das Problem schnell erledigt sein.

Video von Andreas Spiess