OLED Display Rahmen

Wer für diesen Display einen Rahmen für die Montage an einem Blech benötigt, der kann sich hier die nötigen Mittel hohlen. Voraussetzung ist ein 3D-Drucker oder Zugang zu einem. In den meisten großen Städten gibt es bereits „Copy-Shops“ fürs 3D-Drucken.

Der Rahmen ist zum Einklippsen in eine Ausnehmung von 28mm x 33mm bei einer Blechdicke von 1.5mm. Der Display selbst wird ebenfalls in den Rahmen geklippst und hält dort ohne weitere Maßnahmen.

oled_frame

Das STL-File gibt es hier und den davon abgeleiteten G-Code gibt es hier. Für das Erstellen des G-Codes habe ich Slic3r genutzt.

Wer das STL-File selbst in den G-Code umwandeln will, der muss darauf achten, dass der Rahmen wie im Bild unten auf der Ebene liegt.

slic3r_mask

Das war’s. Kurz und bündig.

Advertisements

Online 2.1

Falls es jemanden aufgefallen ist, ich war längere Zeit nicht auf WordPress unterwegs. Das liegt daran, dass ich meine Website nun mit einer ordentlichen Domain betreibe (und im Urlaub war).

deloarts.com

Wer den Beitrag zu Online 2.0 gelesen hat, und sich dadurch auf die alte Website verirrt hat, dem wird auffallen, dass sich das Design nicht wirklich geändert hat.

preview.PNG

Was sich aber geändert hat, ist wie ich die Website nun erstelle. Die Website wird nun automatisch erstellt, ich definiere nur noch in den Content-html-Files, was ich auf der Seite sehen will, den Rest (Inhalt auf ein Base-File führen, alles vereinheitlichen, alles vereinfachen, etc…) erledigt Gulp. Hier läuft dann ein Server auf meinem PC, auf welchem ich ganz einfach die Website lokal betrachten kann.

Weiters kann ich mit Gulp-Watch das Verzeichnis, in dem die Website liegt, überwachen lassen, und bei Änderungen im Verzeichnis werden alle Vorgänge (Base-File, vereinheitlichen, …) automatisch ausgeführt, sowie der Browser aktualisiert. Kurz: Ich speichere das html-File in Sublime Text und einen Augenblick später sehe ich die Änderungen im Browser.

Die Domain habe ich mir bei world4you gehohlt, und der Webspace liegt nun bei uberspace, und nicht mehr bei bplaced.

Alles andere, also die Zweisprachigkeit, der Inhalt und der Support für mobile Geräte ist gleich geblieben.

2 Devices

Lediglich das Design bei Desktop-Nutzern hat sich verändert, da ich gesehen habe, zu was CSS3-Transformationen fähig sind! Auf mobilen Geräten ist das leider nicht verfügbar, da man keine Maus hat, mit der man das :hover-Event triggern könnte.

Bleibt nur noch eins zu sagen: Einen großen Dank an ralphharrer.at, er hat mir einen Einblick in die Web-Entwicklung gewährt und mich bei meinem Vorhaben unterstützt.

Arduino & ATtiny85

In diesem kurzen Beitrag zeige ich, wie man das Arduino als Programmer für den ATtiny85 Mikrocontroller nutzt.

Preview

Arduino IDE vorbereiten

Benötigt wird hierfür zunächst nur das Arduino Uno.

Arduino als ISP konfigurieren.

Als nächstes Öffnet man ArduinoISP (File, Examples, ArduinoISP) und lädt dieses Programm auf das Arduino Uno. Achtung, als Board muss hier das Arduino Uno ausgewählt sein.

ATtiny als Board hinzufügen.

Damit man das Arduino als ISP nutzen kann muss man zunächst den ATtiny in die IDE importieren. Dazu öffnet man die Preferences (File, Preferences) und klickt auf das Icon ganz rechts neben Additional Boards Manager URLs.

Preferences.JPG

Daraufhin öffnet sich ein weiteres Fenster, in welches man folgenden Link kopieren muss.

http://drazzy.com/package_drazzy.com_index.json

Additional_Boards.JPG

Im Anschluss öffnet man den Board Manager 

Boardmanager0.JPG

… und fügt das nötige Modul hinzu. In diesem Fall das ATtinyCore by Spence Konde.

Boardmanager1.JPG

Ist das erledigt kann man das ATtiny im Board Manager auswählen …

Boardmanager2.JPG

… und es im Anschluss konfigurieren.

Boardmanager3.JPG

Man muss darauf achten, alle Einstellungen mit meinen abzugleichen. Also den Timer auf CPU, den Chip auf ATtiny85 und die Clock auf 8MHz setzen.

Danach stellt man sicher, dass der Programmer auf Arduino als ISP eingestellt ist.

Arduino_As_ISP.JPG

Der Setup

Als nächstes folgt der physische Aufbau. Dazu benötigt man die folgenden Bauteile:

  • 1 Arduino Uno
  • 1 ATtiny85
  • 1 10µF Kondensator

Die Pins des ATtiny kann man mit Hilfe der folgenden Abbildung und der Wiring-Tabelle mit dem Arduino Uno verbinden.

ATtiny85_Pinout.png

  • Vcc: +5V
  • GND: GND
  • Reset: Pin 10
  • Pin 0: Pin 11
  • Pin 1: Pin 12
  • Pin 2: Pin 13

ATtiny85_Steckplatine.png

Burn Bootloader

Nun kann man das Arduino wieder mit dem PC verbinden und den Bootloader für den ATtiny auf diesen schreiben.

Burn_Bootloader.JPG

Nun kann man den ATtiny mit der Arduino IDE programmieren.

Programme hochladen

Als kleines Beispiel habe ich ein Programm vorbereitet, das eine LED blinken lässt. Abhängig von dem Status eines Tasters ändert sich die Blinkgeschwindigkeit. Der Aufbau muss dabei um

  • 1 LED
  • 1 220Ω Widerstand für die LED
  • 1 Pushbutton
  • 1 10kΩ Widerstand für den Button

ergänzt werden.

ATtiny85_Steckplatine1.png

Als nächsten Schritt fügt man das folgende Programm in die Arduino IDE ein und lädt es auf das ATtiny85 via dem Arduino Uno hoch.

#define LED 0
#define BUTTON 1

word Delay = 1000;

void setup() 
{
 pinMode(LED, OUTPUT);
 pinMode(BUTTON, INPUT);
}

void loop() 
{
 digitalRead(BUTTON) ? Delay = 250 : Delay = 1000;
 digitalWrite(0, HIGH);
 delay(Delay);
 digitalWrite(0, LOW);
 delay(Delay);
}

Das ganze sieht fertig dann etwa so aus:

Setup.jpg

Zum Schluss kann man noch alle Kabel, die zum Arduino führen, und den Kondensator entfernen, und eine Spannungsversorgung im Bereich von 3V bis 5V herstellen. Die 3V erreicht man beispielsweise durch 2 Batterien des Typs AA. Dann muss man allerdings den 220Ω Widerstand durch eine Drahtbrücke ersetzen.

Bei Fragen dazu, oder falls etwas nicht so funktioniert, wie es soll: Ein Kommentar ist immer erwünscht!

 

 

Online 2.0

Neben meinem Blog hier auf WordPress habe ich in den letzten paar Wochen auch an meiner Website gearbeitet, um mir das ‚Internet‚ etwas näher zu bringen. Konkret wollte ich HTML5 & CSS lernen. Nun ist sie endlich fertig und wartet darauf präsentiert zu werden: deloarts.bplaced.net

Top View.jpg

Die Website ist eine Spiegelung der Inhalte am Blog. Und dabei wird es auch bleiben, die Inhalte am Blog kommen immer zuerst. Dies hat zum einen den Grund, dass die Website auf den kostenlosen Servern von bplaced läuft und diese wirklich langsam sind, zum anderen nimmt das Übersetzen der Inhalte auch etwas Zeit in Anspruch – ja, die Website bietet nun auch allen englischsprachigen Interessenten die Möglichkeit die Projekte nachzubauen.

2 Devices.jpg

Der einzige Unterschied zum Blog sind die Bilder. Da mein Slogan ja Hacks, Photgraphy, Tools lautet und ich hier am Blog nichts über Fotografie veröffentlicht habe, hohle ich das auf der Website nach. Hier sieht man recht schnell das Problem der langsamen Server: Manche Bilder laden sehr lange oder werden nach dem Timeout nicht angezeigt (ein Pagerefresh hilft).

Pics.png

Mich würde interessieren was ihr von der Website haltet, was kann man besser machen oder was gefällt euch besonders?

.

.

RFID

In diesem How-To möchte ich zeigen, wie man recht simpel die RFID-Technik für sich nutzen kann. Hierzu verwende ich das RC522-RFID-Modul.

.

RFID Alone

.

Doch zuerst ein paar Worte zu der Technik selbst. RFID steht für Radio Frequency Identification. Das gesamte System besteht aus einem Lesegerät, und einem Informationsträger, welcher eine eindeutige ID hat. Die Informationsträger sind oft in Schlüsselkarten oder Chip-Anhänger verbaut, sie können aber auch wesentlich kleiner sein, etwa um entlaufene Haustiere damit identifizieren zu können, welche den Chip unter der Haut tragen.

Die Stromversorgung der Chips erfolgt in vielen Fällen ebenfalls über das Lesegerät. Dazu erzeugt dieses ein elektromagnetisches Wechselfeld, welches als Energie von der Antenne des Informationsträgers aufgenommen wird. Zusätzlich sendet das Lesegerät dabei Befehle mit, die vom Chip aufgenommen werden. Entsprechend des Befehls moduliert der Chip das magnetische Feld derartig, dass das Lesegerät auf diese Feldänderung reagieren kann. Diese Änderung wird letztendlich ausgewertet und kann so als Daten interpretiert werden. Meistens sind diese Daten die ID des Chips.

Der elektrische Aufbau

.

RFID With Arduino

.

Für das spätere Programm benötigt man eine Hand voll Bauteile:

  • Arduino Uno/Nano
  • RC522-RFID Modul
  • LED
  • Vorwiderstand für die LED (220Ω)
  • Ein paar Drahtbrücken

Die Verkabelung des Moduls sieht wie folgt aus:

  • Pin 9: RST
  • Pin 10: SDA
  • Pin 11: MOSI
  • Pin 12:MISO
  • Pin 13: SCK
  • 3V3: 3V3
  • GND: GND

Bei dem Modul ist darauf zu achten, dass es mit 3.3V versorgt werden muss, und nicht wie so oft mit 5V.

.

RFID Sketch_Schaltplan.jpg

.

Der oben gezeigte Schaltplan soll alle Unstimmigkeiten ausräumen.

Das Programm

Das Programm befindet sich auf GitHub und soll in ein paar Zeilen Programmcode zeigen, wie einfach man auf das Modul zugreifen kann.

Die Kommunikation zwischen Arduino und RC522 erfolgt über den SPI-BUS.

Voraussetzung ist eine zusätzliche Programmbibliothek, welche sich ebenfalls auf GitHub (hier oder hier) befindet. Der gesamte „MRFC522“-Ordner muss dann in das Standard-Bibliothekenverzeichnis von Arduino kopiert werden (…/Arduino/libraries/).

Ist das erledigt, so kann das eigentliche Programm geöffnet und auf das Arduino geladen werden. Stellt zu Beginn sicher, dass folgende Zeile am Anfang des Sketches nicht auskommentiert ist:

#define SERIAL

Diese Zeile sorgt dafür, dass die ID der Karte auf dem seriellen Monitor dargestellt wird. Ist das Arduino mitsamt dem RFID-Modul in Betrieb, so kann man einen RFID-Tag (Karte, Chip, etc.) in seine Nähe halten. Der serielle Monitor am PC sollte dann die ID der Karte anzeigen.

.

Serial_Denied.JPG

.

Ihr solltet nun ein ähnliches Bild sehen, wie das obere. Die Karte wird erkannt, die LED blinkt schnell und der serielle Monitor gibt euch die ID zurück. Allerdings habt ihr noch keinen Zugriff, da die ID der Karte noch nicht registriert ist.

Geht nun im Programm zur Zeile 45, welche die erlaubten Zugriffe gespeichert hat.

byte Access_UID_Array[2][7] = {{115, 130, 10, 1, 0, 0, 0}, {128, 60, 2, 1, 0, 0, 0}};

Tragt nun die ID eurer Karten und Chips in das Array ein. Achtet darauf, falls ihr einen neuen Block von 7 Zahlenblöcken erstellt, dass ihr auch die Größe des Arrays ändert. (Im Moment ist die Größe [2], da 2 Tags registriert sind). Falls euer Tag, so wie meiner, nur 4 Zahlenblöcke hat, dann lasst die letzten 3 Zahlenblöcke einfach als Nullen stehen. Dies muss so gemacht werden, da manche RFID-Tags 7 Zahlenblöcke als ID besitzen.

Wollt ihr beispielsweise eine Karte mit der ID 100 89 34 12 hunzufügen, dann erweitert die Zeile 45 einfach dementsprechend:

byte Access_UID_Array[3][7] = {{115, 130, 10, 1, 0, 0, 0}, {128, 60, 2, 1, 0, 0, 0}, {100, 89, 34, 12, 0, 0, 0}};

Habt ihr die ID eurer RFID-Tags eingetragen und das Programm auf das Arduino geladen, so solltet ihr beim nächsten Mal im seriellen Monitor die folgende Nachricht bekommen:

.

Serial_Granted.JPG

.

Zusätzlich zu positiven Nachricht sollte die LED nun für 2 Sekunden lang leuchten, ehe sie wieder dunkel wird.

Anstatt der LED ließe sich hier ein Zugmagnet verbauen, welcher eine Klappe oder ein Fach am Öffnen hindert. Hält man die registrierte Karte zum RFID-Empfänger, wird der Magnet aktiviert, der Bolzen fährt zurück und die Klappe ist zum Öfnnen freigegeben. Wie man solche Zugmagneten (oder andere Geräte über 5V) mit dem Arduino verbindet findet man hier.

Man muss darauf achten, dass diese Art von RFID-Kommunikation keineswegs sicher für sensible Anwendungen ist. Die Programmbibliothek unterstützt zwar Crypto1, jedoch gilt dies als unsicher.

Das war’s.

.

Anmerkung

Ursprünglich hatte ich vor, die berechtigten User aus einer Datei auf einer SD-Karte auszulesen. Dies hätte ich mit der SD-Bibliothek von Arduino und dem SD-Karten Modul von Catalex (v1.0) erreichen wollen.

Das Modul würde ebenfalls über den SPI-BUS mit dem Arduino kommunizieren. Es nutzt das SN74LVC125A als Level-Shifter. Leider wurden die nötigen Pins, um anderen Geräten die Kommunikation auf dem BUS zu ermöglichen, alle auf Ground gelötet. Deshalb blockiert das SD-Karten-Modul den BUS.

Die einzige Möglichkeit, das Modul von Catalex in Verbindung mit anderen SPI-Geräten auf dem Arduino zu nutzen ist, dass man einen virtuellen SPI-BUS (SoftSPI) erstellt, und so das Modul an getrennten Pins anschließt.

Dazu (vielleicht) ein anderes Mal mehr.

.

.

DSLR & Telegram

Der Titel mag vielleicht etwas verwirren, doch ich meine tatsächlich: Eine Kamera mit einem Messenger steuern.

Für alle, die Telegram nicht kennen, es ist das Pendant zum weitaus bekannteren Whatsapp. Auf die Vorzüge von Telegram will ich hier nicht eingehen, hierfür haben sich schon andere Blogger die Mühe gemacht -> siehe hier.

Noch eine Sache, bevor wir beginnen! Was in den folgenden Zeilen steht ist eine reine Spielerei. Eine Kamera mit einen Messenger steuern ist nicht gerade praktikabel, als netter Zeitvertreib jedoch sicherlich angebracht.

Get Telegram

Zu Beginn benötigt man natürlich Telegram. Neben der App am Smartphone verweise ich auch auf die PC/Mac-Version. Es ist überaus praktisch, dem Bot über den PC aufzusetzen, als über das Handy.

Danach gibt man in das Suchen-Feld den Namen BotFather ein. Dies ist der Manager aller Bots auf Telegram. Bei ihm sucht man um einen neuen Bot an.

Search_Botfather

Nachdem ihr den BotFather mit /start aufgerufen habt, erstellt ihr einen neuen Bot nach dem gleichen Schema wie im Bild unten gezeigt.

Talk_To_BotFather.PNG

Ist der Vorgang abgeschlossen, so erhält man einen eindeutigen Token. Dieser ist später im Programm wichtig!

Get Components

Euer Bot ist nun bereit. Doch um ihm zum Leben zu erwecken benötigt es einen Körper. In diesem Fall das Raspberry Pi 2 Model B (mit aktiver Internetverbindung).

Raspberry Pi.jpg

Im Grunde ist das auch alles was man benötigt. Ich arbeite jedoch nicht direkt am Raspberry, sondern via Terminal mit PuTTY. Die Daten schicke ich dem Pi per FileZilla.

Pre-Code

Bevor man das Programm, welches sich wie immer auf GitHub befindet starten kann, benötigt man ein paar Zusätze.

Telepot

Telepot erlaubt es mit dem Telegram-Bot via Python zu kommunizieren. Es ist denkbar einfach, Telepot auf sein Raspberry zu hohlen. Man muss lediglich folgende Commands in die Kommandozeile eingeben:

$ sudo apt-get install python-pip
$ sudo pip install telepot
$ sudo pip install telepot --upgrade  # UPGRADE

gPhoto2

gPhoto2 sorgt für die Kommunikation zwischen Raspberry und angeschlossener Kamera. Hier werden beinahe alle am Markt verfügbaren Kameras unterstützt (Eine Liste gibt es hier) . Man hohlt es sich wiederum durch den Befehl:

$ wget https://raw.githubusercontent.com/gonzalo/gphoto2-updater/master/gphoto2-updater.sh && chmod +x gphoto2-updater.sh && sudo ./gphoto2-updater.sh

Nun zum Test. Einfach die Kamera via USB an das Raspberry anschließen und sich diese dann im Terminal anzeigen lassen.

Dazu öffnet man zuerst den Terminal am Raspberry und tippt folgenden Befehl ein:

sudo --gphoto2 --auto-detect

Auto_Detect.PNG

Hat dies funktioniert, so kann man zum nächsten Schritt weiter gehen.

Der Code

Wie bereits erwähnt befindet sich das Programm auf GitHub und wurde mit Python 2 programmiert.

Token & User ID

Nun kommt der Token, welchen ihr vom BotFather bekommen habt, ins Spiel. Im Bereich des Beginns des Programms findet man die Zeilen

Bot_Name = "CameraBot"
Bot_Token = "INSERT TOKEN HERE"

Der Botname ist jener Name, welcher in den Nachrichten angezeigt wird, sofern ihr ihn mit Hilfe des BotFathers geändert habt (/setname). Der Token ist die eindeutige Kennung für den Bot.

Nun könnt ihr das Programm starten. Dazu muss man wieder über das Terminal den Startbefehl geben, oder man nutzt die auf Raspbean vorinstallierte Python 2 IDLE. Nutzt man das Terminal, und befindet man sich mit diesem im richtigen Verzeichnis, so muss startet man das Programm mit dem folgenden Befehl:

python DSLR_Telegram.py

Die Admin-ID

Momentan existiert kein Admin-User! Wie ihr vielleicht im Programm bemerkt habt, ist als Admin-ID eine Reihe Nullen eingetragen. Um die ID eures Telegram-Accounts herauszufinden, müsst ihr den Bot auf Telegram mit eurem Handy oder dem PC starten.

Dies erreicht man, indem man nach ihm im Suchen-Feld sucht. Gebt dazu den Namen des Bots ein. Achtet auf das @ vor dem Namen. Achtung! Der Name des Bots ist nicht jener, den ihr vielleicht mit /rename erzeugt habt, sondern der, den ihr ganz am Anfang gewählt habt!

Habt ihr den Bot gestartet, so wird die Meldung „Access denied.“ erscheinen. zusätzlich seht ihr im Terminal am Raspberry, dass ein Zugriff passiert ist. Darin findet ihr neben euren Namen auch eure ID. Brecht nun das Script ab und fügt die ID in das Programm in der Zeile

Admin_Users = [00000000] # INSERT USER ID !

ein. Startet das Script neu. Nun seht ihr, dass euch der Bot eine Startnachricht gesendet hat.

Nutzer Hinzufügen

Wollt ihr einen Nutzer hinzufügen, so muss dieser dem Bot das Keyword /start schreiben. Daraufhin schickt die ID des Nutzers an den Admin-User – euch.

Schickt nun dem Bot auf Telegram folgende Nachricht: /addUser ID Vorname Nachname

Achtet auf die Leerzeichen und lasst nichts aus. Wenn der Nachname unbekannt ist, oder wenn ihr eine Gruppe hinzufügt, schreibt (unknown) oder (group) statt dem Nachnamen. Der Bot ist nicht auf Eingabefehler abgesichert. Eine falsche Eingabe könnte zum Programmabsturz führen.

Ja, in der Hinsicht war ich Faul.

Kameraliste abrufen

Die Kameraliste bekommt ihr, indem ihr /getCam dem Bot mitteilt.

Get_Cam.PNG

Einstellungen abrufen und setzen

Mit diesem Script könnt ihr drei Einstellungen anpassen. ISO, Blende und Belichtungszeit. Wie die Syntax genau lautet seht ihr im Programm, oder indem ihr dem Bot die Nachricht /info schreibt.

Den ISO-Wert kann man mit /getISO abrufen. (Da ich die Werte in ein Dictionary schreibe und ich mir nicht die Mühe des Sortierens machen wollte, sieht die Liste etwas ungeschickt aus)

Get_ISO.PNG

Und mit /setISO Zahl könnt ihr den ISO-Wert setzen. Hier wieder auf das Leerzeichen achten!

Set_ISO.PNG

So geht man auch mit den beiden anderen Werten um.

  • /getAV und /setAV Zahl für die Blende
  • /getTV und /setTV Zahl für die Belichtungsdauer

Kamera auslösen

Zum Schluss will man natürlich noch ein Bild gesendet bekommen. Dies erreicht man über /pic

Pic.PNG

Noch eine kleine Anmerkung: Ich musste die Bildqualität weit nach unten setzen, da die Datei ansonsten zu lange zum senden dauert. Niemand will 10 Minuten auf ein Bild warten.

Resümee

Mit Telegram ein Bild gesendet zu bekommen ist nun nicht gerade das Neueste. Doch ich dachte mir, als mein erstes Raspberry-Script wollte ich 2 Fliegen auf einmal erwischen.

Telegram-Bots sind eine tolle Idee, um sich den Alltag zu erleichtern, etwa ein Erinnerungs-System für Gruppen. So kann niemand einen Termin vergessen.

Dann ist da noch die Möglichkeit, eine Kamera einfach via Python zu bedienen. Dies kommt mir bei Kamera-Projekten sehr gelegen, sei es beim Fotografieren von Wassertropfen oder beim Erstellen von Time-Lapse-Aufnahmen.

Vielleicht habe ich ja den einen oder anderen auf den Geschmack gebracht, und es entstehen mehr und mehr spannende Projekte!

Für nicht-Python User ist es vielleicht schwer, dem Programm zu folgen, wer dazu Fragen hat: Ein Kommentar ist immer erwünscht!

.

Update: Arduino IDE 1.6.6

Nach einiger Zeit habe ich nun doch ein Upgrade der Arduino IDE (Integrated Development Environment) von 1.0.5 auf 1.6.6 durchgeführt.

newIDE

Bis jetzt hat mich eigentlich nur der Umstand abgehalten, dass ich sowohl alle Programme in denen ich auf den Flash-Speicher (PROGMEM) zugreife etwas ändern musste und, dass ich Stino für Sublime Text 3 ebenfalls updaten musste. Letzteres war tatsächlich in unter einer Minute geschehen, dank Package Control. Package Control ist wirklich ein Feature, das ich jeden Sublime-User ans Herz legen will. Wer es nutzt, der weis wovon ich rede!

Was war bei den Programmen zu tun? Anscheinend hatte sich die Syntax für den Zugriff auf den Flash-Speicher geändert. So musste ich die Variablendeklaration etwas anpassen, und darauf hatte ich bis jetzt keine Lust.

Nun laufen aber alle meine Programme unter der 1.6.6er.