Staatssicherheit der DDR

Stasi in a Box

Dem ehemaligen DDR Bürger ist der Name „Stasi in a Box“ sicher recht. Alle anderen dürfen auch gern mit dem Namen „Big Brother“ Vorlieb nehmen.

Mir persönlich ist das Erstere lieber, weil es mit meiner Vergangenheit mehr gemein hat obwohl ich tatsächlich nur einmal in meinem Leben Berührung mit der Stastassicherheit hatte. Während meiner Lehrausbildung zum Werkzeugmacher hatte man tatsächlich versucht uns für die Arbeit bei der Staatssicherheit der DDR zu werben. Jeder musste einzeln zum Gespräch ins kleine Kämmerlein und wurde dort mehr oder weniger unter Druck gesetzt. Glücklicherweise habe ich stand gehalten und abgelehnt.

Irgendwann, viele jahre später, die DDR war Geschichte, hatte ich die Idee für ein kleines Arduino Projekt. Es gab im Netz schon ein paar Basteleien mit sich bewegenden Augen aber eben nicht mit diesem geschichtlichen Hintergrund.

„Das ist sie, die „Stasi in a Box“ Box

geöffnete Box

Du hast keine Chance, Du kannst nicht entkommen…

Nimmt man den Deckel im Inneren der Box ab, ergibt sich folgendes Bild.

Big Brother Stasi in a Box

Blick auf die inneren Werte

Ein Arduino Nano, ein Batteriehalter mit vier AA-Batterien und das Herzstück, die Machanik. An einem 3D gedruckten Grundkörper sind sowohl das bewegliche Auge als auch die beiden Miniaturservos befestigt, welche das Auge über zufällig ermittelte Werte bewegen. Die Zufallswerte für x und y sowie die Pausenzeiten werden mittels Zufallszahlen ermittelt.

Die Mechanik von oben

Mechanik von unten

Mechanik in Bewegung

Hier ist der Code. Ich glube da gibt es nicht viel zu sagen.

#include <Servo.h>

Servo myservo1; //links und rechts
Servo myservo2; //auf und ab

void setup() 
{
  myservo1.attach(9);  
  myservo2.attach(11);
 }

void loop()

{
  myservo1.write(random(60, 120));
  delay(random(400, 2000));
    
  myservo2.write(random(60, 120));
  delay(random(400, 2000));
}

Smart Kindle Picture Frame

Bilderrahmen mit Kindle Paperwhite


Smart Kindle Picture Frame

Der Kindle von Amazon hat, wie viele ähnliche E-Book Reader, ein sogenanntes E-Ink Display. Diese Displayart hat die nette Eigenschaft, dass nur zur Aktualisierung Strom benötigt wird und der angezeigte Inhalt dann stromlos für einen sehr langen Zeitraum erhalten bleibt. Wer mehr wissen will kann sich hier (Wikipedia) schlau machen.

Das Display kann Bilder im JPG oder PNG Format anzeigen. Dabei müssen einige Vorraussetzungen erfüllt sein. Das Bild muss je nach Readerversion eine entsprechende Auflösung aufweisen und es muss in Graustufen konvertiert sein. Ich habe die Erfahrung gemacht, dass es entgegen anderslautender Aussagen nicht auf 16 Farben beschränkt sein muss abhängig von der benutzten Programmbibliothek.

Ein Bilderrahmen für die Großeltern

Die Idee ist es, den Großeltern einen digitalen Bilderrahmen zu schenken dessen Inhalt sich in regelmäßigen Abständen aktualisiert. Hierzu weckt die Software des Bilderrahmens diesen auf, greift auf einen FTPS-Server zu, holt sich ein gespeichertes Bild, konvertiert dieses ins richtige Format, stellt es auf dem Bildschirm dar und schaltet den den Bilderrahmen wieder in den Stand-By Modus um Strom zu sparen.

Dadurch bekommen die Großeltern regelmäßig ein schönes Bild ihrer Kinder und Enkel jenseits von Whatsapp & Co und das auch noch in einem schönen Rahmen.

Das Erscheinungsbild des Bilderrahmens steht dem eines mit echtem Foto in fast nichts nach. Manchmal wünscht man sich ein etwas besseres Reflektionsverhalten also die Fähigkeit einfallendes Licht zurückzuwerfen. Ein weißes Blatt Papier liegt hier bei ca 75%-80%. Der Kindle Paperwhite liegt mit seinem E-Ink Bildschirm nur bei ca. 40%, aber das ist ok.

Der JailBreake

Was ist das?

Um den Kindle in einen digitalen Bilderrahmen zu verwandeln, bietet es sich an den vorhandenen Bildschirmschoner zu nutzen. Leider kann dieser im Originalzustand nur die von Amazon hinterlegten Bilder darstellen. Möchte man hier etwas eigenes, dann muss der Kindle gehackt werden. In Fachkreisen nennt man das dann JailBreake.

Um den Kindle hat sich in den Jahren seit seiner Markteinführung eine große Gemeinschaft gebildet.

Link zum Mobileread Forum

Ziel war es den Kindle zu personalisieren und eigene Software laufen zu lassen, handelt es sich doch um ein Linux Gerät. Anfangs war der JailBreake noch über Softwarelösungen durchführbar. Leider schläft Amazon nicht auf dem Baum und hat deshalb fiese Sperren in seine Firmware eingebaut.

Mein Kindle hatte schon beim Gebrauchtkauf die aktuellste Firmwareversion 12.1.2. An einen JailBreake per Software war nicht im Traum zu denken. Nun haben findige Leute einen Weg gefunden über die serielle Schnittstelle auf dem Mainboard den Kindle zu hacken.

Anleitung zum Serial JailBreake gibt es hier!

Ich habe es getan und es ist beiweitem nicht so schlimm wie es sich aufs Erste anhört. Die folgenden Bilder sind von einem Paperwhite 2 (anderes Projekt) der sich aber nur geringfügig von einem Paperwhite unterscheided. Die Vorgehensweise ist die gleiche.

Zuersteinmal muss der Kindle geöffnet werden. Das lässt sich mit einem nicht allzu scharfem Küchenmesser bewerkstelligen. Der Frontrahmen ist nur geklebt und lässt sich leicht entfernen. Im unteren Bereich wo der Schriftzug ist bitte etwas vorsichtig sein, da sind die LEDs für den Bildschirm der Hall Sensor für das Cover. Weiterhin kann man die Bildschirmschutzfolie ablösen wenn man mit dem Messer zu weit hineintaucht.

open a kindle

Danach liegen das Gehäuse und das Mainboard vor uns.

IMG_5475
entfernter Abdeckrahmen

Jetzt werden alle Schrauben gelöst. Beim Paperwhite 2 3G sind es 10 Stück, vermutlich wegen der 3G Antenne. Beim Paperwhite sind es 11 Stück

IMG_5476
Lösen der Befestigungsschrauben
IMG_5475
Position der Befestigungsschrauben
IMG_5477
Kindle ohne Gehäuse, Ansicht von oben
IMG_5478
Kindle ohne Gehäuse, Ansicht von unten

Das Modem und die Sim Karte habe ich ausgebaut, weil ich mir dadurch einen geringeren Stromverbrauch verspreche. Kann auch nur Einbildung sein. Den Antennenaschluss lässt man einfach baumeln oder fixiert ihn mit Klebeband.

IMG_5483
3G Modem und SIM Karte ausgebaut

So, Akku raus und los gehts. Der Akku ist nur mit drei Schrauben befestigt.

IMG_5480
Akku ausgebaut

Die serielle Schnittstelle ist schnell gefunden.

Kindle serial jailebrake

Jetzt gehts ans Löten. Wer sich das nicht zutraut, es gibt ganz gute Methoden zum lötfreien Kontaktieren. (lötfreies Kontaktieren) Man sollte bevor man anfängt zu Löten auf alle Fälle den Akku und ausbauen. Sicher ist sicher.

IMG_5504
serielle Schnittstelle mit angelöteten Kabeln

Der gelbe Draht geht zu TX am Adapter, der orange Draht zu RX und der grüne zu Masse (siehe unten). Den USB-RS232 Adapter habe ich bei Amazon gekauft. Hier muss man unbedingt darauf achten, dass er sich auf 1,8V stellen lässt oder von haus aus ein 1,8V Typ ist. Sonst kann man sich von seinem Kindle verabschieden!!!

Hier der Link zum USB-RS232 Adapter!

USB-RS232_Adapter
Serieller Adapter (Quelle: Amazon)
Adapterbeschaltung
Verbindung zum seriellen USB Adapter

Wenn man die Kabel noch etwas mit Klebeband fixiert, kann das nicht schaden.

Ich werde jetzt hier nicht den ganzen Vorgang des Jailbreakes beschreiben. Das habe andere schon sehr detailliert getan. Siehe hier!

Das Kindle root Passwort bekommt man übrigens sehr komfortabel mit dem Kindle Password Tool heraus.

Was muss auf dem Kindle installiert werden:

  • Jailbreake
  • Jailbreake Hotfix
  • KUAL
  • KUAL helper um ab Firmware 5.6.x Softwarepakete installieren zu können,
  • Usbnet für den Zugriff auf den Kindle über WLAN
  • Python 
  • Screen Saver Hack für den Bildschirmschoner und etwas mehr, dazu später

Alle benötigen Softwarepakete bekommt man hier.

Die Installationsanweisungen findet man in den jewiligen Readme Dateien der Softwarepakete. Bei USBnet bitte unbedingt die Readme Datei lesen, hier kann viel schief gehen. Um genau zu sein, kann man sich, wenn´s dumm läuft, den Zugriff auf den Kindle komplett verbauen.

Eine sehr gute Anleitung für USBnet findet man hier.

Was muss auf dem PC installiert werden:

  • PuTTy (Link) um mit dem Kindle in Kontakt zu treten
  • Notepad++ (Link) um Dateianpassungen vornehmen zu können, Windows Editor funktioniert nich mit Linux Dateien, da er die Linux Line Endings entfernt,
  • FTP Programm z.B. WinSCP (Link) um Dateien auf den Kindle zu transferieren. Das geht auch über USB ist aber mit WinSCP über WLAN viel komfortabler.
  • RNDIS Treiber um den Kindle als Netzwerkkarte zu benutzen (Link)

Da ich auch zu der Gruppe Menschen gehöre, die ungern Anleitungen liest, habe ich sehr viel Zeit mit dem Versuch verbracht, mich über WLAN am Kindle anzumelden. Leider wurde mir der Zugang verwehrt da ich angeblich nicht über das richtige Passwort verfügte. In der README.txt von USBnet steht eindeutig drin, dass man sich zuerst über Telnet anmelden soll.

Einstellungen für Telnet in PuTTY
Einstellungen in PuTTY für Telnet

WLAN muss am Kindle ausgeschaltet sein und der Kindle über USB im Modus USBNet enabled (kein MassStorage) sein. Die IP-Adresse ist die, welche in der config Datei im Ordner usbnet/ect, festgelegt ist.

USBnet_Config

Telnet verlangt kein Passwort aber der Zugang über WLAN mit PuTTY. Also auf alle Fälle das Passwort als root mit

  • mntroot rw    (Lese- und Schreibrechte auf Root System vergeben)
  • passwd

ändern. Hat man das erledigt setzt man das Root system wieder auf read only.

  • mntroot ro

Danach sollte die Anmeldung über WLAN funktionieren. Die Einstellungen für PuTTy findet man in der Serial Jailbreake Beschreibung unter Punkt 3. Set up PuTTy)

Der Rahmen

Der Rahmen ist für ein Foto der Größe 13×18. Der Ausschnitt im Passepartout hat die Maße 118mm x 88mm. Damit hat man eine ungefähre Randabdeckung des Kindle Bildschirmes von umlaufend 1mm.

Den Kindle selbst habe ich mit doppelseitigem Klebeband auf die Rückseite des Passepartouts geklebt. Im Rahmen wurde ein Loch eingearbeitet um an die USB Buchse des Kindles zu kommen. Somit lässt sich der Bilderrahmen auch einigermaßen komfortabel aufladen.

Die Aufbereitung der Bilder für den Screen Saver Hack funktioniert am Besten mit Gimp. Das ist kostenlos und ein sehr guter Photoshop Ersatz. Die Anforderungen an ein Screen Saver Bild sind folgende:

  • Auflösung muss der des Bildschirmes entsprechen sonst sieht das nachher sehr wild aus. Der Paperwhite und der Paperwhite 2 haben 758 x 1024.
  • Das Bild sollte in Graustufen mit 8bit Auflösung konvertiert werden und als .png gespeichert werden
  • Manch Leute fordern noch eine Reduzierung auf 16 Graustufen (Indiziert) was ich aber nicht bestätigen kann. Es funktioniert auch mit mehr Graustufen.
  • Das Bild muss 90° gegen den Uhrzeigersin gedreht werden, damit es auf dem Bilderrahmen im Querformat richtig dargestellt wird es sei denn man will einen Bilderrahmen im Hochkantformat haben.

Die Bilder müssen eine fortlaufende Nummerierung haben. Die Bilder einfach im Ordner:

/mnt/us/linkss/screensavers/

abspeichern und den Kindle neu starten. Der Screen Savers Hack benennt angeblich alle Bilder nach seinen Vorstellungen um. Ich habe das nie probiert. Ich habe alle Bilde im Vornherein schon in fortlaufender Nomenklatur benannt.

  • bg00_medium_001
  • bg00_medium_002
  •  
  •  

Wozu dient der Kühlschrankmagnet

Kindle_001
Bilderrahmen Version 1

Da ich den Kindle als Bilderrahmen benutzen möchte und nicht nur als Bildschirmschoner auf einem normal genutzten Kindle muss eine Möglichkeit her, die Bilder auf einfache Weise zu wechseln ohne auf einen Knopf zu drücken ect.

Für den Kindle gibt es eine Hülle, welche ihn beim Zuklappen in den Ruhezustand versetzt. Dafür hat der Kindle am unteren Rand in der Leiste wo sich auch die LEDs für die Bildschirmbeleuchtung befinden einen Hall-Sensor und die Hülle hat einen engesetzten Magneten. Schließt man nun die Hülle wird der Hall Sensor aktiviert und der Kindle geht in den Standby.

Hall_Sensor
Position des Hall-Sensors

Diese Funktion habe ich mir zunutze gemacht und schalte nun die einzelnen Bilder mit dem Kühlschrankmagnet, der links unten in der Ecke vom Bilderrahmen liegt, durch. Schiebt man ihn kurz zur Seite startet der Kindle und schiebt man den Magnet zurück, dan wird das nächste Bild als Bildschirmschoner geladen.

Der Akku hält übrigens beim einmaligen Wechsel pro Tag ziemlich lange. Ich will nicht übertreiben, aber es sollten mindestens 200 Tage wenn nicht mehr sein, da man auch nicht jeden Tag wechselt.

Einen automatischen Wechsel kann man auch realiseren und genau darum geht es im Folgenden.


 

Der Bilderrahmen der alles alleine macht und fast ein Jahr lang durchhält!

Smart Kindle Picture Frame
fertiger Bilderrahmen mit geladenem Bild

Das Ziel war es von Anfang an einen digitalen Bilderrahmen zu bauen, der nicht permanent am Netzteil hängen muss und wenn möglich mindestens ein halbes Jahr oder mehr ohne aufladen auskommt. Aus diesem Grund ist die Entscheidung ja auch auf ein E-Ink Display gefallen.

Im Mobilereader Forum gibt es ein Script mit dem Namen Onlinescreensaver. Dieses Script wird einfach auf den Kindle kopiert und läd dann automatisch nach einem selbstdefiniertem Zeitraum ein PNG-Bild von einer Web-Adresse.

Leider war es mir nicht möglich dieses Script zum Laufen zu bekommen.

Ich bin dann nach einigen Recherchen auf die Seite von Nico Hartung gestoßen. Er benutzt den Kindle um ein mit Python erstelltes Bild mit Daten von einer Wetterstation als Wetterdisplay anzuzeigen. Das Bild holt sich der Kindle von einem eigens eingerichteten Server wo die Daten der Wetterstation gesammelt und in ein Bild gepackt werden.

Auf Basis von Nicos Script habe ich ein eigenes Script geschrieben, welches den Kindle  einmal am Tag aufweckt, auf einen FTP-Server zugreift, ein dort hinterlegtes Bild herunterläd, es mit Imagemagick (später mehr) auf dem Kindle bearbeitet um den Kindle Konventionen zu entsprechen, dieses dann auf dem Bildschirm darstellt, einen Logfile an den FTPS Srever sendet und den Kindle dann wieder schlafen schickt. Als Aufwachzeit habe ich mich für Mitternacht entschieden. Da schlafen die meisten Leute und wenn man morgens aufsteht, kann man sich über ein neues Bild freuen.

Das Script läuft permanet durch, weckt den Kindle auf, aktualisiert den Bildschirm und schickt den Kindle wieder schlafen. Möchte man eine Aktualisierung erzwingen, kann man den Kindle duch drücken der Taste aufwecken oder einen Magneten and den HALL-Sensor (siehe oben) halten. Das hat den gleichen Effekt, als würde er um Mitternacht selbstständig aufwachen. Wenn der Kindle schläft, befindet sich das Programm im RAM. Hier wird der Schlafmodus Suspend to RAM (ACPI Modus S3) genutzt. Alle ungenutzen

Hier das Script:

#!/bin/sh

###########################################################
### Programmer: Nico Hartung <nicohartung1@googlemail.com>#
### chnaged for Picture Frame Mario Deuse <mdauso@web.de> #
###########################################################

###########################################################
## Install                                                #
## copy onlinepictureframe folder to mnt/us/extensions/   #
## activate or deaktivate as usual in KUAL                #
###########################################################

#VERSION
# - 20200307_V010
# - due to it´s speed on paperwhite 2 the script ends before midnight
#   120 seconds added to make shure the script sets the wakeup time to next day

# - 20200218_V009
# - status bar deactivated

# - 20200217_V008
# - imagemagick optimized for better dithering and cropping of pictures to fill screen even
#   if the aspect ration doesn`t fit to screen aspect ratio
#   to prevent from bars on upper and lower side of the picture

# - 20200212_V007
# - checking for new script on server, copy to script direction and reboot
# - Hostname added for picture frame location

# - 20200212_V006
# - V005 not used
# - DynDNS from MyFritz used from now on
# - tmp folder removed from script,
#   downloaded pictures will now be stored inside bin folder,

# - 20200207_V004
# - usage of FTPS instead of FTP from now on

# - 20200206_V003
# - V002 not used
# - sleep 4 min after STR when battery level is low, when connecting charger the Kindle wakes up but the battery
# - will not be over minimum level and the script would go into STR again

############################################################
# Variables
NAME=pictureframe
NAMEOLD=pictureframe_old
SCRIPTDIR="/mnt/us/extensions/onlinepictureframe/bin/"
TEMPDIR="/mnt/us/documents/"
LOG="${SCRIPTDIR}/${NAME}.log"
LOGOLD="${SCRIPTDIR}/${NAMEOLD}.log"


#FTPS Server the pictures are located on
USER="xxx"                            # FTPS user
PASSWORT="xxx"                        # FTPS password
PORT="xxx"                            # port of FTPS-Server
FTPADRESSE="xxx"                      # DynDNS adress of FTPS server

#Where will the picture frame be located
#HOSTNAME="xxx"
HOSTNAME="xxx"
#HOSTNAME="xxx"

ROUTERIP="192.168.178.1"              # Standard Gateway AVM Fritz!Box
#ROUTERIP="192.168.2.1"               # Standard Gateway Telekom Speedport

#!!!Be sure to have this folder structure on FTPS-Sever or change the script here!!!
ORT="/Bilderrahmen/Bilder/${HOSTNAME}/abc.JPG"              # location of picture on server
FTPLOG="/Bilderrahmen/Logfiles/${HOSTNAME}/"                # location of Logfile on server
NEWSCRIPT="/Bilderrahmen/Newscript/${HOSTNAME}/${NAME}.sh"  # new script on server

#!!!The picture on FTPS-server must have the right name and ending: "abc.JPG" !!!
TEMPFILEJPG="${SCRIPTDIR}/abc.jpg"
TEMPFILEPNG="${SCRIPTDIR}/abc.png"

LOGCOUNTER=0                                                # number of Log entries
LOGCOUNTERALL=1                                             # number of Log´s

NET="wlan0"

LIMG="${SCRIPTDIR}"
LIMGBATT="${SCRIPTDIR}/pictureframebattery.png"
LIMGERR="${SCRIPTDIR}/pictureframeerror_image.png"
LIMGERRWLAN="${SCRIPTDIR}/pictureframeerror_wlan.png"
LIMGWEISS="${SCRIPTDIR}/weiss.png"
LIMGNEWSCRIPT="${SCRIPTDIR}/newscript.png"


SUSPENDFORS=600                                             # short sleeping time in case of ERROR
BATTERYALERT=10                                             # from this Battery Level on to lower values a info will be displayed
BATTERYLOW=6                                                # from this Battery Level on to lower values the picture frame will go into STR an show a "Please Charge Picture"
BATTERYSLEEP=432000                                         # 5 days sleep time when Battery Level is equal or below "BATTERYLOW"

###################################################################################
### Functions
kill_kindle() {
  initctl stop framework    > /dev/null 2>&1                # "powerd_test -p" doesnt work, other command found
  initctl stop cmd          > /dev/null 2>&1
  initctl stop phd          > /dev/null 2>&1
  initctl stop volumd       > /dev/null 2>&1
  initctl stop tmd          > /dev/null 2>&1
  initctl stop webreader    > /dev/null 2>&1
  killall lipc-wait-event   > /dev/null 2>&1
}

customize_kindle() {
  mkdir /mnt/us/update.bin.tmp.partial                      # prevent from Amazon updates
  touch /mnt/us/WIFI_NO_NET_PROBE                           # do not perform a WLAN test
}

#return true if keyword not found
wait_wlan() {
  return `lipc-get-prop com.lab126.wifid cmState | grep CONNECTED | wc -l`
}

###################################################################################
### Script

### stop Kindle pocesses
kill_kindle

### customize Kindle
customize_kindle

###################################################################################
### Loop

while true; do

 echo "." >> ${LOG} 2>&1
 echo "." >> ${LOG} 2>&1
 echo "========================================================" >> ${LOG} 2>&1
 
 echo "`date '+%Y-%m-%d_%H:%M:%S'` Logbucheintrag Nr. ${LOGCOUNTER} von Logbuch Nr. ${LOGCOUNTERALL}" >> ${LOG} 2>&1
 
 echo "========================================================" >> ${LOG} 2>&1

### activate CPU Powersave
 echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
 echo "`date '+%H:%M:%S'` CPU runtergetaktet." >> ${LOG} 2>&1

### switch off screen saver
 lipc-set-prop com.lab126.powerd preventScreenSaver 1 >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` Bildschirmschoner ausgeschaltet." >> ${LOG} 2>&1
 
### switch off the top status bar
 lipc-set-prop com.lab126.pillow disableEnablePillow disable
 
 #lipc-set-prop com.lab126.pillow interrogatePillow '{"pillowId": "default_status_bar", "function": "nativeBridge.hideMe();"}'
 #PILLOW_SOFT_DISABLED="yes"
 echo "`date '+%H:%M:%S'` Statusleiste deaktiviert." >> ${LOG} 2>&1

### check battery level and maybe start STR
  CHECKBATTERY=`gasgauge-info -s`
if [ ${CHECKBATTERY} -le ${BATTERYLOW} ]; then
 echo "`date '+%H:%M:%S'`  Akkuladung bei 5%, statisches Batteriezustandsbild gesetzt!" >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'`  Logfile an Sever gesendet." >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'`  STR, bitte Akku aufladen!" >> ${LOG} 2>&1
 eips -f -g "${LIMGBATT}"
 /mnt/us/usbnet/bin/curl -T ${LOG} -k --ftp-ssl --tlsv1 --ftp-ssl-reqd --ftp-pasv ftp://${USER}:${PASSWORT}@${FTPADRESSE}:${PORT}/${FTPLOG}           # send Logfile to server
 rtcwake -d /dev/rtc1 -m no -s ${BATTERYSLEEP}                                                                                                        # picture frame will sleep for X days or wakes up in case of charging.
 echo "mem" > /sys/power/state
 sleep 300                                                                                                                                            # waiting time when charging until battery level is higher than "BATTERYLOW" otherwise it will fall into sleep again
else
 echo "`date '+%H:%M:%S'` Verbleibende Akkuladung: `gasgauge-info -c` "  >> ${LOG} 2>&1
fi

### activate WLAN
 lipc-set-prop com.lab126.wifid enable 1 >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` WLAN aktivieren. " >> ${LOG} 2>&1

 WLANNOTCONNECTED=0
 WLANCOUNTER=0
 SHORTSUSPEND=0

### wait for WLAN
while wait_wlan; do
  if [ ${WLANCOUNTER} -gt 30 ]; then
 echo "`date '+%H:%M:%S'` Kein bekanntes WLAN verfügbar." >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` DEBUG ifconfig > `ifconfig ${NET}`" >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` DEBUG cmState > `lipc-get-prop com.lab126.wifid cmState`" >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` DEBUG signalStrength > `lipc-get-prop com.lab126.wifid signalStrength`" >> ${LOG} 2>&1
 eips -f -g "${LIMGERRWLAN}"
 WLANNOTCONNECTED=1
 SHORTSUSPEND=1                                                                                                                                       #short sleeptime will be activated 
 break
  fi
 let WLANCOUNTER=WLANCOUNTER+1
 echo "`date '+%H:%M:%S'` | ${HOSTNAME} | Warte auf WLAN (Versuch ${WLANCOUNTER})." >> ${LOG} 2>&1
 sleep 1
done


### connected to WLAN?
if [ ${WLANNOTCONNECTED} -eq 0 ]; then
 echo "`date '+%H:%M:%S'` Mit WLAN verbunden." >> ${LOG} 2>&1

### lost Standard Gateway if WLAN`s not available
 GATEWAY=`ip route | grep default | grep ${NET} | awk '{print $3}'`
 echo "`date '+%H:%M:%S'` ausgelesener Standard-Gateway:  ${GATEWAY}." >> ${LOG} 2>&1
  if [ -z "${GATEWAY}" ]; then
 route add default gw ${ROUTERIP} >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` Standard-Gateway nach Sleep nicht mehr vorhanden." >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` Standard-Gateway wird neu auf ${ROUTERIP} gesetzt." >> ${LOG} 2>&1
  fi

### Check new Script
    /mnt/us/usbnet/bin/curl --silent --time-cond ${SCRIPTDIR}/${NAME}.sh --output ${TEMPDIR}/${NAME}.sh -k --ftp-ssl --tlsv1 --ftp-ssl-reqd --ftp-pasv ftp://${USER}:${PASSWORT}@${FTPADRESSE}:${PORT}/${NEWSCRIPT}
 #-r File Name  (File exists and is readable) 
  if [ -r ${TEMPDIR}/${NAME}.sh ]; then
  cp ${TEMPDIR}/${NAME}.sh ${SCRIPTDIR}/${NAME}.sh
  rm ${TEMPDIR}/${NAME}.sh
  echo "`date '+%H:%M:%S'` Skript aktualisiert, Neustart durchführen." >> ${LOG} 2>&1
  chmod 777 ${SCRIPTDIR}/${NAME}.sh
  eips -f -g ${LIMGNEWSCRIPT}
  sleep 5
  reboot
  exit
 else
 echo "`date '+%H:%M:%S'` Kein neues Skript auf dem Server gefunden." >> ${LOG} 2>&1
  fi
 

### download picture and send to screen

### download using cURL
 /mnt/us/usbnet/bin/curl -k --ftp-ssl --tlsv1 --ftp-ssl-reqd --ftp-pasv ftp://${USER}:${PASSWORT}@${FTPADRESSE}:${PORT}/${ORT} -o ${TEMPFILEJPG}

### Is there any picture?
 #-r File Name  (File exists and is readable) 
  if [ -r ${TEMPFILEJPG} ]; then
 echo "`date '+%H:%M:%S'` Bild auf Server gefunden und heruntergeladen." >> ${LOG} 2>&1

### edit picture with Imagemagick to fulfill eips demands
 /mnt/us/linkss/bin/convert ${TEMPFILEJPG} -auto-orient -filter LanczosSharp -brightness-contrast 3x15 -resize x758 -gravity center -crop 1024x758+0+0 +repage -rotate 270 -colorspace Gray -dither FloydSteinberg -remap /mnt/us/linkss/etc/kindle_colors.gif -quality 75 -define png:color-type=0 -define png:bit-depth=8 ${TEMPFILEPNG}

 echo "`date '+%H:%M:%S'` Bild mit Imagemagick bearbeitet." >> ${LOG} 2>&1

### send picture to screen
 eips -f -g ${LIMGWEISS}           #cover the screen in white to prevent from shadows
 sleep 1                           #let´s sleep a second, e-ink´s are not the fastest
 eips -f -g ${TEMPFILEPNG}         #load picture to screen
 echo "`date '+%H:%M:%S'` Bildschirm aktualisiert." >> ${LOG} 2>&1
  else 
 eips -f -g ${LIMGWEISS}           #cover the screen in white to prevent from shadows
 sleep 1                           #let´s sleep a second, e-ink´s are not the fastest
 eips -f -g ${LIMGERR}             #show error picture
 echo "`date '+%H:%M:%S'` Kein Bild gefunden, Error-Bild gesetzt." >> ${LOG} 2>&1
 SHORTSUSPEND=1                    #short sleep time will be activated
  fi

### delete temp. files
 rm ${TEMPFILEJPG}
 rm ${TEMPFILEPNG}
 echo "`date '+%H:%M:%S'` Temporaere Dateien entfernt." >> ${LOG} 2>&1
 
if [ ${CHECKBATTERY} -le ${BATTERYALERT} ]; then
 eips 2 2 -h " Akku bei 10 Prozent, bitte aufladen "
fi

fi

### calculate and set WAKEUPTIMER
if [ ${SHORTSUSPEND} -eq 1 ]; then
 TODAY=$(date +%s)
 WAKEUPTIME=$(( ${TODAY} + ${SUSPENDFORS} ))
 echo "." >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` Ein Fehler ist aufgetreten, neuer Versuch am: `date -d @${WAKEUPTIME} '+%Y-%m-%d_%H:%M:%S'`" >> ${LOG} 2>&1
 echo "." >> ${LOG} 2>&1
 rtcwake -d /dev/rtc1 -m no -s ${SUSPENDFORS}
else
 TOMORROW=$(date +%s -d 23:59)
 TODAY=$(date +%s)
 SUSPENDFORL=$((${TOMORROW} - ${TODAY} + 120)) #120 seconds added to make shure it´s past midnight
 WAKEUPTIME=$((${TODAY} + ${SUSPENDFORL}))
 echo "." >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` Alles OK, Bilderrahmen wird am: `date -d @${WAKEUPTIME} '+%Y-%m-%d_%H:%M:%S'` neu gestartet" >> ${LOG} 2>&1
 echo "." >> ${LOG} 2>&1
 rtcwake -d /dev/rtc1 -m no -s ${SUSPENDFORL}

fi

### at 365 Log entries the Log will be saved as "pictureframe_old.log" on FTP server, the Log on Kindle will be deleted and a new Log will be created with number +1
 let LOGCOUNTER=LOGCOUNTER+1
if [ ${LOGCOUNTER} -gt 365 ]; then
 cp ${LOG} ${LOGOLD}
 echo "`date '+%H:%M:%S'` Alter Logfile wird auf dem Sever gesichert und vom Bilderrahmen geloescht." >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` Ruhezustand wird gestartet." >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` Bye Bye!" >> ${LOG} 2>&1
 /mnt/us/usbnet/bin/curl -T ${LOGOLD} -k --ftp-ssl --tlsv1 --ftp-ssl-reqd --ftp-pasv ftp://${USER}:${PASSWORT}@${FTPADRESSE}:${PORT}/${FTPLOG}
 rm ${LOGOLD} && rm ${LOG}
 LOGCOUNTER=0
 let LOGCOUNTERALL=LOGCOUNTERALL+1
else
### send Logfile to FTP Server
 echo "`date '+%H:%M:%S'` Aktueller Logfile wird an den Sever gesendet." >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` Ruhezustand wird gestartet." >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` Bye Bye!" >> ${LOG} 2>&1
 /mnt/us/usbnet/bin/curl -T ${LOG} -k --ftp-ssl --tlsv1 --ftp-ssl-reqd --ftp-pasv ftp://${USER}:${PASSWORT}@${FTPADRESSE}:${PORT}/${FTPLOG}
fi

### Go into STR
 echo "mem" > /sys/power/state

done

Erklärungen zum Script:

# Variables
NAME=pictureframe
NAMEOLD=pictureframe_old
SCRIPTDIR="/mnt/us/extensions/onlinepictureframe/bin/"
TEMPDIR="/mnt/us/documents/"
LOG="${SCRIPTDIR}/${NAME}.log"
LOGOLD="${SCRIPTDIR}/${NAMEOLD}.log"

SCRIPTDIR und TEMPDIR:

Der Teil  /mnt/us/extensions des Ordners SCRIPTDIR ist vorhanden wenn nach dem Jailbreake KUAL installiert wurde. Die Erweiterung onlinepictureframe/bin/ ist Bestandteil des Scripts und wird beim Kopieren des Scriptes in den „extensions“ Ordner von KUAL erzeugt. Der Ordner TEMPDIR ist bereits auf dem Kindle vorhanden.

FTPS-Server

#FTPS Server the pictures are located on
USER="xxx" 						# FTPS user
PASSWORT="xxx" 						# FTPS password
PORT="xx" 						# port of FTPS-Server
FTPADRESSE="xxx" 					# DynDNS adress of FTPS server

#Where will the picture frame be located
#HOSTNAME="xxx"
HOSTNAME="xxx"

ROUTERIP="192.168.178.1" 	 	# Standard Gateway AVM Fritz!Box
#ROUTERIP="192.168.2.1" 		# Standard Gateway Telekom Speedport

USER, PASSWORT, PORT und FTPADRESSE

Hier werden die Zugangsdaten, die Serveradresse und der Port für den FTPS Server eingetragen. In meinem Falle ist es die heimische Fritz!Box mit freigegebem Datenspeicher. Hierbei ist es wichtig, dass eine dynamische DNS Adresse verwendet wird. Da der Internetprovider die Verbindung einmal am Tag kappt und neu aufbaut, ändert sich die IP-Adresse des Routers ständig und er ist im Netz nicht mehr zu finden. AVM bietet mit der Fritz!Box und dem Dienst MyFritz bereits eine DynDNS an. Man kann sich aber auch bei vielen Anbietern einen DynDNS Dienst einrichten. Google ist auch hier Dein Freund.

HOSTNAME

Den Hostnamen brauche ich, da ich zwei Bilderrahmen an unterschiedlichen Orten in Betrieb habe. Die beiden Rahmen werden mit unterschiedlichen Bildern gefüttert und müssen somit auch auf verschiedene Ordner auf dem FTPS Server zugreifen.

ROUTERIP

Der Standardgateway (ROUTERIP) wird angegeben, weil der Kindle diesen manchmal aus ungeklärtem Grund vergisst und dann nicht mehr ins Internet kommt. Sollte das der Fall sein, dann wird der hier angegebene Standardgateway je nach Router neu gesetzt.

Ordnerstruktur auf dem FTPS- Server

#!!!Be shure to have this folder structure on FTPS-Sever or change the script here!!!

ORT="/Bilderrahmen/Bilder/${HOSTNAME}/abc.JPG"              # location of picture on server
FTPLOG="/Bilderrahmen/Logfiles/${HOSTNAME}/"                # location of Logfile on server
NEWSCRIPT="/Bilderrahmen/Newscript/${HOSTNAME}/${NAME}.sh"  # new script on server

#!!!The picture on FTPS-server must have the right name and ending: "abc.JPG" !!!

TEMPFILEJPG="${SCRIPTDIR}/abc.jpg"
TEMPFILEPNG="${SCRIPTDIR}/abc.png"

Das Script verlangt eine bestimmte Ordnerstruktur auf dem Server. Entweder man hält sich daran oder man schreibt das Script um. Das kann jeder machen wie er will. Bei mir gibt es zwei Bilderrahmen an unterschiedlichen Orten in der Republik. Dies wird mit dem Hostnamen gesteuert.

  • ORT: Wo liegt das Bild auf dem FTPS-Server
  • FTPLOG: Wo soll der Logfile abgespeichert werden.
  • NEWSCRIPT: Hier wird nach einem aktuellerem als dem, auf dem Kindle laufenden, Script geschaut. Sofern vorhanden und neueren Datums, wird dieses heruntergeladen und im Scriptordner unter dem Scriptnamen abgespeichert, danach wird ein Neustart durchgeführt und das neue Script geladen.

Bisher ist es mir nicht gelungen mittels Wildcards (*.JPG , abc.* oder *.*) einfach irgendeine Datei herunterzuladen. Kann sein, dass das Linux auf dem Kindle keine Wildcards unterstützt. Aus diesem Grund muss das herunterzuladende Bild abc.JPG heißen. Warum? Das hab ich mir so ausgedacht.

Tempfile

  • TEMPFILEJPG: Diese Angabe dient dazu, damit cURL weiß, wo es die heruntergeladene Dateie hinspeichern soll.
  • TEMPFILEPNG: Diese Angabe dient dazu, damit Imagemagick (später mehr zu cURL und Imagemagick) weiß, wo es das bearbeitete Bild hinspeichern soll.
  • Beide Dateien sowohl TEMPFILEJPG als auch TEMPFILEPNG werden nach erfolgreicher Aktualisierung des Bildschirmes gelöscht.

Zeiten

SUSPENDFORS=600                                    # short sleeping time in case of ERROR
BATTERYALERT=10                                    # from this Battery Level on to lower values a info will be displayed
BATTERYLOW=6                                       # from this Battery Level on to lower values the picture frame will go into STR an show a "Please Charge Picture"
BATTERYSLEEP=432000                                # 5 days sleep time when Battery Level is equal or below "BATTERYLOW"
  • SUSPENDFORS: Kürzere Schlafzeit im Falle eines Fehlers. Falls das Script kein Bild auf dem Server findet oder kein WLAN erreichbar ist geht der Kindle nur für 10 Minuten schlafen, statt bis Mitternacht zu warten, und versucht es dann nochmal.
  • BATTERYALERT: Gibt an, ab welchem Akkuladezustand ein Schriftzug auf dem Bildschirm erscheint, mit der Aufforderung den Bilderrahmen aufzladen, da der Akku nur noch 10% hat.
  • BATTERYLOW: Ab 6% Akkuladung geht der Bilderrahmen in den Ruhezustand und wacht erst nach BATTERYSLEEP ( in diesem Falle 5 Tagen ) oder beim Anstöpseln des Ladegerätes wieder auf. Wird nicht aufgeladen geht der Bilderrahmen nach 5 Tagen wieder in den Ruhezustand.

Weitere Programmschritte

Wenn das Script startet werden zuerst einige nicht benötigte Prozesse auf dem Kindle gestoppt um Energie zu sparen.

Es wird ein Ordner angelegt, der Amazon vorgaugelt, es wird gerade ein update geladen. Damit soll verhindert werden, dass Amazon über automatische Updates eine neue Firmware aufspielt und der Jailbreake dadurch zerstört wird.

### Functions

kill_kindle() {
  initctl stop framework    > /dev/null 2>&1                # "powerd_test -p" doesnt work, other command found
  initctl stop cmd          > /dev/null 2>&1
  initctl stop phd          > /dev/null 2>&1
  initctl stop volumd       > /dev/null 2>&1
  initctl stop tmd          > /dev/null 2>&1
  initctl stop webreader    > /dev/null 2>&1
  killall lipc-wait-event   > /dev/null 2>&1
}

customize_kindle() {
  mkdir /mnt/us/update.bin.tmp.partial                      # prevent from Amazon updates
  touch /mnt/us/WIFI_NO_NET_PROBE                           # do not perform a WLAN test

Im weiteren Verlauf wird die CPU Frequenz reduziert, der Bildschirmschoner deaktiviert und die obere Menueleiste incl. Statusleiste (Akku, WLAN, Uhrzeit…) ausgeschaltet. Manchmal hatte ich den Effekt, dass nach erfolgreicher Aktualisierung des Bildschirmes plötzlich noch die obere Statusleiste geladen wird und im Bild verbleibt. Das wird damit verhindert.

### activate CPU Powersave
echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo "`date '+%H:%M:%S'` CPU runtergetaktet." >> ${LOG} 2>&1

### switch off screen saver
lipc-set-prop com.lab126.powerd preventScreenSaver 1 >> ${LOG} 2>&1
echo "`date '+%H:%M:%S'` Bildschirmschoner ausgeschaltet." >> ${LOG} 2>&1

### switch off the top status bar
lipc-set-prop com.lab126.pillow disableEnablePillow disable
echo "`date '+%H:%M:%S'` Statusleiste deaktiviert." >> ${LOG} 2>&1

Download der Bilder über FTPS

Anfangs habe ich die Bilder über FTP mit wget vom Server geladen. Das war mir aber zu unsicher, wobei unsicher relativ ist, und ich habe mich für FTPS entschieden. Mehr gibt die Fritzbox leider nicht her. Nun kann wget aber kein FTPS. Da kommt cURL ins Spiel. cURL kann ziemlich viel, auch FTPS. Die Version von cURL, welche in der Kindle Linux Version mitgeliefert wird ist aber so alt, dass diese kein FTPS unterstützt.

Nach langem Suchen konnten mir die Leute aus dem Mobilereader Forum helfen. Im UsbNet Hack (welches im Rahmen des Jailbreake Prozedere installiert wurde!!!) ist eine neuere version von cURL enthalten. Wenn man im Script auf diesen Ordner referenziert wird diese Version benutzt und dann funktioniert es auch mit FTPS.

Man kann die Funktionalität von cURL recht einfach über den Befehl curl –version (2 Bindestriche!) in der Konsole herausfinden. Im Beispiel unten hab ich das mal schnell im Windows getan. Ja, cURL gibts auch unter Windows.

curl options
### download using cURL
 /mnt/us/usbnet/bin/curl -k --ftp-ssl --tlsv1 --ftp-ssl-reqd --ftp-pasv ftp://${USER}:${PASSWORT}@${FTPADRESSE}:${PORT}/${ORT} -o ${TEMPFILEJPG}

Bearbeitung der Bilder mit Imagemagick

Imagemagick ist ein Befehlszeilen Bildbearbeitungsprogramm und ist im Screen Saver Hack enthalten. Diese Befehlszeile öffnet das heruntergeldene Bild bearbeitet es und speichert es im passenden Format wieder ab.

Vielen Dank an NiLuJe für die hilfreichen Hinweise.

### edit picture with Imagemagick to fulfill eips demands
 /mnt/us/linkss/bin/convert ${TEMPFILEJPG} -auto-orient -filter LanczosSharp -brightness-contrast 0x20 -resize x758 -gravity center -crop 1024x758+0+0 +repage -rotate 270 -colorspace Gray -dither FloydSteinberg -remap /mnt/us/linkss/etc/kindle_colors.gif -quality 75 -define png:color-type=0 -define png:bit-depth=8 ${TEMPFILEPNG}

Ich werde hier nicht auf alle aufgerufenen Funktionen eingehen aber auf die wichtigsten.

  • auto-orient: hier wird geprüft, wie die Orientierung des Bildes bei der Aufnahme war und das Bild dementsprechend ausgerichtet, auch wenn es auf dem Kopf steht.
  • resize x758 -gravity center -crop 1024×758+0+0 +repage: Das Bild wird auf eine Höhe von 758 Pixel geändert ohne Rücksicht auf die Breite. Dann wird das Bild zentriert und auf eine Breite von 1024 Pixel beschnitten. Danach werden mit repage die Offset und Canvas Werte aus dem Header des Bildes entfernt, da diese sonst falsch stehen bleiben würden.
  • Mit -rotate 270 wird das Bild gedreht, da ja der Kindle im Landscape Modus benutzt und sozusagen auf die Seite gelegt wird.
  • colorspace Gray -dither FloydSteinberg: Diese beiden Befehle sorgen dafür, dass das Bild erstens in Graustufen umgewandelt wird und zweitens die Übergänge im Bild mit den verfügbaren 16 Graustufen so bearbeitet werden, dass keine Farbränder entstehen. Extrem würde das ausfallen bei gleichmäßigen Farbübergängen wie zum Beispiel bei Bildern mit bewölktem Himmel oder Nebel. (Beschreibung hier)
Kindle_002
Bild ohne dithering

 

IMG_6449
Bild mit dithering

 

Der Rahmen

Den Bilderrahmen habe ich bei IDEAL-Trend GmbH in Berlin gekauft.

Dieser Rahmen ist perfekt, da er die nötige Tiefe bereitstellt. Somit ist genügend Platz für den Kindle, den USB Anschluss und die Verlängerung für den Taster. Das Passepartout (aussen 18cm x 24cm, innen 8,8cm x 11,8 cm) kann man sich im Netz bei unzähligen Shops anfertigen lassen oder man geht zum örtlichen Rahmenbauer. Der Kindle ist mit doppelseitigem Klebeband von hinten am Passepartout befestigt.

Hier ein Profilschnitt des Rahmens und die Darstellung der verschiedenen Möglichkeiten des Zusammenbaus.  (Quelle: IDEAL Trend GmbH Berlin)

Bilderrahmen_Schnitt

Die Variante welche ich benutze ist hier aber nicht dargestellt. Der Rahmen ist also wirklich sehr flexibel.

IMG_6394
Online-Bilderrahmen Innenansicht
IMG_6395
USB-Verlängerung und Tasterbetätigung
IMG_6397
USB Anschluss und Tasterbetätigung von aussen

Der Holzstab zur Betätigung des Tasters ist hier noch nicht gekürzt und auch noch nicht schwarz eingefärbt. Links davon der in den Rahmen eingelassene USB Anschluss.

IMG_6453
Tasterbetätigung gekürzt und eingefärbt
IMG_6160
USB Verlängerung von DeLOCK

Das USB Kabel oder besser, die USB Verlängerung gibts bei Ebay. Der Knickschutz auf der Steckerseite muss entfernt werden, sondt passt es nicht. (siehe Bild weiter oben)

IMG_6159
so sieht die Tüte aus

 

Wie kommen die Bilder auf den Bilderrahmen

Der einfachste Weg ist es ein Bild per FTPS auf den Server zu übertragen und es hinterher in abc.JPG umzubenennen. Leider hat diese Methode zwei Nachteile. Erstens wird die Bilddatei nicht verkleinert. Das führt zu längerer Laufzeit des Scripts einmal beim Herunterladen des Bildes vom Server und weiterhin beim Umwandeln mit Imagemagick. Zweitens muss man sich nochmals per FTPS auf dem Server anmelden um das Bild umzubenennen. Dieses auf dem Smartphone vorher zu tun führt nur zu noch mehr Arbeitsschritten.

Nach langem Suchen habe ich tatsächlich eine App gefunden, die meine Anforderungen voll erfüllt.

  • FTPS Support,
  • mehrere FTP-Server,
  • Bilder komprimieren,
  • Bilder umbenennen,
  • überschreiben auf Server ohne nachfragen,

Die App PhotoSync gibt es für iOS und Android. (klick ins Bild)

Picturesync

Nachdem man die App installiert hat, kann man aus der Bildergallerie auf Teilen klicken und PhotoSync auswählen, aber zuerst sollte man die App einrichten.

PhotoSync einrichten

Nach dem Start der App klickt man unten rechts auf das kleine Zahnrad und landet im Einstellungsmenue. Hier klickt man auf Konfigurieren und landet im nächsten Menue.

Photosync_005
 

Da es sich beim Server, auf dem die Bilder gesendet werden sollen (Fritz!Box) um einen FTP-Server handelt wählt man hier FTP aus.

Photosync_006

 

Hier sind bereits die beiden Hosts eingerichtet, da es ja auch zwei verschieden Bilderrahmen gibt. In einem jungfräulichen PhotoSync wählt man „Konfiguration hinzufügen…“

 

Photosync_007

 

Photosync_008

Im Reiter „FTP/SFTP Account einrichten“ trägt man die Dyns-Adresse des Servers, den Benutzernamen, das Passwort und den Port ein. Oben wählt man FTPS aus sofern man dieses Protokoll nutzen möchte. Sonst gibt es noch FTP und SFTP.

010

Als Titel gibt man am Besten den Standort des Bilderrahmens ein. Der Zielordner eintspricht dem entsprechenden Ordner auf dem Server.
Unterverzeichnisse sollen nicht erstellt werden.
Vor Übertr. wählen muss aus sein, sonst fragt PhotoSync jedes mal nach, wo das Bild hin soll. Das nervt.
Dateinahmen hat ein extra Menue. Das kommt als nächstes.
Dann kann man noch die Qualität des Uploads einstellen. Damit reduziert PhotoSync sowohl die Bildgröße als auch die Dateigröße. Hier habe ich „Hohe Qualität“ gewählt. Dadurch dauert der Download auf dem Bildschirm nicht solange und Qualitätsprobleme konnte ich nicht feststellen.

Scrollt man weiter nach unten, kann man noch die Qualitätsstufe für den mobilen Upload einstellen.

Photosync_009

Aber der Clou ist der Reiter Dateinamen.

Hier kann man einen eigenen Dateinamen vergeben. PhotoSync benennt die Datei dann selbstständig um und überschreibt die auf dem Server vorhandene Datei ohne nachzufragen wenn man im vorherigen Menue „Überschreiben zulassen“ aktiviert hat.

Der eigen Dateiname muss „abc.JPG“ sein wenn man das Script für den Kindle nicht ändern möchte.

Photosync_011

Der Bilderupload

Der Upload eines Bildes sollte nun denkbar einfach vonstatten gehen. In der Galerie wählt man ein Bild aus und klickt auf Teilen. Danach erscheint folgender Bildschirm.

Photosync_001

Nun wählt man PhotoSync als Übertragungsmedium aus. Dann gehts weiter zu folgendem Menue.

Photosync_002

Hier wählt man FTP aus. Ich habe alle anderen Möglichkeiten ausgeblendet, dann sieht es übersichtlicher aus. Im folgenden Menue muss man noch die FTP-Konfiguration wählen, die man zuvor eingerichtet hat und gelangt im Anschluss ins Sendemenue.

Photosync_007
Photosync_004

Hier muss man nichts weiter tun als zu warten bis der Upload abgeschlossen ist.

Das war´s.

Jetzt kann man am Bilderrahmen den Knopf betätigen und hat in ca. zwei Minuten ein neues Bild, oder man geht schlafen und freut sich auf ein neues Bild welches einem den Morgen versüßt.

IMG_6452
fertiger Bilderrahmen mit geladenem Bild
IMG_6454
Rückseite

Casablanca

Eine Sache noch. Ihr hab Euch sicher gefragt, was das ganze gekostet hat. Hier noch eine kurze Auflistung.

  • gebrauchter Kindle 25€ -50€ + Versand bei Ebay
  • RS232-USB Adapter 10€ + Versand bei Amazon
  • Bilderrahmen 9€ + Versand bei Ideal Trend GmbH Berlin
  • Passepartout 16€ incl. Versand bei AllesRahmen.de
  • USB Verlängerung 3€ + Versand bei Ebay
  • PhotoSync Pro App 5,49€ im App-Store

Viel Spaß beim Nachbauen!

Mario

 

Download „Online Picture Frame“

4.3.2020 Nachtrag

Mittlerweile konnte ich das ursprünglich auf dem Paperwhite entwickelte Script auch auf einem Paperwhite 2 erfolgreich testen. Was mich total überrascht hat, ist die Verarbeitungsgeschwindigkeit auf dem Paperwhite 2.

Ich habe mal die Zeiten aus den Logfiles verglichen. Beide Bilderrahmen haben das gleiche Bild geladen.

Paperwhite

komplettes Script verarbeiten: 1:13 Minuten

Bild mit Imagemagick bearbeiten: 53 Sekunden

Paperwhite 2

komplettes Script verarbeiten: 21 Sekunden

Bild mit Imagemagick bearbeiten: 9 Sekunden

Fals Ihr euch also entscheided den Bilderrahmen nachzubauen, empfehle ich einen Paperwhite 2 zu nehmen. Das sollte die Akkulebensdauer midestens verdoppeln.

Viel Spaß!

Mario

Bluetooth Würfel

3.12.2018

Ich plane ein neues Bluetooth Lautsprecher Projekt. Einige Komponenten wie zum Beispiel den Akku, die Ladeelektronik und den Bluetooth Baustein mit integrierter Class-D Endstufe habe ich schon auf dem Tisch liegen. Ich dachte da an sowas wie zwei einzelne Würfel, welche man über Magnete miteinander verbinden kann und bei Bedarf etwas weiter entfernt voneinander aufstellen kann. Das würde dem Stereoklang zugute kommen und den Raum etwas besser füllen. Als Lautsprecher habe ich mich für Tectronic TEBM35C10-4 entschieden. Mal sehen wie die so sind. Ich kann keinen triftigen Grund nennen warum ich mich für diese Lautsprecher entschieden habe, es ist eine Bauchentscheidung.

Das Datenblatt des Lautsprechers findet Ihr hier.

Das Design könnte ich mir in etwa so vorstellen. Es würde natürlich noch ein Verbindungskabel zwischen den beiden Speakern geben.

IMG_0391

 

Ich setze auch dieses Mal auf CSR. Der Bluetooth Baustein trägt einen CSR8635 Bluetooth Chip und zwei HT6872 Verstärker Chips.

 

csr8635-bluetooth-40-41-modul-2x5w-stereo-verstaerker-speaker-empfaenger-board

Bluetooth Module mit 2x5W Endstufe (Quelle: Eckstein Komponente)

(hier kaufen)

Was mir an diesem Baustein besonders gefällt sind die separat herausgeführten SPI Anschlüsse für den CSR Chip. So ist der Anschluss eines Programmierers viel einfacher.

Für die Bedienung des Lautsprechers sind diesmal keine Tasten sondern ein Trackball geplant. Das Teil hat zwei Achsen zum Scrollen, einen Drucktaster und vier LED`s mit denen der Trackball in allen Farben hinterleuchtet werden kann. Das ist richtig genial.

retired-sparkfun-blackberry-trackballer-breakout~4

Trackball (Quelle: Eckstein Komponente) hier kaufen

4.12.2018

Das Lademodul für den Akku, welches verwendet werden soll sieht so aus.

tp4056-xd-58a-micro-usb-5v-1a-lipo-akku-lademodul-lithium-battery-charging-module~2

Lademodul für LiPo-Akku (Quelle: Eckstein Komponente) hier kaufen

Bluetoothlautsprecher DiagrammHier mal der Schaltplan.

5.12.2018

Der erste Schaltplan hat nach reiflicher Überlegung einen Haken. Der Schalter sitzt an der falschen Stelle. Hier nochmal die überarbeitete Variante.

Schaltplan_Bluetooth Würfel V002

Der Schalter trennt die Stromversorgung nun komplett. Vorher wurde das System beim Laden quasi eingeschaltet, blöd!

Ich habe ein weiteres Problem. Es betrifft die LEDs im Trackball Modul. Ich würde diese gern benutzen um die Zustände des Bluetooth-Modules und des Lademodules im Trackball anzuzeigen. Leider benutzen sowohl das Bluetooth-Modul als wie das Lademodul Open Kollektor um die LEDs anzusteuern. Die LEDs im Trackball werden einfach mit Strom versorgt und sind mit Vorwiderstand gegen Masse geschaltet. Grübel, grübel….!

2 Stunden später, Ich habs!

Ich gehe fest davon aus, dass die LEDs am CSR8635 über open Collector geschaltet werden. Der Schaltplan der Platine lässt des jedenfalls vermuten. Ich habe folgenden Plan geschmiedet:

 

Folie2

Folie3

13.12.2018

Die Lautsprecher sind angekommen und sie sind echt klein. Als nächstes werde ich mal einen Test mit einem Pappkarton machen. Mal sehen ob das schon in die richtige Richtung geht. Wenn sie so auf dem Tisch liegen, klingen sie ziemlich flach. Nimmt man sie aber in die Hand und umschließt sie wird es schon besser. Ich lass mich überraschen.

Tectonic TEBM35C10-4

Ansicht von vorn

Tecttonic TEBM35C10-4

Ansicht von hinten

14.12.2018

Heute habe ich meine Idee, wie die Lautsprecher aussehen könnten, mal im CAD skizziert und gerendert.

Rendering_001

Rechts steht der Master-Speaker mit dem Trackball und links steht der Slave-Speaker. An der Seite befindet sich die Kontur zum Verbinden der beiden Würfel und jeweils vier Magnete für den Zusammenhalt.

21.12.2018

Die letzten Tage hatte ich mal wieder etwas Zeit zum Basteln. Ich habe bei Conrad zwei Visaton FR58 bestellt um sie zu Passivmembranen umzufunktionieren. Das Entfernen des Magnten ging erstaunlich gut, da dieser nur geklebt ist. Ich hatte angefangen mit dem Winkelschleifer den Metallkörper des Magneten aufzutrennen als er sich einfach vom Metallkorb gelöst hat. Die Hitze vom Schleifen hat wohl ausgereicht um den Kleber zu lösen.

Passivmembran Visaton FR 58

In die Mitte habe ich eine Schraube eingeklebt. So lässt sich die Passivmembran einfach abstimmen. Die erste Abstimmung habe ich per Gehör vorgenommen. Am Ende waren auf der Passivmembran zusätzlich eine Unterlegscheibe und eine Mutter M6 verbaut. Das hat aus dem Bauch heraus das beste Ergebnis gebracht.

WP_20181220_17_20_40_Pro

Der erste Prototyp des Lautsprechers sieht so aus.

WP_20181219_20_12_26_Pro

Eine quadratische Holzbox aus dem Bastelladen

WP_20181219_20_12_33_Pro

 

Bluetoothlautsprecher

erster Prototyp, Ansicht von hinten

Bluetooth Würfel Prototyp

erster Prototyp, Ansicht von vorn

 

Der erste Prototypenlauf war mehr als zufriedenstellend. Der Lautsprecher hat ziemlich gut Bass für die Größe. Super, ich bin begeistert. Als nächstes wird der zweite Würfel aufgebaut.

Fortsetzung folgt!

Die magische Muschel

„Es liegt am Strand und redet unverständliches Zeug?

                                                       Eine Nuschel!“

Dieser kleine Witz hat mich am Ende dazu bewogen ein Projekt mit einem Arduino aufzubauen. Die Kinder haben jede Menge Spaß damit nur nicht meine Frau, die kann es nicht mehr sehen und hören, da ich viele Stunden damit verbracht habe der Muschel das Sprechen beizubringen.

Am Anfang stand das Audio-Shield von ELV. (Link zum Audio-Shield)

Das Audio-Shield ASA1 kann WAVE und MP3 Dateien von einer Micro SD Karte abspielen. Eine Library für die Arduino IDE gibt’s gratis dazu. Das Shield kostet 19,95€.

Eine weitere Alternative könnte das Audioshield JQ650-28P sein, welches es bei Ebay für ca. 7€ gibt. Ich habe es mitlerweile vorliegen und es scheint wesentlich weniger resourcenhungrig zu sein als das ELV Shield. Der Funktionsumfang ist ähnlich, obwohl viel weniger Arduino Pins beschaltet werden müssen. Es bleiben also mehr Möglichkeiten für das Projekt.

Konzept

Das Ganze sollte wie eine Art Jahrmarkt Attraktion ausgeführt sein, die sich mit dem Einwurf einer Münze aktivieren lässt. Die Muschel sollte dabei in einer geschlossenen Box „wohnen“ und beim Einwurf einer Münze wird der Deckel geöffnet während eine magische Melodie spielt und dann spricht die Muschel eine von momentan noch 30 lustigen Lebensweisheiten (wird noch erweitert!).

Ausführung der Mechanik

Die passende Holzkiste wurde schnell auf Ebay.de gefunden. Darin wurden alle Halterungen untergebracht, welche zur Befestigung der Baugruppen benötigt werden.

Holzkiste mit Halterungen

Holzkiste mit Halterungen

Holzkiste mit allen Komponenten

Holzkiste mit allen Komponenten

servo-sprechen

2x Servo für Sprechen und Öffnen des Deckels

baugruppe_muschel

Baugruppe Grundplatte mit Muschel und Servo von unten gesehen

muenzschalter_aussen

Münzeinwurf von außen

muenzschalter_innen

Münzeinwurf von innen

3D-Ansicht des Münzschalters

3D-Ansicht des Münzschalters

muenzschalter_3d_002

3D-Ansicht des Münzschalters

Der Aufbau des Münzeinwurfes ist recht einfach. Mir ging es nur darum dass es in etwa wie bei einem Spielautomaten ist. Eine genaue Münzerfassung findet hier nicht statt. es wird lediglich ein kleiner Hebel bewegt welcher einen Mikroschalter betätigt. Es funktioniert mit 1€, 2€ und 50Cent Stücken oder, wie die Kinder schnell herausgefunden haben, auch mit einem Löffel, Lineal oder ähnlich flachen Gegenstand.

Die für die Mechanik verwendeten Servos sind standard Modellbau Servos von Futaba. Diese haben ausreichen Drehmoment und sind auch schnell genug was vor allem beim Sprechen der Muschel wichtig ist. Ich finde aber, dass sie ziemlich laut sind. Da besteht noch Optimierungspotential. Fals jemand einen Tip hat, immer her damit solange es sich im Kostenrahmen bewegt.

Futaba S3003

Ausführung Elektronik

Beim Einwerfen der Münze schließt der Mikroschalter und überbrückt einen Transistor welcher sonst ein Relais betätigt (siehe Schaltplan!). Das Relais schließt, der Arduino wird mit Strom versorgt und liefert, wenn das Programm läuft, an einem Digitalausgang ein High Signal. Damit wird der Transistor durchgeschaltet und die Schaltung hält sich selbst nachdem der Kontakt am Münzschalter wieder öffnet und versorgt sich weiterhin mit Strom. Diese Anordnung lässt sich sehr gut über die Software wieder ausschalten. Somit geht die sprechende Muschel nach Ablauf Sequenz selbstständig und vollständig aus.

Ich habe zwei verschiedene Arduinos probiert und musste feststellen, dass das Programm auf dem originalen Arduino gefühlt sofort startet. Ein Arduino Clone verhält sich da unvorteilhafter. Der Mikroschalter zum Starten muss sehr lange betätigt werden, bevor das Programm startet. Es funktionierte nicht einfach eine Münze einzuwerfen. Kann sein, dass das mit dem Bootloader zusammenhängt, keine Ahnung.

Ein weiterer Digitalausgang steuert über einen weiteren Transistor ein zweites Relais. Dieses wird zeitverzögert eingeschaltet und versorgt die Servos mit Strom, da sich gezeigt hat, dass diese unkontrolliert verfahren solange sie kein Positionssignal vom Arduino bekommen. Somit lässt sich sehr gut das unkontrollierte Zucken der Servos verhindern.

 Schaltplan

(Auf das Bild klicken um zum PDF zu kommen!)

schaltplan_v001

Schaltplan für Zusatzplatine mit Relais und Eingangsbeschaltung für ADC

Eingangsbeschaltung für ADC:

Der analoge Eingang kann Spannungen von 0 – 5V messen. Das Audiosignal eines Lautsprecherausgangs bewegt sich aber von -x Volt bis +x Volt abhängig von der Ausgangsspannung des Verstärkers. Um den negativen Anteil des Audiosignals zu entfernen wird die Eingangsspannung mit einem Spannungsteiler um 2,5V angehoben. Nun swingt das Eingangssignal um den Wert von 2,5V.

Im Falle der Endstufe des ELV Audio-Shield verhält es sich etwas anders. Hier ist ein symmetrischer Ausgang. Das heißt, es befindet sich auf jeder Lautsprecherleitung ein zur anderen Leitung inverses Signal. Auf dem Oszilloskop sieht das folgendermaßen aus.

audio_ohne_opv_001

Audiosignal vom Verstärkerausgang (nur eine Lautsprecherleitung!)

Hier kann man sehr schön sehen, dass das Audiosignal ca. 2V beträgt und bereits um 2,5V in den positiven Bereich verschoben ist. Somit hätte ich mir die zusätzliche Eingangsbeschaltung sparen können, naja.

Ein Versuch mit einem Operationsverstärker erbrachte folgende Signal.

opv

zusätzlicher Operationsverstärker

audio_mit_opv_001

Audiosignal mit zusätzlichem Operationsverstärker (nur eine Lautsprecherleitung!)

Wenn man die Verstärkung vergrößert stellt sich das ganze so dar:

audio_mit_opv_002

höher verstärktes Audiosignal (nur eine Lautsprecherleitung!)

Hier sieht man sehr schön, dass die maximale Ausgangsspannung 5V beträgt. Das ist leicht zu erklären, da der Operationsverstärker mit 5V betrieben wird.

Einen Vorteil bei der Auswertung des Audiosignals mit dem Arduino konnte ich nicht wirklich feststellen. Daher habe ich mich entschieden den Operationsverstärker weg zu lassen.

In der Software wird der analoge Eingang 12 mal  eingelesen. Ist der Wert höher als der zuletzt eingelesene Wert wird dieser Wert angenommen. Wenn die 12 Messungen beendet sind wird das Ergebnis auf die Winkelposition des Servos gemappt. Jetzt „spricht“ die Muschel.

Arduino Code

Code kann hier herunter geladen werden!

Die Schatzkiste

IMG_4836

Die Schatzkiste

Mein Arbeitskollege hat sein altes Wählscheibentelefon von 1984 im Elektroschrottkontainer entsorgt. Als ich die Wählscheibe sah, kam mir die Idee mit einem Arduino eine Schatzkiste mit Codeeingabe über Wählscheibe für meinen Sohn zu bauen.

Für die Schatzkiste habe ich mich für eine dekorative Holzkiste entschieden. Mein Sohn hat diese dann nach seinen Vorstellungen personalisiert. So kann man gleich erkennen, wer hier überhaupt Zugriff hat und wer nicht. Clever!

Wenn man die Kiste öffnet, offenbart sich ein zweiter Deckel ,welcher verriegelt ist, und die Wählscheibe, gleichzeitig wird über einen Microschalter die Stromversorgung für den Arduino hergestellt. Gibt man nun über die Wählscheibe die dreistellige Codenummer ein, wird der kleine Aluminiumhaken (unterhalb der LEDs) mittels Elektromagnet entriegelt und man kann diesen zur Seite klappen und so den Deckel freigeben und öffnen. Sollte der Code falsch sein wird dies über das Blinken der blauen LED signalisiert. Die geschieht aber erst, wenn mindestens drei Zahlen eingegeben wurden. Ist der Code richtig beginnt die blaue LED dauerhaft für 5 Sekunden zu leuchten. Solange hat man Zeit den Deckel zu öffnen. Das ganze wird mit einem 9V Block betrieben.

 

Schatzkiste mit Wählscheibe

Schatzkiste mit geöffnetem Deckel

 

Schatzkiste mit Wählscheibe

richtiger Code wurde eingegeben, die blaue LED leuchtet

 

Schatzkiste mit Wählscheibe

geöffnete Schatzkiste

Wie man schön sehen kann, geht Sicherheit vor. Doppelt hält halt besser.

Fortsetzung folgt!

DIY Bluetooth Lautsprecher selber bauen

Bluetooth Lautsprecher Eigenbau

Nachdem ich mir letzte Zeit viele Bluetooth Lautsprecher angehört habe und irgenwie keiner einen zufriedenstellenden Klang hatte bzw. einen erschwinglichen Preis, habe ich mich entschlossen mir einen selber zu bauen.

Auf Ebay habe ich eine vollständige Platine für genau meinen Einsatzfall gefunden:

Bluetooth-4-1-Stereo-Audio-Receiver-Module-5W-5W-Amplifier-Board-Hands-free-Call

Dieses kleine Zauberdingens hat folgende Eigenschaften:

  • Versorgungsspannung 3,6V – 5V
  • Bluetooth Protokoll 4.1
  • Ladeelektronik für 3,7V LiIo Akku
  • Ladestrom 500 mA
  • Ausgangsleistung 2x 3W an 4Ohm
  • Größe 40mm x 30,8mm x 1,2mm
  • Tasten für An/Aus, Vor- & Zurück, Lauter/Leiser

Als die Platine da war hab ich erstmal gestaunt wie klein das Ding eigentlich ist. Hier mal ein Bild mit Streichholz. Die Platine meldet sich als LN-BT10 und die Verbindung via Bluetooth zum Handy klappt einwandfrei. Was etwas nervig ist, ist die chinesische Frauenstimme welche die Betriebsbereitschaft nach dem Einschalten, das erfolgreiche Ausschalten und den erfolgreichen Aufbau bzw. den Abbruch der Bluetoothverbindung meldet. Natürlich tut sie das auf chinesisch.

2015_12_03_20_31_14_ProShot
Werbeanzeigen

Als nächstes habe ich zwei Lautsprecher bestellt. Sie sollten nicht so klein sein, wie zum Besipiel beim Bose SoundLink mini. Bei Visaton (mein persönlicher Favorit) bin ich wie immer fündig geworden. Ich habe mich für zwei FRS 8 4Ohm entschieden.

2015_12_03_20_32_11_ProShot
2015_12_03_20_32_45_ProShot
Werbeanzeigen

Bei Conrad Elektronik habe ich noch einen LiIo Akku mit 3,7V und 3000mAh bestellt.

2015_12_03_20_31_36_ProShot

Da ich es nicht abwarten konnte, habe ich mal einen Prototypen aufgebaut.

2015_12_03_20_30_24_ProShot

Das war für den Anfang gar nicht so schlecht. Die kleine Platine macht wider Erwarten ganz schön Krach mit den beiden Lautsprechern. Das Aufladen des Akkus hat auch sehr gut funktioniert.

Als nächstes habe ich ein ordentliches Gehäuse konstruiert. Die Abmessungen und die Auslegung wurden mit Boxsim simuliert bis ich mit dem Frequenzgang zufrieden war.

Frequenzgang_FRS-8 4Ohm_klein

Die Konstruktion der gesamten Box sieht so aus. (BLUETOOTH_SPEAKER_002)

BLUETOOTH_SPEAKER_002
Bluetooth_Box_001

Das Gehäuse der Box ist aus Sperrholzzuschnitten zusammengesetzt.Eine Laubsäge leistet hier gute Dienste.

2015_12_03_20_29_59_ProShot

Werbeanzeigen
2015_12_04_06_31_38_ProShot
2015_12_04_06_31_54_ProShot

Nachdem das Gehäuse erfolgreich zusammengeleimt wurde, habe ich provisorisch die Lautsprecher befestigt (nicht genug Schrauben) und die Elektronik in das dafür vorgesehene Fach geworfen. Hinter dem Lautsprechern wurde das Gehäuse mit Dämmwolle leicht gefüllt. Die Bedienplatine habe ich erst mal mit Tesa befestigt. Das Ganze sieht dann so aus.

Ansicht von vorn
2015_12_07_18_53_06_ProShot[1]

Erste Tests laufen. Ich nehme den Lautsprecher jeden Tag mit ins Auto und höre auf dem Weg zur Arbeit Musik damit. Bis jetzt habe ich den vierten Tag erfolgreich absolviert. Das heißt, dass die Akkulaufzeit mit den Fahrten zur Arbeit und einiger Zeit zu hause bereits über fünf Stunden beträgt und er spielt immer noch.

auf dem Armaturenbrett im Auto

Weiterhin habe ich festgestellt, dass es einen großen Einfluß hat wo man den Lautsprecher im Raum platziert. Am besten klingt er wenn er auf halber Höhe mit dem Rücken an einer Wand steht. Dann spielt er auch ordentlich laut.

Im Netz habe ich einen Testbericht zum BOSE SoundLink mini gefunden. Dort wird ebenfalls beschrieben, dass es einen gewaltigen Einfluß auf den Klang hat, wo man den Lautsprecher im Raum platziert. Da befinde ich mich ja in bester Gesellschaft.

Eine Loudness Anpassung der unteren Frequenzen würde mir auch sehr gut gefallen, ich weiß aber nicht wie!

Werbeanzeigen

3.1.2016

So, derLautsprecher hat bisher locker 7h gespielt ohne aufgeladen werden zu müssen. Mal sehen wie lange das noch so weiter geht.

Bezüglich einer Loudness-Anpassung habe ich mich für die Yamaha-Variante entschieden:

Loudness Schaltung von Yamaha

Werbeanzeigen

18.1.2016

Es geht weiter. Das Gehäuse hat nun abgerundete Ecken bekommen, was etwas eleganter wirkt, und das Frontgitter ist fast fertig. Hier ein paar Bilder.

2016_01_14_20_27_08_ProShot
2016_01_14_20_28_56_ProShot
Werbeanzeigen

10.2.2016

Die Versuche bezüglich der Klangverbesserung sind gescheitert. Ich habe mich entschieden, ein anderes Bluetoothmodul zu testen.

2016_02_07_09_35_56_ProShot

Bluetoothmodul mit Vorverstärker und Endverstärker von SANWU

Dieses Modul trägt ein Bluetoothmodul mit dem CSR8635 Chip von CSR, einen Vorverstärker NE5532 und einen Endverstärker PAM8406. Das ganze kostet bei Ebay 11€.

  • Versorgungsspannung: 5V
  • Ausgangsleistung 2x3W
  • Bluetoothprotokoll 4.0
  • Tasten für An/Aus, Vor & Zurück, Lauter/Leiser
  • Ausgangsleistung. 2x 3W
  • Bluetoothprotokoll: 4.0

Ein Testvideo gibt es hier zu sehen!

Der CSR Chip bietet laut Datenblatt die Möglichkeit über SPI Schnittstelle den Audioprozessor anzusprechen und einzustellen.

Equalizer

Das klingt vielversprechend. Das Problem ist, daß die Entwicklungsumgebung ADK1.1 (Audio Development Kit) von CSR den Kostenrahmen sprengt. Ich bleibe dran.

WP_20160208_19_01_19_Pro

Bluetoothboard mit angelötetem Kabel für SPI (links) und für die externen Taster

Werbeanzeigen

Ein weiteres Problem, oder sagen wir eine Änderung im Projekt, ist die Versorgungsspannung von 5V. Zuerst habe ich es mit einem separatem Lademodul für den 3,7V Li-Io Akku in Verbindung mit einem DC-DC Step-up Wandler versucht. Das war etwas unglücklich, da diese Kombi nicht genügend Leistung zur Verfügung gestellt hat. Weiterhin zieht der Step-up Wandler trotz Stand by des Bluetoothmodules ca. 12mA. Da ist der Akku bei Nichtbenutzung des Lautsprechers in 10 Tagen leer. Das ist nicht akzeptabel.

Neue Stromversorgung werden also 4 NiMh Akkus sein welche sich in einem von außen zugänglichen Batteriehalter befinden werden. Kostet bei Reichelt knapp 7€.

Batteriehalter
Werbeanzeigen

12.2.2016

So, Batteriefach ist eingebaut. Ich finde es ein wenig „labberig“ aber wenn die Akkus drin sind ist es stabil genug. Das Schöne daran ist, dass man mit 4×1,2V=4,8V einfach eine höhere Ausgangsleistung hat und das hört man auch. Mit Batterien würde man auf 6V kommen. Leider gibt Texas Instruments für den NE5532 und Diodes Incorporated für den PAM8406 an, dass eine Betriebsspannung von max. 6V ein absolutes Maximum ist und eine Funktion dann nicht mehr gewährleistet  ist. Probieren kann man es ja mal. Das neue Bluetoothmodul scheint auch einen besseren Frequenzgang nach unten zu haben. Die Basswiedergabe ist deutlich besser.

2016_02_12_07_32_40_ProShot
2016_02_12_07_32_52_ProShot
Werbeanzeigen

7.3.2016

Nachdem ich nun leider feststellen musste, daß der CSR8635 Chip in Verbindung mit dem NE5532 und dem PAM8406 irgendwie nicht so prickelnd klingt habe ich mal wieder etwas neues ausprobiert. Auf Ebay gibt es ein Bluetooth Board mit dem CSR8645 Chip und zwei HT6872 Verstärkerchips. Dieser Baustein kling vom Start weg schon fast perfekt und kostet lumpige 10€.

Die Verstärker bringen pro Seite 2,8W bei 5V. Da macht sich der Einbau des Batteriefaches bezahlt. Die vier Ni-Mh Zellen bringen 4,8V und mit vier Batterien wären es satte 6V. Bei 6,5V hat jeder Verstärker eine Ausgangsleistung von 4,7W. das ist schon mal eine Hausnummer.

CSR8645_Audio_Module_001
CSR8645_Audio_Module_002

Oder man nimmt das unten abgebildete Modul. Es hat zwar „nur“ den CSR8635 und somit kein APTx, aber damit kann man sicher leben. Der Vorteil dieses Modules ist, dass man kein separates Verstärkermodul benötigt, da das Modul alles mitbringt. Weiterhin sind die Programmieranschlüsse nach außen geführt!

CSR8635 Bluetooth 4.0 4.1 Modul 2x5W Stereo

CSR8635 Bluetooth 4.1 Modul 2x5W Stereo (Quelle: Eckstein-Komponente Hier kaufen)

Um das ganze noch zu toppen habe ich mich für (hoffentlich endgültig) für folgende Variante entschieden.

Audio-Leistung-Differenzverstaerker-Board-HT8696-2x10W-Klasse-D

Differenzverstärker Board HT8696 (Quelle: Eckstein-Komponente Hier kaufen)

2

CSR8645 Breakout Board(Quelle: Eckstein Komponente Hier kaufen)

Das ergibt einen CSR8645 Chip in Verbindung mit einem HT8696 Stereoverstärker. Der Verstärker hat bei 5V eine Ausgangsleistung von 3,2W, bei 6,5V = 5,6W und bei 8,8V = 2x10W.

Das hat mich dazu veranlasst eine zusätzliche Spannungversorgungsbuchse vorzusehen. Mit einem externen 8V Netzteil können somit fast 2x10W mobilisiert werden. Es bleibt also spannend.

Werbeanzeigen

8.3.2016

Hier mal der Aufbau für das neue Bluetooth-Herz für den Lautsprecher. Links sieht man das Bluetoothmodul mit CSR8645 Chip. Darunter befindet sich der 3,3V Spannungsregler und ein Kondensator zur Normalisierung der Versorgungsspannung. Links neben dem Bluetoothmodul ist die Kontaktleiste für die SPI Schnittstelle zum CSR8645 Chip. Rechts neben dem Bluetoothmodul wird der Verstärkerbaustein verlötet. Die beiden Anschlüsse unten rechts sind für die Batterie und für die externe Stromversorgung über die Spannungsversorgungsbuchse.  Diese hat einen internen Schalter und klemmt beim Einstecken des Netzteils die Batterie ab.

2016_03_07_20_34_13_ProShot

neues Bluetooth-Herz des Lautsprechers ohne Endstufe

2016_03_08_21_07_10_ProShot

neues Bluetooth-Herz des Lautsprechers mit Endstufe

Mit dem unten gezeigten Board kann man auf die SPI Schnittstelle des CSR-Chips zugreifen. Das mit kann man zum Beispiel den Bluetoothnamen des Boards ändern. Meins heisst nun „Marios Box“.

DK-USB-SPI-10225-1A

CSR µEnergy Debug SPI Board (Quelle: digikey) 15€ bei www.digikey.de

2016_03_08_17_28_48_ProShot

Schöne Verpackung!

Werbeanzeigen

4.5.2016

Die Passivmembranen sind endlich eingetroffen.

WP_20160503_20_40_36_Pro

Ich habe beschlossen, die Passivmembranen in die Rückseite zu bauen. Sollte es nicht funktionieren, dann kann ich schnell einen neue Rückseite herstellen. Beim Gehäuse wäre es etwas tragischer.

12.05.2016

Die Passivmembranen sind eingebaut (Bilder folgen) und was soll ich sagen? Ich bin begeistert.Um den Erfolg dokumentieren zu können habe ich mit ARTA eine Frequenzgangmessung durchgeführt.

Frequenzgang_Gesamtbox_160511

Jetzt muß man sicher etwas vorsichtig sein was diese Messung angeht. Das Mikrofon ist nicht geeicht und der Mikrofonlevel ist nicht eingestellt. Daher sollte man den dB Werten auf der Y-Achse keine Beachtung schenken. Welchen Einfluß der komplette Bluetoothkanal hat kann ich nicht sagen. Die Überhöhung im Bereich von 3kHz und 9kHz werde ich noch etwas korrigieren.

Alles in Allen bin ich mit mit dem Frequenzverlauf schon mal sehr zufrieden.

Werbeanzeigen

07.07.2017

So, mit dem Klang bin ich jetzt mehr als zufrieden. Die Bassreflexkanäle habe ich wieder entfernt und die beiden Schlitze auf der Frontseite werden von vorn verschlossen. Die Passivemembranen funktionieren sehr gut.

Jetzt geht es ans Optische. Der Lautsprecher ist mitlerweile komplett zerlegt und das Gehäuse hat die erste Lage Spachtel erhalten.

2016_07_06_10_28_18_ProShot

Einzelteile des Lautsprechers ohne Gehäuse

2016_07_06_10_30_28_ProShot

gespachteltes Gehäuse

Design_Rot

So stelle ich mir den fertigen Lautsprecher vor.

Die Bedienblende oben und die Abdeckung der Front habe ich bei verschiedenen Fräsern angefragt. Mal sehen was die haben wollen.

Werbeanzeigen

14.07.2016

Ich habe das Design der Frontplatte geändert und ein kleines Imagevideo erstellt. Nur mal so zum Spaß.

 17.11.2016

Der Lautsprecher ist fertig.

DIY Bluetooth Lautsprecher selber bauen
Fertiger Bluetoothlautsprecher

fertiger Lautsprecher noch ohne obere Abdeckung

img-20161028-wa00011
Werbeanzeigen

15.11.2018

Bezüglich des CSR Kalimba Equalizers habe ich einen interessanten Link auf Github gefunden. Vielleicht hilft das ja weiter.

https://github.com/lorf/csr-spi-ftdi/issues/17

Ich werde mal wieder etwas am Lautsprecher ausprobieren. Die Sache mit den passiven Membranen stimmt mich letztendlich nicht ganz zufrieden. Ich werde eine neue Rückwand herstellen und ein paar Versuche mit Bassreflexrohren und Bassreflexlabyrinthen durchführen. Mal sehen ob dabei noch etwas mehr Klangfülle rumkommt.

Ich werde berichten.

21.12.2018

Der Versuch mit dem Labyrinth hat nichts gebracht und ich möchte gar nicht näher darauf eingehen.

Was ich heute berichten möchte, ist sehr viel besser. Ich habe mich nochmal hingesetzt, recherchiert und mir meinen Lautsprecher nochmal genau betrachtet. Dabei ist mir aufgefallen, dass die Abdichtung der beiden Gehäusehälften nach außen verbesserungswürdig war. Das war zum Einen die Abdichtung des Batteriekastens oder die Anlageflächen der PM’s. Nach einigen ml Dichtmasse sah die Welt schon viel besser aus. Was aber dem Ganzen das Sahnehäubchen aufgesetzt, hat war die Änderung an den Passivmembranen. Ich habe in jede PM je ein 6mm Loch gebohrt und je eine Innensechskantschraube mit je zwei Unterlegscheiben und je einer Mutter verbaut. Das Ergebnis hat mich umgehauen. Ich werde noch ein wenig mit mehr Masse experimentieren, aber ich bin jetzt sowas von zufrieden, das ist kaum zu glauben.

Fortsetzung folgt!

Löwe Opta Magnet

Löwe Opta Magnet 3737W

Unser neues Küchenradio

 

Ein langersehnter Wunsch hat sich erfüllt. Ich habe günstig ein recht gut erhaltenes Röhrenradio erstanden. Es handelt sich um ein Löwe Opta Magnet 3737W. Das ist jetzt nicht gerade ein besonderes Gerät aber wie ich finde sehr schön. Leider habe ich meine Frau nicht dazu überreden können das Radio im Originalzustand im Haus zu haben. Somit haben wir uns entschlossen dem Radio nicht nur eine elektronische Verjüngungskur zur verschaffen sondern auch eine optische.

 

18087_2_Magnet_3737 W_1958-59

so sieht ein Löwe Opta Magnet 3737W im Originalzustand aus

 

Löwe Opta Magnet

 

Als erstes wurde das Gerät zerlegt und das Chassis sowie das Gehäuse gründlich gereinigt. Das Radio muß wohl viele Jahre in der Küche gestanden haben. Darin roch es wie in einer 45 Jahre alten Frittenbude. Das Chassis hat fast alle Kondensatoren neu bekommen. Weiterhin war die Anodenspannung zu niedrig und es mußte noch ein Widerstand gewechselt werden. Jetzt stimmen alle im Schaltplan angegebenen Spannung wieder mit den Sollwerten überein. Das Gehäuse und alle Kunststoffteile wurden gewaschen und gereinigt. Das Gehäuse wurde geschliffen und lackiert. Dann zusammengebaut und siehe da, fertig. Ein neues Anschlusskabel dran und los ging es. In das Kabel habe ich noch einen zweipoligen Schnurschalter gebaut, damit die man zum Einschalten nicht die Schalter am Radio betätigen muß. Erstens sind die ausgenuddelt und zweitens kommen meine Frau und die Kinder da nicht dran. Es steht auf dem Küchenschrank.

Nach einiger Zeit hatte sich der Klang verändert und es hat sich herausgestellt, daß das Lautstärkepoti defekt war. Daran befinden sich verschiedene Abgänge um den Klang lautstärkeabhängig zu regeln.

 

IMGP6186_klein

Hier war einer der zusätzlichen Abgriffe am Niet der Schleiferbahn ab

 

IMGP6183_klein

zerlegtes Potentiometer

IMGP6188_klein

Die Vernietung mußte ich aufbohren aber Schrauben verrichten Ihren Dienst genau so gut, oder sogar besser.

Küchenradio

 

4.1.2015 Radio defekt:

Wie sich herausstellte war ein Trimmkondensator im UKW Tuner defekt. Er sprühte lustig Funken und die Anodenspannung sank von 230V auf 168V. Der Übeltäter wurde ausgelötet und ersetzt.

UKW Tuner geöffnet

Leider scheint der Tuner jetzt verstellt zu sein. Jetzt suche ich nach einer Möglichkeit entweder den Tuner zu justieren oder einen Ersatztuner einzubauen.

Nachdem sich niemand erbarmen wollte mir etwas Unterstützung hierzu zukommen zu lassen, bin ich auf´s Ganze gegangen und habe das getan was man nicht tun sollte. Ich habe angefangen dran herumzudrehen. Und siehe da, der Tuner läuft wie „Hulle“. Die Abstimmanzeige zeigt nun einen nie dagewesenen Ausschlag. Beim regionalen Sender Radio21 (ca. 3km entfernt) überschneiden sich die beiden Bänder der EM84 sogar. NDR2 kommt mittlerweile so gut rein, daß die beiden Bänder sich fast berühren. Ich bin begeistert. Was vorher nur mit Lautstärkeregler am Anschlag in Zimmerlautstärke erklang endet nun in einer  „Disko“. Der Klang ist der Hammer.

 

NDR2_vorher

NDR 2 Signalstärke vorher

NDR2_nachher

nachher

ENDE!

 

nutzlose Box

Die nutzlose Box

Das ist eine Arduino gesteuerte nutzlose Box. Das besondere ist, dass sie fünf statt des gebräuchlichen einen Schalters hat.

Hier das Video.

 

nutzlose Box

Blick von oben auf die Schalter

 

geöffnete Box

 

Blick auf die Mechanik

 

 

Blick auf die Mechanik

 

useless Box

Blick von unten auf die Schalter

 

 

WP_20141024_06_07_21_Pro

Die Steuerzentrale, der Arduino

 

 

BMW K100 Tacho LCD Display

Eine Alternative zur Brotdose!

Link zum Umbau!

Lange Zeit war es ruhig um meine K aber mittlerweile hat mich das Bastelfieber wieder ereilt. Nachdem ich einige Jahre mit der K durch die Lande gefahren bin möchte ich doch noch etwas am Design feilen. Was mich am meisten an der K stört ist die hässliche Brotdose. Hier hat der Umbau auf einen Harley Sportster Tacho und LED Anzeigen bisher gute Dienste geleistet. Jetzt möchte ich es doch etwas schlichter aber mit voller Funktionalität haben.

BMW K100 Caferacer Umbau
Harley Davidson Sportster Tacho
Harley Davidson Sportster Tacho
Ansteuerelektronik für Haley Tacho
Ansteuerelektronik für Haley Tacho
Signalkonverter_Josef_yX16-0
Bestückungsplan der Paltine für den Harley Tacho, danke Josef!
OLYMPUS DIGITAL CAMERA
Kontrolleuchteneinheit, Aufblendlicht aktiv
OLYMPUS DIGITAL CAMERA
Kontrolleuchteneinheit, Blinker rechts
OLYMPUS DIGITAL CAMERA
Größenvergleich
zsb_kontrolleuchten-einheit_explosion
CAD 3D-Explosionsansicht
zsb_tachohalter_001
3D-Modell der gesamten Tachohalterung

Werbeanzeigen

Wie geht es weiter?

Ein kleines LCD Display könnte alle nötigen Informationen bereitstellen und wäre zudem total unauffällig. Genau das was man für eine schlichte Optik braucht.

Was soll das Display alles anzeigen?

  • Geschwindigkeit
  • Blinker rechts/links
  • Öldruckkontrolle
  • Ladekontrolle
  • Aufblendlicht
  • Kühlwassertemperaturwarnung
  • Ganganzeige
  • Tankanzeige
  • Gesamtkilometer
  • Tageskilometer
  • Uhr
  • Datum
  • Außentemperatur

für spätere Weiterentwicklung wären zusätzlich denkbar:

  • Drehzahl
  • Momentanverbrauch
  • Durchschnittsverbrauch
  • Kühlwassertemperatur
  • Luftmenge
  • Datenlogging über SD-Karte

Ich denke, muss aber ein etwas größeres Display her.

Ok, ein Design muß her. Hier ist ein erster Entwurf, der natürlich noch optimiert werden kann, aber schon ganz gut aussieht.

WP_20141008_002
erster Entwurf der Anzeige
mögliches „Nachtdesign“
WP_20141008_001
Versuchsaufbau
TFT_Abmessungen

Als erstes habe ich mich also an den Schaltplan gemacht. Aus der vorherigen Anzeige wußte ich wie die einzelnen Signale handzuhaben sind. Wie der Tacho angesteuert wird ist nun auch kein Geheimnis mehr.

Schaltplan
Werbeanzeigen

Auf Basis des Schaltplanes ist folgende Leiterplatte entstanden. Darauf befinden sich einige Komparatoren um die Signale auf TTL Level zu bekommen, ein Operationsverstärker um das Tachosignal vom Hinterrad aufzubereiten und ein Arduino Nano zur Ansteuerung des Displays und zur Signalverarbeitung. Das ganze sieht dann so aus:

WP_20141015_20_44_55_Pro
unbestückte Platine
Bestueckungsplan
Bestückungsplan
BMW K100 Tacho Hauptplatine

Links sieht man die Anschlußklemme für die Signale vom Fahrzeugkabelbaum. Rechts ist der Anschluß zum Display und einigen Tastern. Ein Taster dient zur Rückstellung des Tageskilometerzählers die anderen sind Zukunftsmusik. Der Uhrenbaustein und das Display sind noch nicht angeschlossen.

WP_20141008_003
Uhrenbaustein

Die Tachoanzeige auf dem Display weicht noch ein wenig ab und springt auch etwas. das muß noch gedämpft und korrigiert werden.

So, jetzt funzt es! Freu!

Werbeanzeigen

Hier sind noch die Kurven vom Tachogeber (hier Karamba, Dank an Michael)

Eingang gemessen mit 200mV Raster

Die Eingangsspannung beträgt ca. 400mV. Das Rastre im Oszi ist 200mV.

Ausgang mit 4V Raster

Das Ausgangssignal vom OP zeigt eine schöne Rechteckspannung mit ca. 11.3V leicht nach unten verschoben. Die 11.3 V kommen von den 12V Versorgungsspannung minus 0,7V Spannungsabfall an der Verpolungsschutzdiode. Die Raster hat hier eine Auflösung von 4V.


Werbeanzeigen

Hier eine vorläufige Kostenaufstellung:

  • Platine bestellt bei Ätzwerk in München:   56€ (1Stk.) / 13,20€ /10Stk.)
  • Bauteile bestellt bei Conrad: 28€
  • Display bei Ebay: 2Stk. 6€
  • Arduino nano Clon: 7€
  • RTC:   4€

Summe:     101€ (1Stk.) / 59€ (10Stk.)


Werbeanzeigen

Was jetzt noch fehlt ist ein gefälliges Gehäuse für das Display. Das werde ich im CAD konstruieren und aus Aluminium fräsen lassen.  Mal sehen, was dann preislich noch hinzu kommt.

Gehäuseentwurf
Explosionsdarstellung

Es wäre auch denkbar das Gehäuse in Phototypenmaterial fertigen zu lassen oder zu drucken.

Gebelbrücke mit Display

So, jetzt habe ich, wie ich finde ein ansprechendes Design für das Gehäuse gefunden.  So soll es werden.

(eingefügt am 23.5.2019) Download CAD-Data (STEP-File)

Eine längere Testzeit steht dann auch noch ins Haus. Das wird aber wohl erst März 2015. Eine weitere Überlegung ist noch das farbige TFT Display durch ein einfarbiges LCD zu ersetzen um bei Sonneneinstrahlung bessere Anzeigeeigenschaften zu erreichen.

10.12.2014 Ich habe eine andere Grafikbibliothek bemüht um ansehnlichere Schriftarten benutzen zu können. Leider reicht nun der Speicherplatz im Atmel 328 nicht mehr aus. Ich werde wohl auf einen anderen Prozessor aufsetzen um einmal mehr Speicherplatz zu haben und weiterhin mehr Funktionen. Die neue Plattform ist Teensy 3.1. Hier werkelt ein ARM Prozessor. Mittlerweile denke ich noch über eine Drehzahlanzeige und GPS Datenerfassung nach. Datenlogging wäre ebenfalls eine Option.

Das neue Anzeigendesign ist, wie ich finde, viel gefälliger. Die Geschwindigkeitsanzeige kann noch etwas größer werden. Die bunten Kästchen werden noch durch Symbole ersetzt.

WP_20141208_20_50_20_Pro[1]

11.1.2015

Ich habs endlich geschafft, den neuen Prozessor und das neue Display in Betrieb zu nehmen. Das Display hat nun 320×240 Pixel und eine Diagonale von 2,2″. Hier mal ein Bild und ein Video dazu.

BMW K100 Tacho LCD Display

13.11.2018

Hallo, ich habe mich entschlossen den Schaltplan in ordentlicher Auflösung hochzuladen.

BMW_Tacho_Shematic_002

Weiterhin habe ich die Daten wieder zum Download bereitgestellt. Vielleicht hat ja jemand die Muße das Projekt weiter zu führen.

Data_For_Speedo_Project

CAD-Data for latest Housing (Step-File)

Werbeanzeigen
Werbeanzeigen