Diese Seite entstand ursprünglich zum Austausch experimenteller Schaltungen, Testgeräten und Forschungsergebnisse mit Kollegen anderer Institute im Rahmen von Forschungsprojekten. Hinzu kamen dann private Projekte. Für alle Inhalte dieser Seiten, d.h. Programme, Schaltungen, Algorithmen, Daten oder Ideen wird jegliche Haftung ausgeschlossen. Rechte Dritter können nicht ausgeschlossen werden. Dokumente sind ausschließlich als Anregung und zum Erfahrungsaustausch geeignet. Inhalt von Links ohne Gewehr*.
* Erweiterte Tauschopzion "ä" gegen "e" der neuen, deutschen Rechtschreibung (Wortstamm: gewehren)
(Link) How to use GITHUB?
(Link) Public Available ISO/IEC Standards
(Link) IEEE manuscript templates for conference proceedings
(PDF 150 kB)
Make GNU-Vektorplots für Word, Office or PDF
(Link) Beginners guide to TeX
(Link) TeX-freeware for Windows
Windows XP - was ist wo auf meinem PC?
(Link basteln: URL mit Maus markieren, Ctl-C, Explorer öffnen, Menue/Datei/neu/Verknüpfung, Ctl-V)
The Telex-Code 5 bit (ITA-2-Code, CCITT-2-Code, USTTY) was the code of four generations (80 years), used for teletype machines (telex). In difference to our "serial interface" (RS232) on 8x2 = sixteen wires, the TTY was bidirectional (simplex) on only two wires. This allowed digital Telex-communication on telephone wires around the world, the digital era was born 60 years before first transistors appeared - see the principle drawing of TTY and Morse's circuit.
For more see the
TTY history on Wikipedia.
"American Standard Code of Information Interchange"
(ASCII) is a 7-bit code for embedded UARTs and Serial Interfaces (like RS232). Find the ASCII-alphabet here incl. some often needed printf format, printf escape-sequences. It became the background for all computing and internet communication. Most popular it became with the VT-100 terminal from DEC.
A 8-bit version was standardized as ISO-8859 (this page). In 2022 the UTF-8 expansion of bit 8 dominates the web. According to wikipedia, 98% of all websites should use UTF-8.
Further links:
Chinesisch aussehende HTML-Files
Nutzt man einen edlen Text-Editor, wie Notepad++, um HTML-Files zu schreiben, dann weiß Notepad++ u.U. nicht, wie der Text intern codiert ist. Im TXT-File kann sich ASCII (ANSI) oder UTF-8 oder UCS-2 befinden, die Extension *.TXT oder *.HTM gibt keinen Hinweis darauf, wie der Inhalt codiert ist.
Damals waren Extensions eingeführt worden, um File-Formate eindeutig zu kennzeichnen - aber das ist sehr lange her.
Gefährlich wird es, wenn ein HTML-Text anders codiert ist, als im Head geschrieben steht. Steht zum Beispiel Notepad++ versehentlich im UCS-2 oder UTF-8 Format, und man schreibt (vermeintlich) einen ASCII-Text (mit iso-8859 in der Kopfzeile),
dann wird der Browser diesen File entsprechend interpretieren. Oft erscheint der Text dann chinesisch. Eine veränderte Filegröße gibt einen Hinweis. Leider kann Notepad++ die Formate nicht fehlerfrei ineinander konvertieren. Hat man erst einmal gespeichert, ist der File unwiderbringlich verloren.
Formeln in HTML - Ampersand-Characters
Manchmal möchte man nur eine kleine Formel in einen HTML-Text einbringen - und scheitert an ein paar Sonderzeichen. Mit dem Ampersand & Zeichen (auch AND- oder Et-Zeichen genannt) gibt es eine Eselsbrücke, die man sich merken kann. Hier eine kleine Auswahl.
In UTF-8 flossen diese Zeichen bereits in die auf 16-bit erweiterte Codetabelle ein, siehe UTF-8 Zeichentabelle. Browser unterstützen i.a. Ampersand-Zeichen in beiden Versionen (ANSI und UTF).
Syntax: "& name ;" (ohne Leerzeichen dazwischen).
Teste den Browser - folgende Konstrukte sollten in Reihen zu zehn Zeichen erscheinen. Einige Android-Browser ignorieren die Schriftgröße bei <xmp>, Andere Browser ziehen bei einigen Zeichen zusätzliche Leerzeilen ein. Ursachen unbekannt.
1) ' " ∀ ∃ Ø ∈ ∉ ® & ∝
Bildungsvorschrift griechischer Buchstaben: "& name ;"
Bildungsvorschrift deutscher Umlaute: "& name uml ;" (alles ohne Leerzeichen dazwischen).
HTML ansehen? Rechte Maustaste → Seitenquelltext anzeigen.
Elektroniker können damit schreiben:
XL = ω · L = 2πf · L = 6,28 · 100 kHz · 10 µH ≈ 6 Ω
<xmp> ... </xmp> sorgt dafür, daß der Browser die Steuerzeichen nicht interpretiert, die Zeile wird wie geschrieben dargestellt:
Der Konstrukteur kann nun den Innendurchmesser angeben: Øi = 22 mm.
Dabei sind auch <sub>↓</sub> und <sup>↑</sup> interessant.
Man kann damit schreiben: CO2, 238U, oder y = x1/5
Mag man eine lange Lücke ( ) im Text einfügen, hilft nur dieses kryptische Gebilde: " ". Es erzeugt ein Leerzeichen mit verhindertem Zeilenumbruch. Damit kann man gefahrlos schreiben 3 254 187,90 €, ohne daß im Wert ein Zeilenumbruch erfolgt. Allerdings sieht der Quelltext zu dieser Zahl nicht wirklich brauchbar aus, damit uns der Browser versteht, haben wir im HTML-File zu schreiben:
Will man einen Text unterstreichen, so wird er zwischen <u> und </u> gesetzt. Das sieht dann so aus: Bitte beachten!
Will man einen Text durchstreichen, so wird er zwischen <s> und </s> gesetzt. Das sieht dann so aus: Dieser Text ist sinnlos.
Fett als <b> bold </b> kennen Sie sicher schon; ebenso <i> für idiomatic </i>.
Oben wurden auch zwei UTF-Zeichen dargestellt: □ und ■. Die Bildungsvorschrift lautet hier " nummer ;". "nummer" ist die Nummer des Unicode-Zeichens.
Mehr zu Ampersand-Characters siehe htmlchars, entities, SelfHTML-Zeichen, selfhtml/zeichen und HTML-Praxis "Wie kann ich HTML selbst schreiben?".
Zu Unicode, UCS, UTF-8 siehe auch diesen Link.
Merke:
Sollte Ihr moderner Browser die <xmp> Anweisungen nicht ganz korrekt darstellen:
"<xmp> is deprecated since a long time!"
Ist den Verantwortlichen klar, was es bedeutet, ein so wichtiges Statement als "veraltet" zu disqualifizieren? Damit sind tausende, historisch wertvolle HTML-Seiten unlesbar und müssen editiert werden - falls der Autor noch lebt.
Man könnte es auch anders sagen: Die Grabenkämpfe um HTML/XML/UTF-8/ISO8859/SGML/XML... sind destruktiv und nutzen niemandem: Mit dem permanenten Umbau alter Formate (z.B. PDF, dyn. HTML) und der Neuerschaffung von Codierungen (UCS, Unicode) werden Milliardenwerte vernichtet. Das Internet befindet sich am Rande des Kollaps. Niemand hat etwas dagegen, wenn neue Formate eingeführt werden.
Aber bestehende Befehle oder Formate hat niemand zu verschlimmbessern!
Softwareentwickler sollten sich auf die eigentliche Arbeit konzentrieren können - nicht auf Unfug. Haben Sie schon einmal darüber nachgedacht, wann Binärdaten nicht mehr lesbar sein werden, weil die Codierung unbekannt ist?
Videos, die vor der Jahrtausendwende entstanden, sind teilweise schon jetzt nicht mehr abspielbar, weil Codecs veraltet sind und nicht mehr unterstützt werden. Erste Fernsehfilme zur "Akustischen Kamera" wurden teils schon dreimal konvertiert, weil alte Formate nicht mehr unterstützt werden. Zelluloid-Filme hielten immerhin ein Jahrhundert lang!
Ein ASCII-Zeichen von einem Byte durch zwei oder vier Byte (UCS...) zu ersetzen, ist wohl der Gipfel intellektueller Erleuchtung: Wenn ein Textfile im Durchschnitt n verschiedene Zeichen enthält, dann sind i = log2(n) Bit nötig, um jedes Zeichen des Textfiles kodieren zu können. Deutsch und Englisch lassen sich mit 8 Bit wunderbar kodieren, allenfalls ein chinesisches Alphabet würde 16 Bit brauchen.
Ein einziges Sonderzeichen in jedem Alphabet zur Ankündigung des nächsten Alphabets genügt übrigens, um beliebig große Alphabete in einen Byte-organisiserten File aufzunehmen. Man erinnere sich an TTY. Oder an Fonts. Wozu also braucht die Welt UCS, UTF oder Unicode?
Offensichtlich nur dazu, um Terrabyte mehr an Daten durch das Web zu schaufeln! Im "grünen" Zeitalter ein Skandal, wenn wir bedenken, daß zur Übertragung dieser mehr-Terrabytes weltweit dutzende Braunkohlenkraftwerke zusätzlich gebraucht werden.
Denken wir dann noch über das ausufernde Phenomen der Software-Upgrades nach, so wird deutlich, daß Software keine Ware im herkömmlichen Sinne ist. Jede Hardware verschleißt, jede Nahrung wird aufgegessen. Software hält ewig. Ein einmal in die Welt gesetzes Codestück verschleißt nicht. Aber wenn alle Kunden meine Software gekauft haben, bin ich arbeitslos.
Software paßt nur mit Verfallsdatum zum Kapital. Und genau das Verfallsdatum wird gerade erfunden: Mit dem Upgrade wird versehentlich eine unverzichtbare Programmfunktion zerschossen. Die Steuerung des Autos, Smartphons, Fernsehers, Computers oder Kühlschranks beginnt nach 3 Jahren, fehlerhaft zu arbeiten. Schon kauft der Kunde neu. Ein unsichtbarer, softer Krieg hat begonnen:
"Jeder gegen jeden und alle gegen jegliche Schonung der Ressourcen"
Die Folge: Die Jugend wendet sich wieder "Werten" zu: Man kauft wieder Schallplatten statt DVD oder MP3-Streams.
Ist das Internet ein OSI-Schichtenmodell?
Wie sieht eigentlich das Internet aus? (Link)
Examples compiled with Microsoft Visual
C++ .NET Version 7 (2003), Win32-Console
C++ Listing von USB-COM-Ports (VCP) siehe Bild.
Basis: FTD2xx-Library von FTDI.
Executable for WindowsXP: FTDI-finder.exe
C Wie funktioniert eigentlich
main(int argc, char *argv[ ]) ? Test:
main.exe
C Strings and file read write
C Syntax-Beispiel zu Callback-Functions
C Some pointer examples
C Eselsbrücke zum Umgang mit Zeigern
C Eine Annäherung an Zeiger in C/C++ pointer_proof.exe
Hat man einen rauschenden Sensor und hat man Zeit, so lassen sich dessen Daten mit einfachsten Mitteln deutlich verbessern. Die Idee dahinter: Man nehme den bereits vorhandenen Mittelwert und mittele den aktuell (verrauschten) Wert nur prozentual geringfügig hinzu. Die Konstanten current und average ergeben zusammen Eins. Das INO-Beispiel (Arduino C++) kann als TXT-File geöffnet werden. Es werden verrauschte Daten vom ADC-Input A0 gemittelt.
Hier der Kern des Algorithmus:
// inputs: messwert und gemittelter Meßwert hma
// output: hma
const float current = ... ; // float value {0...1}
const float average = 1 - current;
if (hma == 0)
hma = (float) messwert; // schnellster Anfangswert
// HMA-Formel:
hma = average * hma + current * (float) messwert;
(PDF) "Arduino" C++ Compiler: Überblick und Besonderheiten
AVR-Portpins ganz einfach gemacht
printf() auf einem ATmega benutzen?
AVR-Strings im Flash PROGMEM und pgm_read_byte
Soft-UART mit ATtiny13 in einem Ladungssensor
(PDF)
Gleitkomma mit AVR: printf, sprintf, dtostrf, utoa, itoa
Structs im EEPROM speichern EEMEM, eeprom_read, eeprom_write
Improved Arduino "Digital Humidity & Temperature Library" for sensor type DHT22/AM2302 see
DHT2 (gh). Adds: The library supports more then one sensor and it calculates the absolute humidity (g/m³) and dew-point (Taupunkt in °C):
Library includes an ino-file example. Install the zip-file like a standard Arduino-Library.
Das Scilab-Sourceformat *.SCE oder *.SCI kann z.B. mit Wordpad geöffnet werden. Scilab ausführen: Im Sourcecode-Window CTL-(klein-)L oder Menue/Execute/Load_into_Scilab. Aber Vorsicht: Alle Quellen sind mit Scilab Version 3.1.1. (1989-2005) generiert.
(EXE) Download Scilab 3.1.1
(SCE) Shortest intro to Scilab
(SCE) Matrixoperationen unter Scilab
(SCE) Binärfile lesen/schreiben unter Scilab
(HTML) (Best intro) Jesus Olivan Palacios: An introduction to the treatment of neurophysiological signals using Scilab (2001).
(ASCII) ASCII-Tabelle mit Scilab erzeugen
(SCE) Textfiles (txt) lesen/schreiben unter Scilab
(SCE) Introduction to convolution of two time-functions. Make your own convolution plots. Save plots of {x, h, convol(h,x)} in GIF-file format. Output examples: high-pass, low-pass
(SCE) Analogien zwischen Faltungsintegral und Polynom- Multiplikation, Ausgabebeispiel (PDF)
(SCE)
(PDF)
How Nerve Network Topology Defines its Behavior - Serial Code Detection with Spiking (Neural) Networks. Workshop „Autonomous Systems”, Cala Millor, Mallorca, 13.-17. Oct. 2013 publ. in Fortschritt-Berichte VDI, Reihe 10, Nr. 827, „Autononous Systems 2013“ edited by Herweg Unger & Wolfgang Halang, Scilab source code and examples see SCE-files.
Example: Nerve System: Convolution of bipolar noise (pulses) with unipolar keyhole (synapses) (GIF)
(SCE)
Theory of an Invisible Noise Radar. Noise has the flatest spectral distribution of all signals. Energy depends only of the length of the time function, there is no other limitation. And noise can produce a sharp interference detection. The file shows two cases. Thinks work, if one function is the key and the other is the keyhole (special example of "transfuncnet.sce").
Example: Invisible Radar: Convolution of bipolar noise with bipolar keyhole
(GIF)
(SCE) Fehlerquadrat minimieren (GIF Ausgabe)
(SCE) mit Matrix Division (backslash) (GIF Ausgabe)
(SCE) mit Matrix Pseudoinversion (pinv) (GIF Ausgabe)
Matlab-Vorlage mit Erläuterungen
(SCE) Knotenspannungsanalyse mit Pseudoinversion
(SCE) Maschenstromanalyse mit Pseudoinversion
(SCE) Maschenstromanalyse mit konjugierten Gradienten (große Matrizen)
(SCE) Das Stefan-Boltzmann-Gesetz beschreibt die Strahlungsleistung eines schwarzen Körpers (Funktion, Beispiele)
(SCE) Mit dem Wien'schen Verschiebungsgesetz kann das Maximum einer Planckstrahlungskurve bestimmt werden (Funktion, Beispiele)
(SCE)
Berechnung Planckscher Strahlungskurven,
normiert oder pur, mit Wertetabellierung (Plots, Funktionen)
(ZIP) Kennlinien-Plots für spektral selektive Photodioden: Plots verschiedener Dioden in mA oder A/W, logarithmisch, linear oder normiert. Anliegen: Vergleichbarkeit der Typen. Bild: Beispielplot mit log. Achse in mA.
(ZIP, 2MB) Plotprogramme für WAV-Files
(SCE), (CSV 13 kB) GIF-Plot von Zeitfunktionen aus "Comma Separated Value" Files (Excel-Format *.CSV)
Zeitfunktionsplots "WAV to GIF"; Input: WAV-Files der Zeitfunktionen; Outputs: Plots der Zeitfunktionen und simulierter Funktionen als GIF, als Excel Comma Separated Values (CSV) und als AVR-Studio4 Include File (INC)
(HTML) Animationen zu Welleninterferenzen incl. Scilab-Quellen
Die Berechnung der Füllmenge einer (querliegenden) Tonne ausgehend vom Pegelstand ist nicht ganz trivial. Daraus entstand ein kleines Scilab-Programm für den Füllstand einer Abwasser-Sammelgrube Fa. Graf, 3000 Liter, Best.-Nr.102007, mit Dom-Aufsatz.
(PDF) Dynamische Untersuchung von Pulslichtbogen mit 6-Kanal Spektrometer. 2007_01_17, 14MB, 55 S.
(PDF) Zur Selektivität breitbandiger Photodioden. 2007_02_09, 1MB, 20 S.
(HTML) Spektral geregelte Pulsschweißmaschinen, Seite des Projekt-begleitenden Ausschuß
Reduziert man Kommunikation auf das absolute Minimum, entsteht eine sehr einfache Schnittstelle, die vom Prinzip her schon in ersten NOKIA-Handies als
M-Bus vorhanden war. Als Grundlage der
seriellen Schnittstelle
sind UART in jedem Mikrocontroller nutzbar. Legt man Rx und Tx der UART auf einem Draht zusammen, entsteht ein
"Single Wire Asynchronous Receiver Transmitter" (SWART). SWART ist im Bereich intelligenter Sensorik und Aktorik bei niedrigen Datenraten oder kurzen Entfernungen vorteilhaft anwendbar. Im Vergleich zu I²C oder LIN ist SWART unkompliziert und potentiell etwas flexibler einsetzbar, da keinerlei Libraries erforderlich sind. Eine Schottky-Diode hat jeder: Einfach mal ausprobieren. Das Bild zeigt nicht etwa die deutsche Flagge, sondern die SWART-Steckerbelegung bei Verwendung von Tamiya-Verlängerungskabeln für Funkfernsteuer-Servos.
Was man sich wünschen würde, wäre eine Implementierung von SWART (ohne Schottky-Diode) in jedem Mikrocontroller.
Weiterlesen ...
Die übliche Art, Kapazitäten oder Ladungen zu messen, ist das Sägezahnverfahren mit einem RC-Glied, die beim
Wasserstoff-Sensor oder beim Füllstandsmesser benutzt werden. Dort bestimmt die Kapazität die Flankensteilheit gemäß I/C = dU/dt.
Aber es gibt auch ein noch empfindlicheres Verfahren, welches nur mit geschalteten Kapazitäten funktioniert, siehe Bilder. Dabei werden abwechselnd die Schalter Mp2vcc oder Tp2gnd geschlossen. Cm ist ein fest eingebauter Kondensator und Ct ist die zu messende Kapazität. Initial werden beide Knoten auf GND gezogen, Cm ist damit leer.
Abwechselnd wird nun Mp auf VDD gezogen und Tp auf GND. Daraus ergibt sich eine Spannungsteilung zwischen Cm und Ct entsprechend deren Kapazitäten (Tp wird auf GND gezogen um Ct zu entladen). Der Wert in Cm bleibt stehen und akkumuliert mit jedem Zyklus. Die Ladung in Cm strebt umso schneller nach VDD, je kleiner Ct im Verhältnis zu Cm ist. Gemessen wird Cm an Mp immer in der Phase, in der der untere Schalter Tp2gnd geschlossen ist. Die Zyklen bis zum Erreichen einer Schwelle werden gezählt.
Im ZIP-File befinden sich drei verschiedene C-Programme für AVR-Studio4, davon ein Programm nur mit Schwellwertdetektion (für einen Füllstand etc.) und zwei sehr ähnliche Programme mit zusätzlicher Software-UART-Ausgabe für ein Eigenbau-SWART-LCD und für ein
UART-LCD von Sparkfun.
An der HU Berlin im Institut für Physik wurde ein spezieller Wasserstoff-Sensor entwickelt. Besonderheit dieses Sensors ist ein Ladungsausgang, der Sensor verschiebt die CV-Kurve. Damit war er prädestiniert, Experimente zur Ladungsmessung nach dem Sägezahnverfahren mit einem ATtiny85 anzustellen. Hier bestimmt die Kapazität die Flankensteilheit gemäß I/C = dU/dt. Vorteil der Ladungsausgabe gegenüber Sensoren in Wheatstone-Brückenschaltung ist vermutlich eine größere Langzeitstabilität. Leider sind zum Sensor keine detailierten Informationen mehr verfügbar.
Es kam ein ATtiny85 auf einem Versuchsbrett BRBL10 zum Einsatz. Der Sensor gibt einen Dezimalwert der Messung auf SWART mittels Software-UART aus. Er übernimmt einen neuen Alarmwert aus dem Istwert auf Tastendruck, dazu ist der Sensor in ein Gefäß mit entsprechender Wasserstoff-Konzentration zu legen. Er speichert den Alarmwert automatisch im EEPROM. Die Firmware wurde unter AVR-Studio4, GUI Version 4.19, Built 730 entwickelt. Quellen befinden sich im ZIP-File. Libraries und externe h-Files sind entsprechend anzupassen. Weitere Hinweise befinden sich im main-File hydsens.c .
Zur Funktion: Die Kapazitätsmessung erfolgt mit einem Sägezahn. Es wird der interne Komparator an Pin PB3 des Mikrocontrollers genutzt. Zunächst wird PB3 auf OUTPUT geschaltet und nach Masse gezogen, die Sensorkapazität wird entladen. Dann wird auf INPUT umgeschaltet und der externe Widerstand von 220 KiloOhm lädt den Sensorknoten langsam auf VDD hoch. Übersteigt die Spannung die Komparatorschwelle von 1,1 Volt, beginnt der Prozeß von vorn. Die Anzahl der Sägezähne wird mitgezählt. Nach Ablauf der Meßzeit wird die Zahl durchlaufener Zyklen über eine in Software implementierte UART auf PB0 mit 9600 Baud / 8n1n ausgegeben. RX und TX der Soft-UART liegen auf einem Pin (PB0) und sind als Single-Wire UART (SWART) konfiguriert. An diesem Pin hängen sowohl ein USB-Adapter, als auch ein serielles Terminal, siehe Bild.
Zum Hochladen des Codes ist ein ISP AVR-Brenner erforderlich, z.B. ALL-AVR von Diamex.
USB2SERIAL - Isolierte USB/COM-Ports
Kommuniziert man mit einer Schweißmaschine von mehreren Stellen aus (PC, Datenrecorder, Video-Sync.), so genügt die Erdschleife über die Schukosteckdosen für extreme Signalstörungen. Um den PC zur Einstellung z.B. eines Spektralreglers nutzen zu können, wurden diese isolierten "Virtual COM-Port" (VCP) Konverter ("RS232" bzw. "RS485" simplex und duplex) entwickelt. RS232 steht dabei für 5 Volt Pegel der UART nichtinvertiert, die hohen, invertierten Pegel der ehemaligen seriellen Schnittstelle spielen heute im Embedded-Bereich keine Rolle mehr, siehe dazu eine betagte Intro der ersten Version
(PDF, 3MB).
"RS232": Darunter ist hier nur das UART-Protokoll zu verstehen. Im Gegensatz zur RS232 sind die Signale der UART nicht invertiert. Um mit einem Minimum zu isolierender Adern auszukommen, wird nur Rx und Tx genutzt als sog. "CMOS-UART".
"RS485": Die Varianten USB2SERIAL v1 und v2 sind simplex ausgeführt, sie senden und empfangen nur alternierend mit zusätzlicher Empfangs-Sendumschaltung. Die 12 Mbit/s Variante ist duplex ausgeführt, hier laufen Rx und Tx auf je einem Adernpaar unabhängig, siehe Schaltungen.
Die Leiterkarten USB2SERIAL v1 und v2 sind so ausgeführt, daß sie alternativ als RS485 oder als RS232 bestückt werden können.
S/N-Spezifikation: Zur automatischen Identifikation per Software erhalten neue Adapter eine einheitliche Seriennummer (S/N). Die ersten drei Stellen werden ausgewertet. Wenn die dritte Stelle ein Underscore '_' ist, werden die Stellen Eins und Zwei untersucht. Die erste Stelle gibt die Geschwindigkeitsversion (v1...3) an. die zweite Stelle kennzeichnet den Typ RS485-Simplex/RS485-Duplex/RS232-UART (S/D/U). Beispiele siehe CMD-Window des FTDI-Finder.
Isolierte Ethernet-UART (RS232/RS485)
Zur einfachen Kommunikation vom Hyperterminal zum Schweißregler IONv10 via Ethernet wurde dieser isolierte Modul entwickelt. Kern des Moduls ist ein Lantronix-XPORT. Wir arbeiten typisch mit 115200 Baud. Der Modul besitzt dieselbe duplex-RS485 Schnittstelle, wie der USBDUX-Modul, siehe Belegung der RJ45-Buchse. Links ist der Ethernet-Anschluß, rechts der duplex-RS485 Anschluß zu erkennen. Am Stecker ST1 kann über die Pins BYG und BYO eine Spannungseinspeisung für an die RS485 angeschlossene Verbraucher erfolgen.
Die mit BYG und BYO gekennzeichneten Pins können genutzt werden, um zwei zusätzliche Signale über die RJ45-Buchse zu führen. Beim Spektralregler wird ein schnelles Schaltsignal darüber geführt (Bypass).
Eine Steckverbindung zwischen BU3 und ST1 genügt, um den Modul als CMOS-UART ("RS232") nutzen zu können. Man verbinde dazu BU3-2 mit ST1-3 und BU3-3 mit ST1-4. Allerdings darf U1 nicht eingelötet sein. In der Pinbelegung erkennt man Kompatibilität zu 4P4C-Varianten mit RJ10 (GND Tx Rx +5V):
(PDF) - Übersicht
Bidirektionales Stereo USB-Headset
Für vergleichende Untersuchung der akustischen Qualität von PKW-Innengeräuschen wurde 2007 dieses Doppel-Stereo Headset entwickelt. In beiden Ohrmuscheln ist mittig je ein Mikrophon (rechtes Bild) angeordnet. Auf dem Bügel des Kopfhörers befindet sich ein Stereo-In/Out USB-Transceiver. Das Headset wird über USB mit dem Netbook verbunden. Die Software "AudioOverIP" gestattet eine Verbindung von bis zu vier Headsets über WLAN. Jeweils ein Set darf senden, die anderen hören zu. Mit externen WLAN-Boostern (Accesspoint D-Link DAP1353) wurde 2007 eine Reichweite bis zu 1000 Metern erreicht.
Für Signalverarbeitungsaufgaben (z.B. Plasmasimulator, Steueraufgaben) ist dieses Mini-Devboard für den Microcontroller ATtiny13 / ATtiny85 recht nützlich. Er bietet fünf freie Pins (das RESET-Pin sollte man besser meiden) und kostet wenige Cent. Durch die steckbare Verbindung kann das Board entweder an den Programmer (AVR-ISP, BU2) gesteckt werden, oder an die Applikation. Die Pins tragen maximal 40 mA, sie sind frei programmierbar als input/output/tristate/open collector . 10-Bit ADC und Timer gibt es gratis.
Nie wieder TTL oder programmierbare Logik, um x-beliebige, kleine analog/digital gemischte Hilfsschaltungen mit wenigen Pins aufzubauen.
Die angenehme Entwicklungsumgebung (ASM: AVR Studio4, C-Compiler im WINAVR) ist gratis, AVR-ISP-MKII Programmer gibt es schon ab 30 Euro. Auf dem Board links sind fünf SOT23-Transistorausgänge (n-chl) vorhanden, das rechte Board ist als gekürzte PCB ohne Transistoren zu erkennen. Zum Programmieren wird ISP (SPI) umgesteckt. Mit Power-MOS Transistoren im SOT23 Gehäuse (n-chl) TSM3400 (70mOhm/5V) oder Si2312DS (33mOhm/5V) bestückt, läßt sich bis zu einem Ampere ohne Kühlung schalten.
Plasmasimulator für vier LEDs mit PWM-Ausgabe
Für die Entwicklung spektral geregelter Schweißmaschinen wurde (neben dem Zeitfunktionsgenerator-DAC) ein flexibles Werkzeug gebraucht, mit dem die Lichtemission von vier Zeitfunktionen periodisch abgespielt werden kann. Damit konnten Schnittstellen zwischen dem Spektralregler ION und der Schweißmaschine sowie der Schweißprozeß selbst optimiert werden.
Ein STOP-Eingang an Pin PB4 stoppt die Ausgabe der Zeitfunktion, dann beginnt wieder alles von vorn. Mit dem enthaltenen Scilab-Programm werden die vom realen Schweißprozeß aufgenommenen Zeitfunktionen (WAV-Format) in einen Include-File (*.INC) für Atmel umgewandelt. Dieser wird bei Compilierung mit in den Assembler-Code eingebunden. Der Plasmasimulator spielt damit Schweißmaschine.
Beschreibung siehe (PDF) oder (PPS). Die Quellen sind im (ZIP)-File zu finden. Im Downloadbereich SPS-PbA sind weitere Materialien zu spektral geregelten Schweißmaschinen zu finden.
2x4 Bit Zeitfunktionsgenerator mit Atmel ATtiny261A als DAC
Für die Entwicklung spektral geregelter Schweißmaschinen wurde (neben dem Plasmasimulator) ein flexibles Werkzeug gebraucht, mit dem zwei gegenläufige oder phasenversetzte Zeitfunktionen generiert werden können. Die DIL-Variante des ATtiny261/261A besitzt beiderseitig durchgehende Ports, sie ist für diese Aufgabe bestens geeignet. Auf Port A (rechts) werden zwei Nibble (4 Bit) an zwei R-2R-Netzwerke ausgegeben, an Port B (links) liegen drei Jumper zur Einstellung von 8 Zeitfunktionen, eine verschieden blinkende LED und der AVR-ISP Programmierstecker. Damit sind zwei quasi analoge Zeitfunktionen in je 16 Quantisierungsstufen darstellbar. Jede Zeitfunktion wird über Reihenwiderstände an drei Ausgänge geleitet. Die Reihenwiderstände wandeln Ausgangsspannung in Ausgangsstrom. Wird an Stelle der Widerstände je eine Kurzschlußbrücke eingelötet, gibt das Teil eine Ausgangsspannung mit einem Innenwiderstand nahe R des R-2R-Wandlers (ca. 1 kOhm). Die sechs Ausgänge gehen auf einen Stecker, der zu neueren Spektralreglern vom Typ ION paßt.
Variierende Pulsbreiten und Pulsbreitenmodulation werden in verschiedenen Technikbereichen vorteilhaft eingesetzt. Zur Darstellung einer variierenden Pulslänge von ein- bis zwei Millisekunden bei einer Pulspause von 25 Millisekunden wurde diese kleine Hilfsschaltung entwickelt. Sie eignet sich zur Simulation des Pulsplasmas von Pulsschweißmaschinen ebenso, wie als Pulsgeber für Tests an PPM-Servos zum Test von Endlage und Stellgeschwindigkeit. Drei Tasten dienen der fixen Vorgabe von Pulszeiten (1.0, 1.5, 2.0 ms). Im Automatik-Mode wird zwischen den Endlagen alternierend gewechselt. Einstellbar sind Wechselzeiten zwischen 1.0 sec und 0.1 sec in Schritten von einer zehntel Sekunde. Die Wechseldauer wird an den LEDs b[3...0] binär blinkend in Zehntelsekunden angezeigt.
Beispiel:
Der Pfiff der Schaltung besteht darin, über die fünf freien I/O-Pins sowohl vier LEDs zu schalten als auch vier Tasten abzufragen als auch den ATtiny13 mit AVR-ISP-mkII zu programmieren. Und ein I/O-Pin ist auch noch für die Signalausgabe gebunden.
SyncSwitch - Isolierter Synchronschalter für dRec192
Zum synchronen Start eines GFaI-Datenrecorders dRec192 mit einer high-speed Videokamera und einem Schweißgerät wurde 2007 diese Schaltung entwickelt. Alle Leitungen sind mit Optokopplern gegeneinander isoliert, um Erdschleifen zu verhindern. Ein Transverter sorgt für isolierte Spannungsversorgung. Damit wird ein störungsfreier Betrieb der empfindlichen Geräte auch in EMV-haltiger Umgebung am Schweißgerät möglich.
Tx/Rx-Spiegel und UART-Zeichengenerator für UART, TOSLINK, RS485, RS422 (duplex/simplex)
Um Störanfälligkeit von UART-basierten Schnittstellen (RS232, optisch isolierte USB-VCP, RS485, TOSLINK) beim Schweißen zu testen, benötigt man einen Signalgenerator und einen Signalempfänger - oder einen Signal-Spiegel. (Auch können damit Echtzeitfähigkeiten eines C-Compilers für den aktuellen Prozessor getestet werden). Ein preiswertes Board mit Spielwiese (Rasterplatte 2,54 mm) ist das Olimex AVR-P28.
Es wurde um RS485-Konverter, um optische Schnittstellen TOTX/TORX173 und um direkte TxRx-UART-Schnittstellen erweitert. Damit können Flankenbedingungen (z.B. das Schreib-/Lese-Umschaltsignal der RS485) getestet werden. Auch dient es als Signalgenerator, siehe Hyperterminal-Dialog. Auf RET (Return-Taste) wird der Text periodisch alle Sekunde zurückgesendet. Andere ASCII-Zeichen werden periodisch zurückgesendet. Das Rücksenden wird solange wiederholt, bis mit ESC abgebrochen wird. Zusätzlich wird jedes ASCII-Zeichen auf 8 LEDs angezeigt. Die Baudrate (9600/115200 Baud) ist an einem Schalter wählbar.
Mit dem Spiegel konnten insbesondere Versuche zu dynamischer Terminierung gemacht werden. Diese zeigen, daß beim Übergang auf kapazitive Kopplung einerseits der Stromverbrauch sinkt. Andererseits erhöht sich (rechnerisch) die Störsicherheit, da nierderohmige Verkopplungen der symmetrischen Adern mit VCCR (meist 5V) und GNDR (0V) um etwa zwei Zehnerpotenzen vermindert werden. Folglich werden bei mir seither alle RS485-Schaltungen, die in hochgestörten Umgebungen arbeiten, dynamisch terminiert. Hinweis: Leider vertragen sich dynamische und statische Terminierung nicht auf einem Bus. Entweder beide Seiten werden statisch oder dynamisch terminiert.
Im Rahmen eines BMBF-Projekts entstand die Idee, Schweißprozesse spektral zu steuern. Aus dem Verhältnis von UV- und IR-Emission kann man die Metalldampfkonzentration und die Plasmatemperatur schätzen. Maß für die Temperatur ist die Metalldampfkonzentration, diese verursacht den Blaulichtanteil. Bei Überschreiten der Temperatur wird der Puls abgeschaltet, der Tropfen wird abgesprengt. Nach Abkühlung kann wieder eingeschaltet werden, falls die Pausenvorgabe nicht von der Schweißmaschine kommt. Es entsteht ein "natürlicher" Pulsschweißprozess, der extrem stabil auf Prozeßstörungen reagiert. Fehlerhafte Stromeinstellungen um einen Faktor 2 werden noch korrigiert. Am 30.11.2007 konnte damit die welterste, spektralgesteuerte Pulsschweißmaschine (Cloos Quinto 403) der Schweißindustrie vorgeführt werden (Bild unten). Auszeichnung 2008 mit den Abicor-Innovationspreis (3.) des DVS. Das Verfahren wurde zum Schutz der deutschen Wirtschaft patentiert DE102008045501, WO/2010/025709. Technische Dokumentationen (Beschreibung, Schaltungen, Patent-OS) befinden sich im Downloadbereich (SPS-PBA).
Und so sah der erste Spektralregler (v5) aus, Bild rechts. Handverdrahteter Prototyp, mit dem ab 18.11.2007 an der TU Berlin die ersten Pulsschweißungen öffentlich vorgeführt wurden. Die Schaltung war identisch der danach entstandenen PCB-Version v10, Bild oben.
Digital einstellbarer 6-Kanal Photodioden-Verstärker zur Aufnahme von Zeitfunktionen an Schweißmaschinen im Spektralbereich 300nm bis 3µm. Die Einstellung der Verstärkung der sechs Kanäle erfolgt am PC mit Windows-Hyperterminal über UART, RS485 oder USB mit isolierendem USB/RS485-Adapter (siehe #usb2serial).
Das Experimentierset gestattet eigene Versuche mit spektral selektiven Photodioden. Der am Brennerkopf angebrachte Champ6v20 liefert Signale von sechs Photodioden. Am BNC-Adapter können beliebige Datenrecorder mit einem Eingangsbereich +/- 2,5V DC angeschlossen werden. Die Verstärkung der Kanäle wird über USB-VCP und Hyperterminal eingestellt, siehe Kommunikation.
Zur Untersuchung klarer bis trüber Flüssigkeiten (Trinkwasser, Brauchwasser, Bier, Wein, Milch etc.) auf 850nm wurde auf Hardware-Basis Champ6v21 dieser Trübungssensor entwickelt. Er gestattet Static Light Scattering (SLS) für 5 Kanäle (20°, 90°, 135°, 160°, 180°). Die Kommunikation über UART oder USB-VCP 115200 Baud, 8n1n. Ausgaben können absolut, relativ, logarithmisch oder in NHU (Trübungseinheit) erfolgen. Eine Weiterentwicklung des TS6 ist der 19-Kanal Trübungssensor MKT19.
Als Experimentierbasis für spektralgeregelte Puls-Schweißmaschinen entstand diese Baugruppe. Kernstück ist ein 32-Bit ARM-Cortex-M3 (CM3) von ST-Microelectronisc STM32F103RET6 mit fünf UARTs. In der Schweißmaschine wurde die UART-Schnittstelle zwischen Bedienteil und Stromquelle aufgetrennt. Der CM3 belauscht den Datenverkehr, und kann selbst seinen Kommentar dazu abgeben - in Form von parametrischen Anweisungen.
Verschiedene Schweißprozesse sind wärmeempfindlich. Man denke an Brennlöcher beim Schweißen oder Löten von Dünnblech, an unschöne, farbige Ränder beim Schweißen von Edelstahl, an wärmeempfindliche Stähle, an Verspödung oder Erweichung des Gefüges unter Temperatureinfluß oder an zu minimierenden Verzug beim Schweißen. Temperaturen im Lichtbogen, wie im Bad können aber über die spektrale Zusammensetzung des Schweißlichts gemessen werden.
Es entstand ein Spektralregler (ION), der Zeitfunktionen in sechs verschiedenen Spektralbereichen von µm bis nm aufnimmt und in Echtzeit bewertet. Er steuert eine Pulsschweißmaschine. Je nach Einsatzfeld kann der Energieeintrag bei Überhitzung des Lichtbogens oder des Schweißbades innerhalb von etwa 100 Mikrosekunden nachgeregelt werden. Der Spektralregler stellt den wichtigsten Ausgangspunkt dar, um spektral geregelte high-tech-Schweißmaschinen entwickeln zu können. Mit ION wird es möglich, thermische Prozesse an Festkörpern als auch atomare (linienartige) und voll ionisierte (kontinuierliche) Plasmaprozesse zu bearbeiten. Derzeit existieren eine Reihe von problematischen Schweißprozessen, man denke an eingangs genannte Beispiele, die mit spektraler Regelung "erweckbar" sein könnten.
Um Erfahrungen mit Bluetooth-LE und dem Nordic-SDK auf Basis des CM4 N52832 zu gewinnen, wurde ein Miniatursensor für Beschleunigungsmessungen (analog und digital) entwickelt. Er wird über einen Mini-Lipo-Akku von 120 mAh gespeist, der unter dem Dach Platz findet. Der klobige Fuß beherbergt drei analoge Beschleunigungsaufnehmer. Sie sind noch immer einen Größenordnung rauschärmer, als digitale. Aber auch enorm viel größer.
Geladen wird der Akku über USB. Eine Akkuladung reicht etwa für zwei Stunden Meßzeit. Da ein Produkt daraus werden soll, müssen wir auf den Quellcode verzichten.
Besonderheiten des C++ Compilers "Arduino" siehe den Vortrag "Arduino in Beispielen - Überblick und Grenzen" (PDF) vom 27.4.2016.
Natürlich dürfen hier ein paar kleine Arduino-Projekte nicht fehlen. Arduino ist wie eine Sucht: Mäkelt man anfangs über die arg begrenzten Debug-Möglichkeiten, so hüpft das Herz spätestens dann höher, wenn man innnerhalb einer Stunde ein USB-CDC Projekt erstellen konnte, und der eigene Arduino Maus oder Tastatur spielt. Die Libraries sind wirklich genial und einfach gestrickt. Sie decken zu 90% die häufigsten Anwendungen ab. Nach einigen Arduino-Projekten wird schnell klar, daß die Zeitersparnis gegenüber der Methode zu Fuß (C unter AVR-Studio) vielleicht typisch einen Faktor von zehn bis hundert ausmacht. Insbesondere kommt dieser Vorzug bei Experimenten sehr gelegen. Für professionelle Anwendungen kann man ja trotzdem eigene Funktionen auf Registerniveau oder in Assembler einbinden. Meine Lieblinge sind der Arduino-Micro, der A.-Nano und der A.-Mini. Aber auch der Tiny85 von Digispark (mit USB-Schnittstelle) kam schon zum Einsatz.
PS für Windows-XP-Liebhaber: Die letzte unter XP laufende Release ist Arduino-IDE 1.8.9.
Bug ab der Arduino-IDE 1.8.5:
"Hilfe, mein Arduino hängt beim speichern!"
(siehe auch forum.arduino.cc)
Die Arduino-IDE 1.8.5 wurde beim Speichern und Compilieren immer langsamer. Zuletzt dauerte es 20 Sekunden, bis sich etwas regte. Auch der Taskmanager hing in dieser Zeit. Damit war klar: Irgendwo hängt etwas ganz im Innern. Nach Kontrolle möglicher Täter wurde die Datei "preferences.txt" untersucht (der Pfad ist unter "Datei/Voreinstellungen" ganz unten zu finden). Und siehe da: Die Liste hinter dem Eintrag "recent.sketches=..." war sehr lang! Arduino merkt sich jeden angefaßten Sketch. Dummerweise prüft die IDE bei jedem Speichern, ob noch alle Sketches an ihrem Platz sind. Hat man einen Sketch verschoben, hängt sich die IDE auf - Bug oder Versehen? Nach Löschen der Auflistung in recent.sketches läuft die IDE wieder.
Merke: Keinen mit der IDE bereits compilierten .ino-Files umbenennen oder verschieben. Und wenn, dann den ungültigen Pfad im File preferences.txt löschen! Arduino speichert dort alles beim Beenden.
Schrittmotor mit Arduino-"Pro Micro" steuern
Dies ist ein Projekt für Einsteiger. Für 4,95 € kann man bei Pollin einen winzigen Schrittmotor mit Motortreiber kaufen. Der Motor hat ein Getriebe integriert und kommt damit auf 2048 Schritte pro Umdrehung. Der Motor-Treiber auf Basis des IC ULN2003A läßt sich mit 6 Jumper-Kabeln (Buchse/Buchse) an einen Arduino-"Pro Micro" stecken. Für Tests benötigt man nicht einmal ein Netzteil, er kann über USB mitversorgt werden (5V, 300mA). ZIP-File herunterladen und auspacken (Arduinos Stepper.h Library wird benutzt). INO-File doppelklicken, Board und COM-Schnittstelle einstellen, hochladen und seriellen Monitor öffnen. Schon sind erste Experimente mit einem Schrittmotor möglich.
Wird der Motortreiber über USB gespeist, Jumper (rot) auf dem ULN2003-Board stecken wie im Bild zu sehen und GND/VCC vom Treiber mit GND/VCC vom "Pro Micro" verbinden. Wird der Treiber von einem separaten Netzteil gespeist, Jumper unbedingt entfernen! Die Treiber-Pins IN1, IN2, IN3, IN4 gehen auf die Arduino-Pins 6, 7, 8, 9. Der Arduino erzeugt alle vier Motorphasen per Software. Die Bewegung wird über das interne, serielle Terminal der Arduino-Software oder über eine anderes Terminalprogramm (z.B. PuTTY) gesteuert. Dazu auf 115200 Baud, 8n1n einstellen. h oder ? für Hilfe eingeben, es erscheint ein Menue mit einigen Befehlen, wie f/b v/r +/- c, s, z, e. Einfach mal ausprobieren und Spaß haben!
Um Eigenschaften eines Servos beurteilen zu können, wurde für einen Experimentalaufbau ein Servo gebraucht, welches einen mechanischen Ausschlag von mindestens +/- 90° haben sollte. Auch sollte es die Nullstellung präzise anfahren und in kleinen Schritten von links und von rechts präzise fahren können. Verschiedene Typen waren zu bewerten. So entstand dieses winzige Arduino-Projekt.
Bilder rechts: Schaltung ohne und mit Stromsensor.
Bedient wird der Arduino-"Pro-Micro" über ein serielles USB-VCP-Terminal, entweder über das der Arduino-Software oder über andere, wie PuTTY. Benutzt wurde die Library Servo.h von Michael Margolis. Mit ein paar Minuten Nachdenken ginge es aber auch direkt über die Timer-Funktionen delayMicros() oder micros().
Um den maximalen, mechanischen Ausschlag zu testen, wurde in einer zweiten Variante ein Stromsensor integriert, der das Servo abschaltet, sobald der Anschlag erreicht ist (Funktionen R und L). Dazu generiert die Software extremere Pulsbreiten zwischen 0,5 und 2,5 Millisekunden (Standard sind 1,0...1,5...2,0 ms). Vorsicht: die Software wurde nur wenig genutzt und erprobt. Sie stellt eher ein Fragment dar, um darauf eigene Ideen zu gründen.
Rechteck-Signalgenerator 2048 Hz bis 1/16 Hz
Dieses Arduino-Projekt ist für Einsteiger geeignet. Der "Arduino Pro Micro" gibt auf 16 Pins jeweils eine Rechteck-Funktion aus mit Upeak = 5 Volt, beginnend von 2048 Hz bis 1/16 Hz. Alles, was man braucht, sind ein Arduino "Pro Micro" und ein USB-Kabel. Arduino-IDE herunterladen und starten, beiliegenden ZIP-File auspacken und rectgen.ino-File doppelklicken. Dann unter "Werkzeuge" das Board einstellen, den COM-Port einstellen (zu finden im Gerätemanager von Windows unter Anschlüsse), und über USB das Programm über "Sketch/Hochladen" compilieren und hochladen. (Hinweis: Ältere "Pro Micro" Exemplare melden sich unter "Arduino Leonardo" bei Windows an). Schon sollte die RX-LED gemütlich anfangen zu blinken und der Rechteckgenerator sollte funktionieren.
Um zu schauen, was unser Arduino gerade macht, kann man unter "Werkzeuge/Serieller Monitor" ein serielles Terminal starten und auf 115200 Baud, "Kein Zeilenende" einstellen, "h" für Hilfe eingeben und "Senden" drücken. Das Modul sendet dann diesen
Hilfe-Text.
Unter Arduino "Hilfe/Referenz" findet man eine Beschreibung aller speziellen C-Funktionen, die Arduino ausmachen. Aber auch "Datei/Beispiele" sollte man für erste Schritte inspizieren. Nicht zuletzt kann man mit dem "Boardverwalter" exotische Boards installieren und unter "Sketch" neue oder eigene Libraries einbinden.
Beim letzten Test unter WindowsXP bemerkt:
1) Upgrade-Versuch auf IDE arduino-1.8.12 unter WindowsXP gescheitert: Installer wird nicht mehr akzeptiert. Die letzte, funktionierende WindowsXP-Version ist damit arduino-1.8.9 vom 15.3.2019.
2) Inaktive Bluetooth-Ports verstopfen die COM-Ports von WindowsXP. Erst wenn sie im Gerätemanager gelöscht sind, funktioniert das Hochladen wieder. Hintergrund: Zum Hochladen wird ein zweiter COM-Port für den Bootloader geöffnet (so kann der serielle Monitor offen bleiben). Windows aber braucht ein wenig zu lange, da hat AVRdude das Hochladen schon mit Fehlermeldung beendet.
Alphanumerische Displays von 1x8 bis 4x20 Zeichen sind für schnelle Experimente beliebt. Allerdings nerven die vielen Anschlüsse. Und UARTs sind überall vorhanden. Nach Feierabend wurde eine kleine, einlagige Leiterplatte entwickelt, die den überall vorhandenen UART-Anschluß (TX) nutzt. Ein Praktikant interessierte sich dafür, die Software zu entwickeln. Daraus wurde dann seine Bachelor-Arbeit, die er mit "sehr gut" verteidigte.
Über das RX-Pin der UART des ATtiny861 werden ankommende Daten gelesen (115200 Baud, 8n1n) und für das LCD parallelisiert. Es sind LCD von 1x8 bis 4x20 ansteuerbar. Der ATtiny861 kann mit internem Oszillator oder mit 16 MHz Quartz arbeiten (empfohlen). Über die UART lassen sich mit ESC-Commands die Baudrate und der Displaytyp einstellen, siehe Liste der ESC-Commands. Der Adapter kam z.B. bei den Projekten Wasserstoffsensor und Aircontrol zum Einsatz.
Menschliche Neigungen liegen oft im Verborgenen. Manchmal entbehren sie jeder Rationalität. Eines Tages hatte die Nachbarin ihre Garage ausgemüllt. Da stand nun ein nagelneuer Westernzug originalverpackt auf der Straße, direkt vor meinem Fenster. Und Ich? Ich konnte nicht widerstehen!
Natürlich war er kaputt. Das Batteriefach hatte unter ausgelaufener Säure gelitten, der Motor streikte, ein Schienenverbinder war abgebrochen und an einem Wagen waren zwei Achszapfen aus Plast abgebrochen. Kein Problem, nach drei Stunden war alles repariert. Damit die Achszapfen nie wieder abbrechen, wurden neue, längere Achsen angefertigt und die Räder wurden durchbohrt.
Dann sollte Probefahrt sein. Vier neue AA-Batterien hinein, Zug auf den Schienenkreis gestellt und Lok links unten am schwergängigen Schiebeschalter eingeschaltet: Denkste! Beim ersten Mal schob die Lok sofort die Gleise unter sich davon, Crash! Beim zweiten Mal entgleiste nur die Lok. Beim dritten Versuch entgleisten nur die Wagen... Nach dem zehnten Versuch hatte ich keine Lust mehr. Die Motordrehzahl muß reduziert werden. Ein Ingenieur ist nicht in der Lage, so einen Zug fahren zu lassen? Wie erst soll ein Kind diese Übung schaffen? Das durfte nicht sein!
Was also tun? Für PWM braucht es einen Mikrocontroller. Zusätzlich eine Infrarot-Fernsteuerung einbauen? Langweilig. Einen Klatschschalter? Einen Bewegungsdetektor? Einen Bluetooth-Empfänger? Schließlich hatte meine Frau eine Idee. "Unter meinem Schreibtisch liegt seit Jahren dieser blinkende Zauberstab. Die Enkeltochter wird ihn nicht mehr anfassen. Wie wäre es denn damit?" Kurz entschlossen klebte ich in dessen Spitze einen Magneten ein. Der Zug sollte mit einem Reed-Kontakt unter dem Dach ausgelöst und wieder gestoppt werden können.
Ein Controller wurde aufgebaut mit einem ATtiny85, der als Arduino in C zu programmieren ist. Die fünf Pins des ATtiny werden alle belegt: PB0 Fahrmotor-PWM, PB1 Kesselfeuer-LED-PWM, PB2 Soundkarte ein/aus, PB3 Speed-Poti (analog Input), PB4 Reedschalter (digital Input). Die in der Lok befindliche Soundkarte wird natürlich weiter benutzt, schaltet man die Lok ein, dann gibt sie alle paar Sekunden Ventilgeräusche ab.
Bei Berührung des Daches mit dem Zauberstab fängt die Lok an zu schnaufen und zu bimmeln, mit PWM fährt sie ganz langsam los und wird immer schneller. Wird das Dach wieder berührt, so verlangsamt sie bis zum Stillstand. Die Endgeschwindigkeit kann am Führerhaus an einem Poti eingestellt werden. Natürlich werden die erkannten Befehle irgendwie erwidert. Und damit sich der Prozessor nicht langweilt, flackert das Kesselfeuer permanent mit Zufallszahlen und PWM.
Dann die Vorführung. Nicht nur Kinder, auch Erwachsene rissen sich um den Zauberstab. Solange die Lok steht, trifft man das Dach ganz einfach. Wenn sie aber fährt, ist es nicht so leicht.
Informatik-Professoren dürfte der problemangepaßte Programmierstil nicht entzücken. Er verstößt so grazil gegen alle Regeln der Lehre. Aber Vorsicht, der Prozessor wird mit 5,5 Volt betrieben, die Siliziumdiode D1 schützt ihn vor Latch-up. Der ATtiny85 steckt in einer Fassung. Zum Programmieren wird er herausgezogen.
PS: Nach diversen Reparaturen ist zu erkennen: Ich sah selten ein Produkt mit sovielen, offenbar absichtlich eingebauten Sollbruchstellen. Alles soll möglichst schnell kaputt gehen: Wir leben in einer Wegwerfgesellschaft!
Kehrmaschine mit Panzersteuerung
Zur Steuerung eines Kettenfahrzeugs sind zwei Differentialgetriebe erforderlich: Eines für das rechte, eines für das linke Treibrad. Meist als Planetengetriebe ausgeführt, werden sie zwischen den zentralen Antriebsmotor und beide Ketten-Treibräder gesetzt, siehe Prinzipbild.
Um Anzufahren, werden die Außenzylinder der Planetengetriebe mit Bandbremsen (rechts und links) gestoppt. Gelenkt wird, indem die rechte oder die linke Bandbremse freigegeben wird. Läßt man beide Bremsen los, dreht der Motor frei. Eine Kupplung ist nicht erforderlich.
Möchte man Fertigungsaufwand und Produktionskosten beliebig erhöhen, kann man statt der Bremsen auf beide Planetengetriebe ein von einem (i.a. hydraulischen) Hilfsmotor getriebenes, gegenläufiges Lenkgetriebe aufsetzen.
Und in der Tat gibt es sogar ein Modell eines Kettenfahrzeugs, bei dem dieser hohe, mechanische Fertigungsaufwand getrieben wird. Hier sorgt ein dicker Elektromotor für den Vortrieb, und ein kleiner Hilfsmotor für die Lenkung (im Prinzipbild braun).
Bild: Überlagerungslenkgetriebe. Links: Getriebe des Fahrzeugmodells von Amewi und rechts: Prinzipbild aus Wikipedia.
Beim Amewi ist der Hauptantrieb mit zwei Planetengetrieben oben zu erkennen, der Lenkantrieb mit Hilfsmotor unten. Der Hilfsmotor-Antrieb wird oben auf den Antriebsblock aufgesetzt. Insgesamt 23 Schrauben halten das Getriebe zusammen: Eigentlich unbezahlbar. Und dazu kreischt das Getriebe extrem laut, weil die kritische Eingriffszähnezahl von zwei überall unterschritten ist.
Die Frage ist, ob es nicht einfacher geht.
Wer ein flaches Glasdach eines Wintergartens hat, kennt das Problem: Um es zu reinigen, kann man es nur unter Gefahr betreten. Man riskiert, einzubrechen. Also wurde am Wochenende "mal schnell" eine Kehrmaschine mit Funkfernsteuerung entwickelt.
Zwei preiswerte Getriebemotoren mit Rädern bilden den Antrieb, ein dritter Getriebemotor treibt die Walze.
Der Reiz lag in der Echtzeit der differenziellen Lenkung: Wie mischt man effizient den Gas- mit dem Lenkkanal der Funkfernsteuerung? Wie geht das mit der PWM zusammen, wenn man nur einen Timer pro Motor für vorwärts/rückwärts hat? Kann man ohne zu stottern mit einem 8-bit ATmega328 gleichzeitig die Pulsweiten von drei Funkfernsteuerkanälen messen, zwei Kanäle mischen und für drei Motoren die PWM ausgeben?
Es geht - und man braucht keinen Cortex-CM4 dafür. Der ATmega328 langweilt sich bei 8 MHz (3 Volt) noch. Die Getriebemotoren kamen aus China. Für die drei Vollbrücken wurden paarige Dual-PowerMOS p- und n-Kanal ICs direkt und ohne Kühlkörper zusammengelötet und in einen Schrumpfschlauch gesteckt. Als Akku dient ein Smartphone-Typ 4,2 Volt, 3000 mAh.
Die Walze aus einem Staubwedel wurde beidseitig kugelgelagert. Kanal 1: vorwärts/rückwärts, Kanal 2: rechts/links, Kanal 3: Drehrichtung der Walze (vor/aus/rück). Über den Seriellen Monitor (USB-VCP 115200 Baud 8n1n) können die wichtigsten Parameter beobachtet werden. Um die Traktion der Räder bei Staub oder Nässe zu erhöhen, wurde später hinten ein Gegengewicht angebracht, siehe Bild links.
Füllstandsmesser mit Ultraschall
Regenwassertonnen oder Abwasserbehälter füllen sich. Um den Füllstand experimentell zu beobachten, wurde ein Sensor entwickelt, der kapazitiv oder mit Ultraschall arbeiten kann. Mit einem Jumper wird die Betriebsart eingestellt: Offen: Ultraschall, gesteckt: Kapazitiv. Bei Ultraschall wird die Laufzeit gemessen. Kapazitiv mißt er die Ladezeit eines Kondensators. Hier tut ein ATmega328 als Arduino-Mini sein Werk, der über einen FTDI232-Adapter programmiert wird (Bild). Drückt man die einzige Taste am Gehäuse, wird der Füllstand auf einem Heltec-OLED-Display mit 128x64 Pixeln angezeigt. Man kann zusehen, wie die Tonne sich füllt. Als Ultraschallsensor wird ein HC-SR04-Modul verwendet.
Schnell zeigen sich die Grenzen des Ultraschalls: Hat die vergrabene Abwassertonne einen hohen Dom, wird der Schall an dessen Unterkante reflektiert: Sie scheint ständig voll zu sein. Auch die Resistenz gegen Feuchtigkeit ist bescheiden. Deshalb der zweite Versuch als kapazitiver Sensor. Der funktioniert aber auch nur über kurze Strecken, wenn man ein Coax-Antennenkabel als Sensorleitung zur Tonne benutzt. In die Tonne wird der isolierte Innenleiter und ein Erdungsdraht getaucht. Was noch fehlt, wäre ein Isolationstest und eine Kalibrierfunktion. Aber Vorsicht: Mit der verwendeten Library u8glib von Oli Kraus für das 128x64-Pixel OLED-Display stoßen die ATmega328 an ihre Programmspeichergrenze. Ein Arduino-"Pro Micro" mit dem ATmega32U4 tut es schon nicht mehr. Andere Libraries existieren, wurden aber nicht erprobt.
Füllstandsmesser mit separatem Kapazitätssensor
Um einen Grubensensor zu bauen, bei dem die Grube weit entfernt vom Ableseort liegen kann, wurde ein zweiteiliges System entwickelt. Der kapazitive Sensor (mit ATtiny13) ist am Grubenschacht abgebracht. Er mißt die Kapazität und wandelt sie in ein Soft-UART-Signal (9600 Baud, 8n1n) mit 5 Volt Hub um. Dieses Signal läßt sich mühelos über 50 Meter zu einem Display übertragen (erprobt). Zur Kapazitätsmessung wird hier eine Ladungspumpe benutzt, wie im Abschnitt #qmess beschrieben.
Die Displayeinheit zeigt den aktuellen Füllstand in Metern als Pegel sowie die Grubenfüllung in Prozent und in Kubikmetern an, siehe Bild. Zur Kalibrierung des Systems dienen zwei Tasten ("min" und "max"), bei leerer Grube ist die min-Taste zu drücken, bei voller Grube die max-Taste. Um versehentliche Betätigung zu verhindern, befinden sich beide hinter der Frontabdeckung. Über eine OK-Taste werden die Abfragen bestätigt.
Die Display-Einheit ist mit einem Arduino-proMini auf Basis ATmega328 bestückt. Konkret ist der Füllstand einer 3m³-Grube (liegende Tonne) anzuzeigen. Zwischen Gartenhaus und Grube sind etwa 15 Meter zu überbrücken, die Anzeige ist im Gartenhaus installiert. Kapazitiver Sensor und Displayeinheit wurden deshalb getrennt aufgebaut.
Der in Wachs vergossene, kapazitive Sensor ist am Grubenschacht außen befestigt, er wandelt die gemessene Kapazität eines in die Grube hängenden Adernpaares "Strickleiter" in ein UART-Signal um (Soft-UART in ASM). Das Signal geht über ein 3-adriges Elektro-Installationskabel ins Haus.
Dort endet die Leitung in einer UAE-Telefondose. Ein stabilisiertes 5-Volt-Netzteil (>200mA) mit RJ-Stecker liefert die Versorgungsspannung für Sensor und Anzeige. Der andere RJ-Stecker geht zur Displayeinheit.
Überprüfen kann man das System z.B. mit einem Laser-Entfernungsmesser und mit einer Scilab-Kalibriertabelle (siehe File fuellstand.sce).
Sensor und Anzeige kommunizieren über eine UART-Schnittstelle mit 9600 Baud.
Dabei sendet der Sensor permanent im Sekundenabstand den nächsten Meßwert in der Form "m=376" etc. In der Anzeige erscheint dann i:376, siehe Bild oben.
Nachwort: Nach mehrjährigem Betrieb fällt auf, daß der Sensor bei jeder Grubenentleerung mit den "max"- und "min"-Tasten neu kalibriert werden muß. Jedesmal ist die Kapazität der Sensorleiter etwas gestiegen, wahrscheinlich, weil sich immer mehr Haare und Schlamm in den Sprossen der Strickleiter verfangen.
Also wurde nach einer äußerlich glatten Leitung gesucht. Ein superflaches, zweiadriges Lautsprecherkabel wurde im Internet als Meterware gefunden unter der Bezeichnung "SUPRA FLAT 2x1.6 #61030 Made in Sweden" mit dem Format 12x2 mm. Ein 2-Meter-Stück hat im Leerlauf eine Kapazität von 110 pF, in Wasser getaucht mißt man bei 2,00 m rund 710 pF, für einen Füllstand von 1,30 m mißt man rund 510 pF: Es scheint hervorragend geeignet zu sein. Um die Leitung straff zu halten und um das untere Ende gegen Wasser zu isolieren, wurde es in Polyesterharz vergossen (siehe Bild). Nun stehen Einbau und Langzeiterprobung an.
Sie haben einen feuchten Keller, eine feuchte Garage, oder einen muffigen Bungalow? Den hatten wir auch. Bis uns dieses Gerät die Ursache verriet. Nun ist er wieder trocken und duftet wie neu.
Funktion: Über vier Sensoren und fünf Relais ist die Klimatisierung z.B.
eines Gartenhäuschens steuerbar. Es stehen vier Sensoren und vier Aktoren zur Verfügung: zwei Lüfter-Relais (Umluft Dach und Frischluft von außen), ein Heizungsrelais und zwei Relais für einen Aktor mit drei Zuständen (auf/zu/aus) für einen Fensterantrieb (Comunello LIWIN). Als Sensoren wurden vier Adsong AM2302 verwendet, siehe auch 10-Kanal Temperatur und Feuchtesensor.
Pro Sensor werden die Temperatur in °C und die relative Feuchte in % gemessen und daraus die absolute Feuchte in g/m³ und der Taupunkt in °C (Kondensationstemperatur) berechnet. Auf dem 4x20 Zeichen SWART-Display (Eigenbau) oder über ein USB-Terminal kann man je nach Bedarf die Sensoren oder die Aktoren beobachten, dazu dient der zentrale Drehknopf mit Drucktaster. Über die USB-VCP-Schnittstelle des Arduino lassen sich die Werte auch auf dem PC inspizieren, siehe rechtes Bild.
Die vier Sensoren sind an verschiedenen Orten anzubringen: im Dach, an der Hauswand außen am Lüfter, im Zimmer nahe der Decke und im Zimmer nahe am Fußboden.
Vier Aktoren stehen zur Verfügung. Zwei Lüfter für Umluft (um über einen Konvektor Dachwärme hereinzuholen) und für Zuluft, um trockene Frischluft von außen zuzuführen. Dazu kann ein Fensterantrieb über zwei Relais bedient werden. Nicht zuletzt ist ein starkes Relais verbaut um eine Heizung als Frostschutz schalten zu können. Es können 12V-Lüfter oder 230V-Lüfter angeschlossen werden.
Das Steuerungsprinzip ist komplex. Die Heizung wird eingeschaltet unter 5°C. Mit dem Lüfter für Umluft wird Dachwärme hereingeholt. Ist die Luftfeuchte draußen geringer als drinnen, wird der Lüfter für Zuluft eingeschaltet und das Klappfenster geöffnet. Dito wenn es draußen wärmer als drinnen ist. Man ahnt, daß Widersprüche entstehen. Zum Glück ist der Programmspeicher nicht einmal halbvoll: Als Freak könnte man über unscharfe Schaltregeln (Fuzzy-Sets) nachdenken.
Was noch fehlt, wäre ein Simulator für die Sensorsignale. Das Problem: Man kann nach Inbetriebnahme nicht so einfach prüfen, ob das Gerät wirklich funktioniert, weil sich weder Temperaturen, noch Luftfeuchtigkeiten schnell mal testweise ändern lassen.
PS: Manche Arduino-Nano werden mit dem chinesischen Clone des FT232, dem CH340/341 geliefert. Dafür ist ein spezieller Treiber zu installieren. Der FTDI-Treiber für den original im Nano verbauten FT232 ist unter WindowsXP bereits vorhanden.
10-kanaliger Temperatur- und Feuchtesensor
Im Haus soll an zehn Meßstellen gleichzeitig auf Temperatur, relative Luftfeuchte, absolute Luftfeuchte und Taupunkt (Kondensationstemperatur) gemessen werden? Kein Problem. Die Ausgabe erfolgt über USB-VCP (PuTTY-Terminal o.ä.) oder über ein SWART-Display. Es kam ein Arduino-Nano (ATmega328P + FT232RL) zum Einsatz. Als Sensoren wurden Adsong AM2302 verwendet. Der Sensor hat ein sehr exotisches Eindraht-Protokoll. Für das Protokoll existierte eine Arduino-Library DHT, die allerdings schwächelte: Sie ließ nur einen Sensor zu und berechnete weder absolute Luftfeuchte in g/cm³ noch den Taupunkt in °C. Auch besaß sie ein Initialisierungsproblem. Deshalb wurde aus der DHT-Lib die DHT2-Lib gemacht, die allerdings vorher unter Arduino installiert werden muß.
Mit Tangit (PVC-Kleber für Dachrinnen) wurden in ein Leergehäuse zehn RJ45-Buchsen eingeklebt. Dazu noch eine Buchse für ein SWART-Display links und eine Befestigung für den Arduino-Nano. Die USB-Buchse des Nano ragt seitlich rechts heraus. Je ein pull-up Widerstand von 10kOhm ist zwischen SDA und VDD auf jede RJ45-Buchse zu löten. Die Pinbelegung der AM2302-Sensoren an den RJ45-Buchsen ist:
damit sind auch 4-polige RJ10-Stecker einsetzbar. Die Pins der DHT-Sensoren AM2302 sind im Quelltext bezeichnet.
Drehzahlsteuerung mit ATtiny85
Um eine Drehzahlsteuerung für eine Zahnradpumpe aufzubauen, kann man einen Mikrocontroller nutzen, der einen Timer für die PWM-Generierung besitzt und einen ADC, um einen Stellwert von einem Poti abzulesen. Dazu sollte ein Digispark ATtiny85 genügen. Mit der Software-Library für die USB-Schnittstelle als
Aber Vorsicht: Bei der Installation des USB-Micronucleus ist erhöhte Aufmerksamkeit gefragt. Das Projekt ist eher nicht für Einsteiger geeignet. Zusätzlich wurde eine 3,5 mm Klinkenbuchse für Fernschaltung ein/aus installiert, siehe Bild rechts. Zu spät bemerkt: Leider wurde die Dichtung am Motoranschluß schnell undicht. Pumpe vorher erproben!
USB-Spektrometer mit Arduino-"Pro Micro"
Seit einigen Jahren vertreibt Hamamatsu den vielleicht kleinsten Spektrometermodul weltweit für etwa 200 Euro. Was liegt da näher, als mit einem Arduino zu versuchen, dem Modul Leben einzuhauchen. Hamamatsu bot 2016 zwar einen Arduino Quellcode an, der aber wollte beim Autor nicht funktionieren. Das schwer verständliche Timing der Spezifikation macht es nicht einfacher. So wurde aus dem Beispielcode etwas funktionierendes gemacht.
Einfach den Spektrometer-Modul an einen Arduino-"Pro Micro" anstecken, Arduino Code (*.ino) laden, Board und Port einstellen und Code auf den "Pro Micro" hochladen.
Die Pins des Hamamatsu-Moduls sind sehr klein und zart. Um sie zu schützen, wurde eine Adapterplatine entworfen, die es gestattet, ihn mit üblichen Jumperkabeln zu testen (Bild rechts). Orcad- und Gerberdaten liegen anbei. Einige Platinchen liegen noch herum, mit frankiertem Rücksendeumschlag gibt es eine gratis. Um die Ergebnisse zu visualisieren, wurde eine kleine Windows GUI geschrieben mit
Processing3 (Java), die mit dem Arduino über USB-VCP kommuniziert. Ausführbare Dateien für Linux und Windows liegen bei. ZIP-File der GUI auspacken und gewünschte EXE doppelklicken. Wichtig: die EXE braucht die unter ihr stehenden Directories (Pfade nicht ändern!). Fortgeschrittene können auch mit dem Quellcode (*.pde) experimentieren. Weil das Spektrometer extrem lichtempfindlich ist (in schwarze Kiste packen), wurde eine automatische Nachregelung der Integrationszeit eingefügt. Diese verhindert allerdings die Messung der absoluten Helligkeit. Auch fehlt noch eine Normierung der Linienamplituden auf die spektrale Kennlinie des Sensormoduls.
Bild links: Spektrum einer Geldprüflampe; Bild mitte: Spektrum von Sonnenschein mit eingeblendeten Kalibrierlinien; Bild rechts: 78mm-Stab-LED weiß, BL213, 6W, 230V.
In die GUI sind folgende Funktionen integriert: Mit 'a' kann auf gleitenden Mittelwert umgeschaltet werden (graue <=> grünliche Darstellung); mit 'h' wird die Hilfe aufgerufen; mit 't' lassen sich zwei Kalibrierlinien (532 nm und 660 nm) anzeigen, mit denen die x-Achse mit zwei Laserpointern kalibriert werden kann; mit 's' läßt sich die Skala ein- und ausschalten und mit 'd' sieht man alle vom Arduino an die GUI übertragenen Daten in der Processing3-Konsole. PS: Die GUI nimmt den ersten freien, seriellen Port auf USB - kann schiefgehen, wenn vorher schon andere steckten: Windows-Gerätemanager (devmgr) befragen.
Kälte-Empfindungs-Sensor mit Bluetooth
Manchmal friert man im Winter - und manchmal nicht. Unser Kälteempfinden ist nicht in Grad Celsius angebbar. Luftfeuchte, Regen und Windstärke mischen heftig mit. Um also einen Kälte-Empfindungs-Sensor zu bauen, braucht man mindestens ein Thermometer, einen Regenmesser, einen Feuchtemesser und einen Windmesser. Und dann noch hochkomplizierte Vorhersagemodelle, für die man keine Referenzwerte zur Validierung findet. Was also tun? Ganz einfach: Man nehme einen Körper, der grob das Größenverhältnis des menschlichen Körpers hat und heize ihn auf 37°C auf. Die dazu nötige Heizleistung ist dann etwa ein Maß unseres Kälteempfindens.
Als Stubenhocker lieben wir eine Zimmertemperatur von mindestens 24°C - damit haben wir einen Referenzpunkt für die "Normalleistung". Nun können wir den Sensor draußen in die Kälte hängen und sehen, was geschieht. Wir können ihm Mütze, Anorak und Pullover anziehen, um die Heizleistung wieder auf "Normalleistung" herunter zu bringen.
Bedient wird der Sensor vom Handy aus über Bluetooth. Er hängt an geeigneter Stelle im Freien. Seine Zieltemperatur regelt ein Thermostat, der mit einem NTC bestückt ist. Eine Roboremo-App gestattet den Dialog unter Android.
Geheizt wird intern mit einem 8 Ohm Widerstand mit maximal 3 Watt, dazu hängt der Sensor an einem USB-Netzteil (stabilisiert 5 Volt / 1 Ampere). Die nichtlineare Kennlinie des NTC wurde vorab mit einem Scilab-Script berechnet. Vier Referenzpunkte wurden gemessen, um daraus ein Korrekturpolynom zu bestimmen (Bild mitte).
Bei Zimmertemperatur von 24°C nimmt das alu-blanke Gerät 0,94 Watt auf (Bild), um das Gehäuse auf 37°C zu halten. Bei windigen 10°C steigt die Heizleistung bereits auf Maximum (3 Watt), die Gehäusetemperatur aber sinkt unter 24°C ab. Das wäre für einen nackten Menschen bereits lebensgefährlich.
Bliebe noch zu sagen, daß eine isolierende Umhüllung des Gehäuses sinnvoll ist (Schrumpfschlauch 2x). Der Leistungsumsatz kann beim Menschen bis auf maximal den 10-fachen Grundumsatz steigen
(Link), die Umhüllung sollte folglich bei 24°C für eine Leistungsaufnahme um 300 mW sorgen (3 Watt/10). Da unsere Haut selten wärmer als 28°C ist, wäre dies als einzustellende Zieltemperatur evtl. sinnvoll.
Soll die Qualität einer trüben Substanz (Trinkwasser, Brauchwasser, Bier, Lack, Glas etc.) als Ortskurve der Rückstreuung bestimmt werden, kommt ein "Multi-Angle Light Scattering" (MALS) Sensor zum Einsatz, der die Licht-Rückstreuung rundum in 10-Grad-Schritten mißt. Eine rote Laserdiode (635 nm) leuchtet dazu in die Trübsubstanz (Glasrohr 20 mm), die winkelabhängige Rückstreuung wird von Photodioden gemessen. Bei diskretem Aufbau würde dieser Sensor soviel kosten, wie ein Mittelklassewagen. Geht es einfacher? Ja, es geht. Mit dem Arduino-Compiler, einem ATmega32U4, 19 speziellen Photodioden und einer Laserdiode läßt sich ein Dynamikumfang und eine Empfindlichkeit erzielen, die 2018 mit keinem Profigerät erreicht wird. Eine Mini-GUI für Windows/Linux/Android unter Processing3 (Java) ist nützlich zur Ergebnisdarstellung.
Kernprobleme jedes Photosensors sind Dunkelmessung und Dynamikbereich. Bei der Dunkelmessung siegt der Sensor, der am wenigsten rauscht. Und dieses Rauschen wird maßgeblich von der noch beherrschbaren Größe des Widerstands der Gegenkopplung des ersten OPV bestimmt, der als IU-Wandler (Photostrom -> Spannung) arbeitet. Will man höchste Empfindlichkeit erreichen, muß man bis in den hohen Megaohm-Bereich gehen. Das aber bedeutet, Leitflächen zwischen Photodiode und erstem OPV perfekt zu isolieren, also einzugießen oder zu lackieren. Firma TAOS (heute AMS) hatte damals eine bessere Idee: Man stellt seither Photodioden mit integriertem IU-Wandler her. Und die geben eine Frequenz statt eines Analogwertes aus, die über einen Dynamikbereich von 6 Zehnerpotenzen variert. Dieser Dynamikbereich ist mit einem diskreten Schaltungsaufbau kaum zu erreichen. Verwendete Sensoren erreichen eine Auflösung von 0.1Hz bis 500kHz, das sind 23 Bit oder 134 dB zwischen maximaler und minimaler Helligkeit pro Photodiode.
Um die Qualität von Geschirr oder Gläsern zu prüfen, wurde dieser Hammer entwickelt. Man sagt, im Gleichschritt marschierende Soldaten hätten schon Brücken zum Einsturz gebracht. Ob es stimmt, ist ungewiß.
In der Tat besitzt jedes Objekt mehr oder minder starke Eigenresonanzen, man denke an den Klang eines Glases oder einer Glocke. Zur Anregung nutzt man weißes Rauschen, erzeugt mit einem Dirac-Impuls. Idealerweise hat dieser ein weißes Spektrum.
Die komplexe Übertragungsfunktion H(jω) wird aus dem Verhältnis von Antwort Y(jω) zu Erregung X(jω) gebildet. Die Zeitfunktion der Erregung X(jω) wird vom Sensor im Hammer abgenommen, die Zeitfunktion der Antwort Y(jω) am Prüfling.
Die Herausforderung besteht darin, einen prellfreien Schlag ("Single-Hit") zu erzeugen. Der Hammer darf nur genau einmal auf die Oberfläche aufschlagen, sonst wird das Anregungsspektrum zu stark verfälscht.
Im Film rechts wurden 32 Single-Hits nacheinander geschlagen (blau: Piezo-Sensor im Hammerkopf , braun: Motorstrom, rot: Drehrichtungsumkehr, grün: Motor-PWM).
Mit einem Schrittmotor wird der Hammerarm beschleunigt. Unmittelbar vor dem Aufprall wird die Drehrichtung umgekehrt.
Die Federkraft des Hammerarms läßt ihn nur genau einmal aufschlagen. Bis dieses Husarenstück 2017 das erste mal gelang, verging ein Jahr. Umso größer war der Jubel! Nicht nur das Timing war in der Software zu optimieren, auch die Federkonstante des Hammerarms. Da inzwischen ein Produkt daraus wurde, müssen wir auf Details und den Quellcode verzichten.
Impressum
If not otherwise noted, pages are "open source":
www.gheinz.de/techdocs
info@gheinz.de
Besucher seit dem 6. Dez. 2021: