Schlagwortarchiv: bitbastelei

[ICStation.com] BitBastelei #243 – Si1145 Licht/IR/UV-Sensor

[ICStation.com] BitBastelei #243 - Si1145 Licht/IR/UV-Sensor

(106.9 MB) 00:24:19

2017-06-18 10:00 🛈

Sensorzeit: Mit dem Si1145 lassen sich so einige Werte aus dem Bereich „Licht“ erfassen: Neben der sichtbaren Lichtstärke rückt der Sensor gleich noch den Infrarot-Anteil und den aktuellen UV-Index raus. Praktisch wenn man wissen möchte, wie schnell der Sonnenbrand droht. Alles läuft mittels I²C, lässt sich also schnell mit nahezu jedem Mikrocontroller auswerten.

Das Modul von ICStation.com bringt den 2x2mm-Winzling auf ein für Bastler brauchbares Format und sorgt auch gleich noch dafür, dass die 5V eines Arduino den 3.3V-Chip nicht gleich zerstören.

Inhalt

  • 00:00 IC und Modul
  • 07:09 Si1145 an Arduino
  • 12:32 Messwerte – Si1145 vs. offizielle Werte
  • 17:07 Si1145 an ESP8266

Produkt

http://www.icstation.com/si1145-integrated-infrared-ultraviolet-sensor-module-arduino-stm32-p-10572.html

Mit dem Rabattcode: bitics gibt es 15% Rabatt

Korrekturen

Arduino betreibt die I²C-Pins immer mit internem Pull-Up, bei Nutzung eines 5V-Arduinos besteht daher die Gefahr, dass der Sensor beschädigt wird. Es sollte ein „I²C-Level-Shifter“ oder 3.3V-Mikrocontroller (3.3V-Arduino, ESP8266, etc) genutzt werden!

Weitere Links

Bild: https://www.adlerweb.info/blog/wp-content/uploads/2017/06/arduino-si1145-300×169.png

BitBastelei #242 – Dokumentarchivierung (AdAr)

BitBastelei #242 - Dokumentarchivierung (AdAr)

(71.8 MB) 00:24:34

2017-06-11 10:00 🛈

Toter Baum – von einigen auch Post genannt – ist schon etwas unpraktisch. Man muss es abheften und ab und an wiederfinden. Vor längerer Zeit habe ich – nachdem andere Systeme nicht zuverlässig funktionierten – mir aus anderen Systemen ein Archiv zusammengebaut. Mit AdAr (Another dumb Archive) kann man eingescannte Dokumente ordnen und wiederfinden. Da in letzter Zeit diverse Leute aus meinem Bekanntenkreis Interesse bekundet hatten, habe ich das ganze in einen halbwegs installierbaren Zustand gebracht.

Hier zeige ich wie mein Ablauf aussieht und wie man das System unter Debian 8 installieren kann.

BitBastelei #241 – HP 5314A Univeral Counter

BitBastelei #241 - HP 5314A Univeral Counter

(281.6 MB) 00:35:56

2017-05-28 10:00 🛈

Links:

 

[ICStation.com] BitBastelei #240 – Line-Following Robot Bausatz

[ICStation.com] BitBastelei #240 - Line-Following Robot Bausatz

(377.4 MB) 00:33:50

2017-05-14 10:00 🛈

Nachdem die meisten Bausätze bisher „nur“ blinken konnten sorgen wir jetzt mal für Bewegung: Dieser Bausatz enthält ein kleines Auto, welches einer aufgemalten Linie folgen kann – selbstfahrend sozusagen. Und da diese Bausätze sich an Einsteiger richten habe ich mir gleich einen solchen geangelt um zu schauen, ob man es tatsächlich als Anfänger schaffen kann.

Links

Bausatz: http://www.icstation.com/kits-intelligent-tracking-smart-suite-at89c2051-intelligent-p-10170.html
Gutscheincode: bitics (15% Rabatt)

Ergänzungen/Korrekturen

  • 31:03: Zwei AA-Batterien natürlich

Diese Version ist an diversen Stellen gekürzt um Irrwege oder doppelte Erklärungen einzusparen. Wer lieber die ausführliche Variante schauen möchte findet diese hier.

Hinweise

Der Bausatz wurde mit von ICStation.com kostenfrei zur Verfügung gestellt

BitBastelei #239 – Yaya 3D Pen

BitBastelei #239 - Yaya 3D Pen

(143.2 MB) 00:14:20

2017-05-07 10:00 🛈

Zusammen mit dem 101Hero hatte ich mir seinerzeit den Yaya 3D-Stift zugelegt – dank ordentlichem Rabatt bei Setkauf war er mit 19$ recht erschwinglich. Im Prinzip handelt es sich um den Druckkopf des 101Hero ohne das Delta-Gestänge. Über zwei Taster kann man Vor- und Rücklauf steuern, die Temperatur ist fest vorgegeben. Schauen wir mal was das Gerät so kann und was drin steckt.

BitBastelei #238 – ICStation.com: LM3915 Audio Level Indicator Bausatz

BitBastelei #238 - ICStation.com: LM3915 Audio Level Indicator Bausatz

(160.6 MB) 00:15:47

2017-04-23 10:00 🛈

Während der April wettertechnisch eher nass wütet ist es wieder Zeit für einen Bausatz: Der LM3915 ist ein Klassiker wenn es darum geht Audio-Aussteueranzeigen zu bauen – kein Wunder also, dass er in vielen Audiogeräten wie Equalizern oder Mixern kein Unbekannter ist. Mit dem passenden Bausatz von ICStation.com kann man eine solche Lautstärkenanzeige schnell selbst bauen und so z.B. selbstgebaute Boxen o.Ä. optisch aufwerten.

Links:

Inhalt:

  • 00:59 Produktbeschreibung ICStation.com
  • 01:36 Inhalt des Sets
  • 03:59 Der Haupt-IC LM3915
  • 05:35 Schaltung des Bausatzes
  • 08:09 Zusammenbau
  • 10:30 Erster Test
  • 10:48 Dot vs. Bar-Modus
  • 11:42 Logarithmisch vs. Linear

Ergänzungen/Korrekturen:

  • 09:48 Bei LEDs Polung beachten: Langes Beinchen zur „+“-Markierung
  • 13:36 Spannungsabstand natürlich
  • 15:00 Bezogen auf die internen Lautsprecher. Man kann natürlich noch eine Box zusätzlich anschließen um Musik und Anzeige zu haben

Hinweise:

Der Bausatz wurde mit von ICStation.com kostenfrei zur Verfügung gestellt

BitBastelei #237 – Strom/Spannung Einbaumessgerät

BitBastelei #237 - Strom/Spannung Einbaumessgerät

(223.6 MB) 00:22:05

2017-04-09 10:00 🛈

Das DL69-2048 hatte ich vor einiger Zeit für etwa 10€ geordert. Es handelt sich um ein Messgerät für Strom und Spannung, welches in einen Schlatschrank o.Ä. eingebaut werden kann. Im Gegensatz zu den günstigeren Varianten wird zusätzlich jedoch auch die Wirkleistung (W), die Scheinleistung (VA) und der zugehörige Leistungsfaktor (aka Power-Factor, cos ?) ausgegeben. Zwar wird die Blindleistung in deutschen Privathaushalten nicht abgerechnet, wer jedoch mit USV oder Invertern arbeitet muss sich auch mit diesen Werten auseinandersetzen.

BitBastelei #236 – Arduino-Temperaturmessung mit Thermoelement & MAX6675

BitBastelei #236 - Arduino-Temperaturmessung mit Thermoelement & MAX6675

(67.9 MB) 00:13:55

2017-03-26 10:00 🛈

Üblicherweise nutze ich für Temperaturmessungen den DS18B20, einen 1Wire-Sensor, welcher die Temperatur digital an den genutzten Mikrocontroller übermittelt. Hat man jedoch mit höheren Temperaturen zu tun muss man sich etwas anderes suchen: Maximal 80°C sind in guter Genauigkeit möglich. Wer in heißeren Umgebungen spielt kann z.B. ein K-Thermoelement nutzen, welches vielen von ihrem Multimeter bekannt sein dürfte. Zusammen mit einem MAX6675 lassen sich auch diese einfach an Controllern nutzen.

Als Beispiel verbinde ich ein solches Thermoelement mit MAX6675, einem Arduino und einem OLED-Display um die Temperatur eines Backofens im Auge zu behalten – und das genauer als das Original-Thermostat.

Links:

BitBastelei #235 – Uni-T UT210E Zangenmultimeter

BitBastelei #235 - Uni-T UT210E Zangenmultimeter

(94.8 MB) 00:11:13

2017-03-19 11:01 🛈

Das Uni-T UT210E ist ein preisgünstiges Zangenmultimeter, welches auch für Gleichstrom geeignet ist.

BitBastelei #234 – WS2812B (Neopixel) Uhr

BitBastelei #234 - WS2812B (Neopixel) Uhr

(131.5 MB) 00:38:13

2017-03-12 11:00 🛈

Die WS2812B, auch bekannt als Neopixel, sind RGB-LEDs mit internem Steuer-IC, welche sich über einen einzelnen Datenpin kaskadieren und separat ansteuern lassen. Als in meinem Feed ein Angebot für ¼-Kreise mit 15 dieser LEDs durchtickerte war der Plan schnell klar: 4 ¼-Kreise á 15 LEDs macht 60 LEDs. Passend für eine Uhr. Mal schauen, ob es auch funktioniert.
Zur Zeithaltung kommt ein DS3231 zum Einsatz – ein I²C-Chip, welcher speziell für Uhren gedacht ist und genauer funktioniert als die internen Taktgeber der üblichen µCs.

Inhalt:

  • 00:00 LED-Module & Aufbauplan
  • 08:22 LED-Test mit Adafruit-Library
  • 12:32 Warum RTC statt Systemtakt / millis()?
  • 17:05 Blick auf die Software
  • 34:13 Uhr in Aktion

Code:

/**
 * NeoClock
 * 
 * Clock using 60 WS2812B/Neopixel LEDs and DS3231 RTC
 * 
 * Libraries needed:
 *   * Adafruit NeoPixel (Library Manager) - Phil Burgess / Paint Your Dragon for Adafruit Industries - LGPL3
 *   * Rtc by Makuna (Library Manager) - Michael C. Miller
 *   * Arduino Timezone Library (https://github.com/JChristensen/Timezone) - Jack Christensen - CC-BY-SA
 *   * Time Library (https://github.com/PaulStoffregen/Time) - Paul Stoffregen, Michael Margolis - LGPL2.1
 */

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif

#if defined(ESP8266)
#include <pgmspace.h>
#else
#include <avr/pgmspace.h>
#endif

#include <SoftwareWire.h>  // must be included here so that Arduino library object file references work
#include <RtcDS3231.h>

#include <Time.h>        //http://www.arduino.cc/playground/Code/Time
#include <Timezone.h>    //https://github.com/JChristensen/Timezone

#include <EEPROM.h>

//Central European Time (Frankfurt, Paris)
TimeChangeRule CEST = {"CEST", Last, Sun, Mar, 2, 120};     //Central European Summer Time
TimeChangeRule CET = {"CET ", Last, Sun, Oct, 3, 60};       //Central European Standard Time
Timezone CE(CEST, CET);

TimeChangeRule *tcr;        //pointer to the time change rule, use to get the TZ abbrev
time_t utc;

SoftwareWire myWire(8, 9);
RtcDS3231<SoftwareWire> Rtc(myWire);

#define PIN 6

unsigned long lastMillis = millis();
byte dimmer = 0x88;
byte hmark = 0;

byte ohour=0;
byte ominute=0;
byte osecond=0;

boolean fader=true;

Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800);

void setup() {

  Serial.begin(115200);
  
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'

  Rtc.Begin();

  Rtc.Enable32kHzPin(false);
  Rtc.SetSquareWavePin(DS3231SquareWavePin_ModeNone); 

  if (!Rtc.GetIsRunning())
  {
      Serial.println("RTC was not actively running, starting now");
      Rtc.SetIsRunning(true);
  }

  if (!Rtc.IsDateTimeValid()) 
  {
      // Common Cuases:
      //    1) the battery on the device is low or even missing and the power line was disconnected
      Serial.println("RTC lost confidence in the DateTime!");
  }

  byte eechk = EEPROM.read(0);
  if(eechk == 0xAA) { //Assume this is our config and not a fresh chip
    dimmer = EEPROM.read(1);
    hmark = EEPROM.read(2);
    fader = EEPROM.read(3);
  }

  timeSync();
}

void calcTime(void) {
  utc = now();
  CE.toLocal(utc, &tcr);
  ohour = hour(utc);
  ominute = minute(utc);
  if(osecond != second(utc)) {
    osecond = second(utc);
    lastMillis = millis();

    if(ominute == 0 && osecond == 0) {
      //Every hour
      timeSync();
    }
  }
}

void addPixelColor(byte pixel, byte color, byte brightness) {
  color *= 8;
  uint32_t acolor = brightness;
  acolor <<= color;
  uint32_t ocolor = strip.getPixelColor(pixel);
  ocolor |= acolor;
  strip.setPixelColor(pixel, ocolor);
}

void drawClock(byte h, byte m, byte s) {  
  strip.clear();
  
  addPixelColor(m, 1, dimmer);

  if(hmark > 0) {
    for(byte i = 0; i<12; i++) {
      addPixelColor((5*i), 2, hmark);
    }
  }

  h %= 12;
  h *= 5;
  h += (m/12);
  addPixelColor(h, 2, dimmer);
  // 0x RR GG BB

  if(fader) {
    byte dim_s1 = dimmer;
    byte dim_s2 = 0;
    byte px_s2 = s+1;
    if(px_s2 >= 60) px_s2 = 0;
    unsigned long curMillis = millis()-lastMillis;
    if(curMillis < 250) {
      dim_s2 = 0;
      dim_s1 = dimmer;
    }else{
      dim_s2 = map(curMillis, 250, 1000, 0, dimmer);
      dim_s1 = dimmer - map(curMillis, 250, 1000, 0, dimmer);
    }
    
    addPixelColor(s, 0, dim_s1);
    addPixelColor(px_s2, 0, dim_s2);
  }else{
    addPixelColor(s, 0, dimmer);
  }
  
  strip.show();
}

byte rounds = 0;

void loop() {
  calcTime();

  if(rounds++ > 100) {
    Serial.print(ohour);
    Serial.print(":");
    Serial.print(ominute);
    Serial.print(":");
    Serial.println(osecond);
    rounds = 0;
  }
  
  drawClock(ohour,ominute,osecond);

  delay(10);
  
  chkSer();
}

void timeSync(void) {
  RtcDateTime dt = Rtc.GetDateTime();
  setTime(dt.Hour(),dt.Minute(),dt.Second(),dt.Day(),dt.Month(),dt.Year());
    
  Serial.print("Synced to: ");
  Serial.print(dt.Year());
  Serial.print("-");
  Serial.print(dt.Month());
  Serial.print("-");
  Serial.print(dt.Day());
  Serial.print("-");
  Serial.print(dt.Hour());
  Serial.print("-");
  Serial.print(dt.Minute());
  Serial.print("-");
  Serial.println(dt.Second());
}

void timeSave(void) {
  utc = now();
  
  RtcDateTime store = RtcDateTime(year(utc), month(utc), day(utc), hour(utc), minute(utc), second(utc));
  Rtc.SetDateTime(store);

  Serial.print("Synced to: ");
  Serial.print(year(utc));
  Serial.print("-");
  Serial.print(month(utc));
  Serial.print("-");
  Serial.print(day(utc));
  Serial.print("-");
  Serial.print(hour(utc));
  Serial.print("-");
  Serial.print(minute(utc));
  Serial.print("-");
  Serial.println(second(utc));
  
}

void setBrightness(byte brightness) {
  dimmer = brightness;
}

void chkSer(void) {
  unsigned int iy;
  byte im,id,iH,iM,iS;
  
  if(!Serial.available()) return;

  switch(Serial.read()) {
    case 'b':
      setBrightness(Serial.parseInt());
      Serial.print(F("Brightness changed to: "));
      Serial.println(dimmer);
      EEPROM.put(0, 0xAA);
      EEPROM.put(1, dimmer);
      break;
    case 't':
      iy = Serial.parseInt();
      im = Serial.parseInt();
      id = Serial.parseInt();
      iH = Serial.parseInt();
      iM = Serial.parseInt();
      iS = Serial.parseInt();
      setTime(iH,iM,iS,id,im,iy);
      Serial.println(F("System time changed"));
      break;
    case 'f':
      fader = false;
      EEPROM.put(0, 0xAA);
      EEPROM.put(3, 0);
      Serial.println(F("Fader off"));
      break;
    case 'F':
      fader = true;
      EEPROM.put(0, 0xAA);
      EEPROM.put(3, 1);
      Serial.println(F("Fader on"));
      break;
    case 'm':
      hmark = Serial.parseInt();
      EEPROM.put(0, 0xAA);
      EEPROM.put(2, hmark);
      Serial.println(F("HMark changed"));
      break;
    case 's':
      timeSync();
      Serial.println(F("Synced RTC to System"));
      break;
    case 'S':
      timeSave();
      Serial.println(F("Synced System to RTC"));
      break;
    default:
      Serial.println('?');
  }
}

Links: