CADRO - Cheap Arduino Digital Readout

Für die Olmütz habe ich mir vor ein paar Tagen neue Glassmassstäbe mit 5u Auflösung von HXX aus Fernost bestellt. Mit 215$ inkl. Versand für 3 Masstäbe (100mm, 150mm, 600mm) nicht all zu teuer. Eine Digitale Anzeige hätte lediglich 80$ gekostet - dennoch habe ich mich entschieden, die DRO selber zu bauen. Nicht wegen der Erspranis der unglaublichen Summe von 80$ sondern weil Hobby - sprich mit maximalem Aufwand, minimalen Ertrag erzielen ;)
Die Massstäbe waren 4 Tage nach Bestellung bei mir zu Hause und sehen ganz ok aus -soweit ich das beurteilen kann. Die Verarbeitung des Zubehör (Montage-Winkel, Abdeckung) ist typisch chinesisch - sprich alle bearbeiteten Stellen sind scharfkantig und müssen zuerst entgratet werden.

Es gibt zwar schon einige homemade DRO-Projekte, z.b. das von Yuri. Finde ich eine extrem elegante Lösung - aber meine Frau hätte keine Freude wenn ich auch noch ihr Tablet in die Werkstatt entführe. Auch die Zardoz-Anzeige ist nicht ohne. Aber ich will was, dass mit einfachen Standardmitteln und ohne Custom-Made-Boards auskommt sowie für unter 20$ ($ nicht Euro!) zu bauen ist.

Die DRO wird mit einem 4x20 Charakterdisplay (4 Zeilen à 20 Zeichen), einem 4x4 Keypad, 3 Reset-Knöpfen (die falschen - das sind leider keine Taster) auf einem Arduino Mini realisiert. Materialkosten 15$. Zusätzlich soll über einen Hall-Sensor die Spindeldrehzahl angezeigt/ermittelt werden. Das könnte man dann gleich noch nutzen, um einen FU für eine konstante Drehzahl zu regeln ;)

Gestern ist der lang ersehnte Arduino eingetrudelt....nein, nicht der, den ich am 23. Oktober bestellt habe - sondern derjenige von mitte September!! Hat mich echt gewundert, dass der überhaupt nocht eingetroffen ist - dachte die chineschische Post hätte den verloren. Aber dafür ist er "gratis" - weil mir ebay mittlerweilen den Kaufpreis rückerstattet hat. Irgenwie scheint momentan bei der HK/CN-Post der Wurm drin zu sein. Die Hälfte der Sendungen sind 8 oder mehr Wochen überfällig.
Anyway, natürlich musste ich meinen Code gleich mal austesten...

void QuadraturEncoder::onPinChangeInterrupt() {
   // Read input port & mask out all except desired pin
   bool newA = digitalPinToInputRegister(_pinChannelA) & _channelAMask;
   bool newB = digitalPinToInputRegister(_pinChannelB) & _channelBMask;

   //interrupts are disabled  and restored by defaults in isr()
   if (newA != _oldA || newB != _oldB) {    //channel A or B changed
      newB ^ _oldA ? _cnt++ : _cnt--;

   } else {    //spurious wake-up ?
      _errCnt++;
   }

   _oldA = newA;
   _oldB = newB;
}
Der Code funktioniert :) wenn auch noch ein bischen langsam...