4×4 Simple Keypad

Es war so um das Jahr 2017 rum als ich feststellte, dass diese kleinen 4×4 Matrix Tastaturen, die man überall auf Ebay oder anderen Chinesisch Quellen nachgeworfen bekommt, wunderbar mit der der Pinbelegung des Arduino Pro Micro passt.

Gleich mal eine Hand voll von beiden bestellt.
Ja die Tastaturen kommen leider mit Pinheadern, falsch herum, aber die kann man ja auch wieder entfernen.

Da die Tastatur nur auf einer Seite Lötbar ist, also zuerst die Pinheader auf der Rückseite wieder einlöten. So dass sie vorne nicht herausschauen. Dann die 8 Pins in die Kontakte 2 bis 9 des pro Micro stecken und mit etwas abstand verlöten.
Den Abstand habe ich so gewählt, dass der Micro USB Port des Arduino auf gleichem Level ist, wie die Platine der Tastatur.

Dazu habe ich aus 3mm Acryl das Gehäuse mit dem CNC Laser geschnitten. 4 Lagen zusammengeklebt und fertig ist der Gewinner von „Nicht schön aber ungeheuer praktisch“.

50 x 77 x 12mm ohne Nippel.

Gut, wir haben dem Kleinen noch nicht gesagt was er tun soll und dafür gibt es sehr viele Anwendungsmöglichkeiten.
Dafür habe ich aber auch gleich mehrere gebaut.

Bsp.:

  • Tastenmacros von aufwändiger Software wie Photoshop
  • Cheatcodes für Spiele
  • 800 Mausklicks in einer Minute, hier ein Tastendruck
  • ein Passwortgenerator
  • häufig genutzte Telefonnummern und Adressen
  • usw.

Für die Umsetzung habe ich die Librarys Keypad.h, Keyboard.h und für die Mausklicks die Mouse.h verwendet. Mehr also den Beispielcode habe ich auch kaum benötigt.

Gibt es Haken? Klar, irgendwas ist ja immer.
Die emulierte Tastatur ist Englisch. Also auch das Layout. Ganz nervig. Z zu Y und so weiter, siehe das Beispiel.

if (customKey == '6') { Keyboard.println("04129 Leipyig"); }

Sollte man Modifiertasten verwenden wollen, ist man auf OSX, Win oder Linux festgelegt für die die Tastatur den Moment vorgesehen ist, sonnst geht sowas hier nicht:

if (customKey == 'D') { Keyboard.press(KEY_LEFT_GUI);
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('v');
Keyboard.releaseAll(); }

Also ein paar Beschränkungen die man im Hinterkopf behalten sollte, dann geht alles klar.

Anbei ein kleines Demoskript um die Fähigkeiten des verbauten Arduino zu zeigen.
http://www.hjhac.com/wp-content/uploads/2022/12/MatrixTastatur4x4Demo.ino_.zip

GRBL Limitboard V1

Es hat mich dann doch gewurm und ich habe mich hingesetzt und das Design der Platine zweiseitig gemach.
Noch einen 2. parallel geschalteten Anschluss für Probe auf der Seite wo auch der USB Anschluss des Arduino sitz.
So ist der Anschluss von außen zugänglich.

Und ab zu JLCPCB in China mit den Gerber Daten.
Bei den günstigen Preisen natürlich gleich eine Hand voll mehr in schwarz bestellt.
Im Zweifel sind es gute Eiskratzer.

Und was soll ich sagen? Es funktioniert. Wie schon bei der selbst gefrästen Platine.

Der parallel geschaltete Anschluss für Probe war so gedacht, dass man sich aussuchen kann, an welchen man die Probe anschließt, Intern oder Extern.
Es hat sich jedoch gezeigt, dass auch 2 angeschloßene Proben kein Problem darstellen.

Das Elend mit den Störungen an den Endstops

Zum betreiben der CNC3018 nutze ich zur Zeit eine Steuerung aus Arduino mit GRBL und CNC Shield.
Hier kommt es inzwischen durch die dichte Bauweise zu übersprechenden zwischen den Leitungen der Schrittmotoren und den Leitungen der Endschalter an den Achsen. Folglich, wenn die Schrittmotoren laufen löst sofort ein Endschalter aus. Ein Betrieb ist somit mit Endschaltern nicht möglich.
Diese wurden vorerst zum Betrieb deaktiviert.

Lösungsversuche
1. Versuch:
Ich habe an den Microschaltern der Endstops an den 3. Pol (NC) ein + Leitung angebracht, so dass nach Theorie die Sensorleitung so lange der Endschalter nicht ausgelöst ist, immer 5 Volt anliegen. Pustekuchen. Es lösen immer noch fremdinduzierte Signale die Endschalter in der Steuerung aus. Zusätzlich, habe ich nicht bedacht, das am CNC Shield Signale für + und – einer Achse Ein und das Selbe sind. Das hat zur Folge, dass wenn man einen der mechanischen Endschalter auslöst, auf der Signalleitung GND angelegt wird, während an dem anderen Endschalter an der selben Signalleitung +5V anliegen. Kurzschuss.
Das hat sogar mein am Arduino angeschloßenes Macbook abstürzen lassen.

2. Versuch:
Induktiver Näherungsschalter als Endschalter.
Hier TTL 5V kompatibel vom Typ NPN – NO.
Im Prinzip arbeiten diese wie ein Metallsuchgerät. Durch die kleine Bauform sind die Abstände, in denen Metall erkannt wird, relativ klein. Hier bei diesem Modell mit 12mm Durchmesser sind Metalle in 0 … 4mm Entfernung erkennbar.
Auslösen mit sich nähernden Metall wird erkannt, Prima.
Störung wird noch immer induziert sobald die Schrittmotoren laufen, NICHT Prima.

3. Versuch:
Alle Leitungen werden in Kupferfolienband eingewickelt. Das Band von jeder Leitung am CNC-Shield an GND angeschossen.
Sieht schick aus, macht die Leitungen sehr Steif und Unhandlich.
Auswirkungen sind nicht ersichtlich. Fail.

Die Lösung:
Da die Ströme die in den Leitungen induziert werden winzig klein sind, sind sie zwar ausreichend um in einen Arduino als Schaltvorgang erkannt zu werden, aber mit den µA nicht ausreichend um eine LED zum leuchten zu bringen.
Dies macht man sich zu Nutze um Signalleitungen mit Optokopplern zu entkoppeln und somit zu entstören.
Die Anschlüsse auf dem CNC-Shield sind mir eh zu Fummelig und eng gepackt. Somit entschied ich mich ein zusätzliches Shield zu entwerfen welches ich zwischen Arduino und CNC Shield stecke.

Entwurf in Fritzing

Es sind ja nicht viele Bauteile, bei den Optokopplern habe ich zuerst geschaut, welche wir auf Lager haben und bin bei ILD74 gelandet, die gleich 2 Optokoppler in einem DIP Gehäuse mitbringen.
Den größten Platz nehmen die von mir heiß geliebten steckbaren Schraubklemmen in 3,81mm(0,15in) Ausführung ein.

Entkoppelt werden die Leitungen für X, Y, Z, und Probe welches für Nullpunktsensoren verwendet wird. X und Y bekommen die Anschlüsse doppelt für jedes Ende der Achse.
Z benötigt dies nicht, da in der Regel nach unten immer das eingespannte Werkzeug im Weg sein sollte bevor irgendein Endschalter auslöst. Z hat also nur oben am Ende der Achse einen Endschalter.
Zu jeder Signalleitung kommen jeweils ein Anschluss für 5V und GND. Somit ist man jederzeit frei in der Wahl seiner Endschalter, ob nun mechanische Microschalter die nur Sig. und GND benötigen würden, oder Lichtschranken oder Induktiver Näherungsschalter.

In Fritzing für die erste Version noch einseitig entworfen, mit 3 Dratbrücken.
Als Gerber Datei ausgegeben und mit der Online CAMsoftware für Platinen https://copper.carbide3d.com dann die G-Codes für die Fräse erzeugt und dann gefräst.
Wer ein mal die Löcher eine selbstgeätzten Platine bohren musste, wird die Fräse an dieser Stelle zu schätzen wissen.

Und ja, Chinaplatinen sind schnell und günstig zu haben. Jedoch nicht so schnell und so günstig wie mit der Fräse Samstag Nacht um 2.
Die erste Version wird wenn sie einseitig zu meistern ist, wahrscheinlich von mir immer selber hergestellt.

GRBL_Opto_Limitshield

Da ist es also die erste Version des GRBL_Opto_Limitshield.
Und was soll ich sagen, es funktioniert. Die Fräse kann jetzt endlich den Maschinennullpunkt setzen (HOME) UND Störungsfrei mit aktivierten Endschaltern an allen Achsen ihre Programme fahren.
Aktuell nutze ich eine gemischte Bestückung der Endschalter. An Y sind mechanische Microschalter und an X und Z sind Induktiver Näherungsschalter.

Einfach mal die Fräse halten

Ich fange mal ganz von Vorn an.
Anfang 2019 habe ich mir einen Bausatz der kleinen CNC Fräse von generischen Typ 3018 gekauft.
Damals für rund 300€, heute sind dafür ca. 200€ bei den großen Händlern fällig.

Die technischen Daten (um das mal für mich und die Nachwelt festzuhalten):

  • Effective working area: X*Y*Z=300 * 180 * 45mm; Frame dimension: X*Y*Z=330 * 400 * 240mm.
  • Frame material: Aluminum, PVC, Plastic
  • 775 Spindle:(12-36V)?12V, 3000rpm; 24V, 7000rpm; 36V, 9000rpm.
  • Spindle: 775 spindle motor (12-36V) 24V: 10000r/min
  • Spindle Chuck: 3.175mm
  • Supported system: WWindows XP / Win 7 / Win 8 / Linux
  • Step motor: Fuselage length 34MM, Current 1.33A, 12v. Torque 0.25N/M
  • Drill bits: tip 0.1mm, 20 degree, diameter3.175mm (Contains 10 pcs)
  • Software: GRBL controller
  • The machine can carve wood, plastic, acrylic, PCB CCL, soft metal like copper and aluminum and other materials, but can not carve hard metal, jade and other very hard texture of the items.

Package:
1 x CNC Router Machine
10 xCNC Bits
1 xER11
1 xER11 Extension Rod
4 xCNC Plates
(Come with the instruction and install video & software, please see the USB disk)

Einige Teile, darunter auch die komplett vormontierte Z-Achse, sind 3d gedruckt, was hier in keiner weise stört.
Die Angaben zu dem Spindelmotor sind wie ich beigefügt habe etwas widersprüchlich. Das Netzteil bringt 24V, wo jetzt offen ist, ob das jetzt 7000 oder 10.000 r/min sind.
Die 775er Motoren werden einzeln mit 80 – 288W angepriesen, ich denke mal, mehr als 80W wird dieser nicht bringen.

Als der Bausatz ankam, war vom Start weg das Steuerungsboard tot.
Es wurde beim Händler bemängelt, der angeblich auch Ersatz verschickt hätte, nur es kam nichts an.
Ich habe dann zur Steuerung ein CNC Shield (grbl Board) für einen Arduino verwendet.
Da ich das Gerät mit einem Mac ansteuere war mir die auf einer MiniCD beigelegte Software eh Egal.
Sowas Programmieren die in China nicht.
Angesteuert wird mit OpenBuilds CONTROL welches es für alle Systeme gibt.
Als CAM verwende ich OpenBuilds CAM, Fusion 360 und Carbide Create je nach Bedarf.

Das Gerät ist mit seinen 330 * 400 * 240mm handlich klein, und kann jederzeit umhergetragen werden.
Bei Nichtgebrauch hänge ich es im Eigenbaukombinat auf 2 Schrauben an die Wand.
Die Fräse ist Barbone, weder Endstops, noch verschieden große ER11 Spannhülsen sind dabei, dafür arbeitet sie aber recht genau. Es wurden schon Platinen Isolationsgefräst oder ein Prägestempel für das Projekt Lederbox.
Endstops und ein Satz ER11 Spannhülsen wurden nachgeordert.
Bisher wurden Acryl, Holz und Platinen gefräst.

Beim fräsen der Platinen ist aufgefallen, dass selbst mit 0,1mm Gravursticheln nur mindestens 0,4mm breite Nuten gezogen werden können. Bei SMD Pads kann es nicht fein genug sein. Ich habe da ein Eiern der Welle des Spindelmotors im Verdacht, der darüberhinaus auch sehr laut ist.

Bei mir bleib selten ein Stein auf dem anderen, darum werde ich in Zukunft einige Veränderungen an der Fäse vornehmen und Schwachpunkte ausräumen.

bitbloq

Bildsc54
Heute stelle ich mal bitbloq vor, eine blockbasierende Programmierumgebung wie z.B. Scratch für den Arduino.
In seiner Benutzung noch ein wenig eingeschränkt, aber auf einen guten Weg.
Ich hoffe gerade im Bereich Sensoren tut sich da in Zukunft noch ein wenig.

Project search light: WS2811 DMX Teensy3.1

2014-10-31

Hier einige anscheinend nützliche Links die ich bei meiner Informationssuche für mein nächstes Projekt gefunden habe.
Wie an den Themen unschwer zu erkennen ist, will ich WS2811/12b LED Streifen über einen Teensy per DMX steuern.

Teensy/Arduino:
OctoWS2811 LED Library OctoWS2811
Vixen Lights steuert Arduino blog.huntgang.com
Arduino WS2811 Strobe Pixels twinkleclaus.com
FastSPI LED Library fastled.io

WS2811/12b LED, von Adafruit auch unter dem Namen Neopixel unters Volk gebracht:
Einige ganz gute Preise wenn man auf eine Lieferung aus China warten kann und eventuell noch zum Zoll muss. aliexpress.com
LED-Cubes aus WS2811 Pixeln kickstarter.com
Einige interessante Einzelheiten zur Ansteuerung WS281X-signal-quality

DMX:
Arduino als PC-DMX Interface arduino-dmx
DMX Library DMX Library
DmxSimple
Ein midi zu dmx arduino control shield sonicrobots.com

Komfortable RTC Programmierung

RTC1307
Der italienische Blog Lucadentella stellt hier eine komfortable Möglichkeit vorgestellt, diese kleinen weit verbreiteten RTC-Module mit DS1307 Chip und Knopfzelle mit Hilfe eines Arduinos am PC einzustellen.

RTC steht in diesem Fall für Echtzeituhr (englisch real-time clock)
Diese hier verwendeten RTC-Module verwaltet selbstständig die aktuelle Uhrzeit und stellt sie auf Anfrage über ein I2C Bus einem angeschlossenen Mikrocontroller (z.B. Arduino oder Pi) zu Verfügung.
Damit können dann beispielsweise Messwerte mit einem Zeitstempel versehen werden.
Um die RTC beim einschalten eines Gerätes nicht erneut stellen zu müssen sind die Module mit einer Knopfzelle gepuffert.

Sehr nützlich, gibt es in der Bucht oft für unter 5€.

Temperatursensor TMP123

Der  Temperatursensor TMP123 von Texas Instruments kommt in SMD Gehäuse mit Anschlüssen nach SOT23-6, also arschklein aber noch gerade so mit einer feinen Spitze lötbar.

Specs:
Die Komunikation mit dem TMP123 erfolgt über SPI
12 bit Auflösung
-40 bis 125 °C Messbereich, mit einer Genauigkeit von +- 1,5°C im mittleren Bereich
Verträgt 3,3V und 5V
Soweit ich es sehen kann unterscheidet sich sein Bruder der TMP121 nur in der Pinbelegung.

 

Ich habe mich mal daran gemacht 2 von den kleinen Kerlen Breadboard tauglich zu machen.

Sowas hätte früher im Staubsaugerrohr nicht mal geklappert.

 

Der TMP123 wird vor dem Löten von einer Krokoklemme auf der Adapterplatine festgehalten.

 

Noch die Stiftleiste dran und das war schon das Wesentliche.
Mit abgewinkelten Stiftleisten spart man übrigens einiges an Platz auf dem Breadboard.

 

Hinten habe ich noch die Pinbelegung aufgeklebt.

 

Beispielcode für den Arduino

TMP121_123.pde.zip

 

broken Pro Micro

So schnell geht’s.

Ein feines Gerät, die Micro Version des Arduino Leonardo mit ATmega32U4 von Sparkfun.

Die Verwendung der Micro USB Buchsen ist in offener Montage nicht gerade Sinnvoll, zum trennen von Stecker und Buchse sind recht hohe Kräfte aufzuwenden was ein Abstützen der Buchse in einem Gehäuse nötig machen würde. Nur auf einer Platine aufgelötet geht dies nicht lange gut.

Flexible RGB LED Leisten

Ich will hier mal über LED Lichtleisten schreiben, diese Art der Beleuchtung findet inzwischen immer mehr Verbreitung und die Preise befinden sich gerade im freien Fall.
LED Strips kommten gebräuchlicherweise auf Rollen zu je 5 Meter daher, diese bestehen aus flexiblen ca. 10mm breiten Platinen aus Polyimidfolie auf die die Kupfer Leiterbahnen aufgedampft wurden.
Darauf befinden sich je nach Hersteller 30-120 LEDs pro Meter, einige Widerstände und Treiber ICs. Diese LEDs können einfarbig sein oder RGB LEDs sein d.h. in einer RGB LED sind Leuchtdioden in den Farben (r)ot, (g)rün und (b)lau gemeinsam vergossen und können somit unterschiedlich angesteuert zusammen so gut wie alle Farben des sichtbaren Lichts erzeugen.

LED Strips mit Einfarbige LEDs  gibt es in allen möglichen Farben, wobei ich dort nur noch die weißen und warm weißen guten Gewissens empfehlen kann.
Wenn Farbe ins Spiel kommt sollte man gleich zur RGB Variante greifen, da man dort deutlich flexibler ist wenn das Ergebnis nicht den Wünschen entspricht und die Farbe seinen Wünschen viel genauer anpasst werden kann. Bei dieser Art wird am Controller Helligkeit und eine Farbe für die gesamte Länge eingestellt.

Kommen wir jetzt zu den richtig coolen Zeug, RGB LED Strips mit adressierbaren LEDs.

Bei denen kann man dann mit einen Computer oder Microcontroller Board wie dem Arduino jede LED einzeln ansteuern. Erreicht wird dies durch speziele ICs auf der Lichtleiste, wo ein IC für je eine bzw. zwei RGB LEDs zuständig ist.
Diese Bus angesteuerten Treiber ICs gibt es inzwischen in vielen Variationen und sind unterschiedlich anzusteuern.

HL1606
Der HL1606 ist einer der älteren Treiber und noch ziemlich dumm, dafür aber weit verbreitet. Er wird mit 4 Datenleitungen als SPI Bus angeschlossen und stellt kein PWM zur Verfügung, so dass die Farben softwarseitig moduliert werden müssen.
Es existiert eine Library für diese LED Strips HL1606 Arduino library.

LPD8806
Der LPD8806 wird über 2 Datenleitungen angesteuert und kann jede Farbe 7 bitig PWM Dimmen was rund 2 Millionen Farben ergibt.
(ältere Version LPD6803 nur 5 Bit PWM)
LPD8806s besitzen 6 Ausgänge und können  2 RGB LEDs gleichzeitig ansteuern.
Die Leute bei Adafruit habe den Chip reverse engineered und eine Anleitung incl. einer Arduino Library für diese LED Strips geschrieben, welche sie natürlich auch verkaufen.

WS2801
Der WS2801 kann pro Farbe 8 Bit PWM ausgeben was demnach 16,7 Millionen Mischfarben ergibt. Da für jede RGB LED ein IC zuständig ist, kann somit auch zwischen jeder LED zugeschnitten werden. Sparkfun verkauf diese WS2801 getriebenen LED Leisten und bietet gleich auch Beispielcode für den Arduino und Datasheets zum WS2801 an. Als Library kann man die unten genante Fastpsi verwenden.

Es gibt noch unzählig viele andere Treiber ICs für adressierbare  RGB LED Strips, die oben genannten sind die gebräuchlichsten.

Es existiert mit Fastspi noch eine Arduino Library die eine größere Menge von Treibern unterstützt,

  • 595 style shift registers
  • hl1606 based led strips
  • lpd6803 based led pixels
  • tm1809 based led strips
  • tm1804 based pixels
  • ws2801 based led strips and pixels
  • lpd8806 based led strips
  • ucs1903 based led strips
  • sm16716 chipset
  • support for the ws2811 chipset

Zu bedenken ist übrigens, dass das ansteuern von LEDs einiges an RAM braucht. So soll ein Arduino Uno/Nano mit seinen 2KB Ram maximal 160 RGB LEDs ansteuern können. Ein Mega hat übrigens 8KB Ram. Ein raspberry pi ist angesichts dieser Limitation für größere Projekte wie eine Matrix aus mehreren LED Strips eher in Betracht zu ziehen.

Des weiteren sollte man beachten, dass so ein Meter LED Leiste einen haufen Strom braucht den der 5V Ausgang eines Arduinos nicht liefern kann.
Es ist also ein ausreichend dimensioniertes zusätzliches 5V Netzteil nötig.
Für die mit WS2801 gibt der Hersteller einen maximalen Verbrauch von 1.8A pro Meter an wenn alle einzelnen Farben aufgedreht sind.
Bei allen anderen sollte mit ähnlichen Werten zu rechnen sein.

Günstig kaufen kann man solche LED Strips an viel Orten, z.B. bietet bestlightingbuy.com die 5 Meter Rolle für 99-120 $ an.

ref.: nut-bolt.nl