Intelligentes LCD-Schild für Arduino

Ich kenne die Meinung vieler technischer Experten zu Arduino und teile teilweise ihre Ansicht. Für eine schnelle Automatisierung ist diese Plattform jedoch sehr nützlich: Wie ein Designer eines Kindes können Sie ein Gerät in wenigen Stunden zusammenbauen und programmieren, ohne Zeit mit verschiedenen „undefinierten Verweisen auf __bss_start__“ und „Gerät nicht erkannt“ zu verschwenden.
Einmal brauchte ich eine Anzeige, um eine andere Routine zu automatisieren. Ich blätterte durch Aliexpress und konnte immer noch keinen geeigneten Schild für Arduno finden.


Katze, um Aufmerksamkeit zu erregen

Down and Out Probleme begannen


Ich brauchte also eine Dialogbenutzeroberfläche und darüber hinaus schnell. (Die Katze sollte Aufmerksamkeit erregen, es wurde bemerkt - es funktioniert.) Wie absichtlich schlugen alle Hersteller vor, Eingabefelder und Fortschrittsbalken manuell zu zeichnen, Schaltflächenhandler zu programmieren und mit einem Wort alles zu tun, was ich einfach nicht wollte. Erstaunlicherweise sollten Sie eine Bibliothek auf hoher Ebene bereitstellen, die sich um diese Probleme kümmert. Wahrscheinlich laufen in 80% der Fälle alle Aufgaben auf eine einfache Reihenfolge hinaus:
  1. Zeigen Sie ein Formular mit Eingabefeldern an.
  2. Warten Sie, bis der Benutzer das Foo-Feld bearbeitet hat.
  3. Holen Sie sich den neuen Wert des Foo-Feldes.
  4. Mach etwas zurück.

Das Fehlen einer Bibliothek war jedoch nicht das einzige Hindernis. Die knappen ROM-Reserven meines Arduino Uno (und die gleiche Situation mit Leonardo, Ethernet, Pro) reichten bestenfalls aus, um ein Bild mit einer Auflösung von 128 x 128 Pixel zu speichern. Und es war kein Platz mehr für den Code.
Nachdem ich eine breite Front durch Aliexpress, DX und ähnliche Geschäfte gegangen war, fand ich schließlich in der Sprache der Netzwerkentwickler entweder "dünne dumme" oder "zu dicke" Schilde. Ersteres löst das Problem nicht, ist aber billig. Das zweite ist wie ein Flugabwehr-Raketensystem, und für diese Redundanz muss ein angemessener Betrag gezahlt werden. Wenn ich Nikanor Ivanovichs Lippen an Ivan Kuzmichs Nase legen könnte ... Nach einigem Zögern beschloss ich, diese nervige Marketinglücke zu füllen.

Was sollen wir einen Schild bauen?


Ich breitete das Brett aus, bestellte die ersten Proben für Experimente und probierte es aus.

Die Idee nahm allmählich Gestalt an. Die Lösung sollte also einfach zu bedienen und immer billig sein (siehe unten):
  • An Bord der Abschirmung sollte sich ein Mikrocontroller mit einem Speicherbereich für mindestens ein paar Bildschirme befinden.
  • Um sicherzustellen, dass keine Probleme mit dem Speicher auftreten, können Sie einen microSD-Steckplatz hinzufügen.
  • Außerdem müssen Sie direkt auf dem Schild einige Knöpfe platzieren.
  • Der Mikrocontroller muss die „schwarze Arbeit“ erledigen, die Formularfelder rendern und die Tastendrücke so verarbeiten, dass nur durch die Stromversorgung des genähten Schilds durch die Formulare geblättert, die Eingabefelder bearbeitet, ein Vogel in das Kontrollkästchen gesetzt werden kann usw.
  • Arduino : I2C, SPI UART. Arduino; (, ).
  • Arduino GPIO, .
  • , , « Vim, !», , , GTK Glade .




Die grundlegendste Komponente der Abschirmung ist das Anzeigemodul. Sowohl der Preis als auch die technischen Eigenschaften des Produkts hängen in hohem Maße davon ab. Bei der Suche nach einem geeigneten Modul wollte ich Fisch essen und reiten: Einerseits ging ich vom Verfügbarkeitskriterium aus, andererseits sollten die Kosten des Moduls minimal sein. Grundsätzlich widersprechen sich diese Kriterien: Geschäfte wie Terraelectronics mit Niederlassungen im ganzen Land boten eine Reihe von Farbdisplays für gängige Modelle an, deren Preise jedoch ab 2000 Rubel und darüber lagen; Auf der anderen Seite gab es viele gute Optionen für denselben Aliexpress, aber alle hatten den gleichen Nachteil: Es gab einen Abgrund zwischen ihnen und unseren unglücklichen Benutzern, in dem mehr als tausend Pappkartons starben und deren Verhalten ebenso leicht vorhersehbar war.wie das Verhalten von Ölzitaten oder Wetter.Jeder verstand natürlich, worum es ging. Meine Idee war also immer noch nur eine Idee.
Wie so oft erweist sich das nächtliche Geschwätz in der Küche bei einer Tasse Tee als tödlich. Ein Freund teilte im Vorbeigehen mit, wie er ein defektes Display auf seinem HTC verändert hat. Es stellte sich heraus, dass Smartphone-Displays, die zweifellos bessere Eigenschaften als Produkte in Terraelectronics-Katalogen aufweisen, zwei- bis dreimal billiger sind! Das war eine Offenbarung. Danach wurde schnell genug ein Display gefunden, das in Russland bei fast jedem Schritt für einen Cent gekauft werden kann; Es wurde auf Nokia 2600/2650/3100/3200/5100/5140/6100/6220/6610/7210/7250 Handys installiert. (Wie sich später herausstellte, habe ich Amerika wiederentdeckt, da dieses Display in vielen Schildern für Arduino verwendet wird.) Seine Auflösung - 128 × 128 Pixel - reicht aus, um ein Formular mit drei oder vier Eingabefeldern anzuzeigen.


Glasiert ist besser als gepriesen


Viele verstehen wahrscheinlich immer noch nicht ganz, wie man das beschriebene Gadget benutzt. Der vielleicht einfachste Weg, dies zu veranschaulichen, sind zwei Standardsituationen:
  • Wir haben ein digitales Thermometer, es ist notwendig, seine Messwerte auf dem Display anzuzeigen.
  • Es gibt einen Servoantrieb, Sie müssen die Parameter seines Betriebs einstellen. Zum Beispiel seine Position.

Thermometer

#include <intelcd.h>
#include <OneWire.h>
#include <DallasTemperature.h>
 
//     2 Arduino   1-Wire
#define ONE_WIRE_BUS 2
 
/*************************************************************
*     ,                      * 
*      :                      *
*************************************************************/
//  ,   . 
#define FORM_TERMO 0
//  ,    
#define FIELD_TERMO 0
 
 
//   oneWire     oneWire
OneWire oneWire(ONE_WIRE_BUS); 
//   sensor    
DallasTemperature sensor(&oneWire);
//   lcd   LCD 
InteLCD lcd;
 
void setup(void)
{
    lcd.init(); 
    sensor.begin(); 
}
 
void loop(void)
{
    //   
    sensor.requestTemperatures();
 
    //     
    lcd.update(FORM_TERMO, FIELD_TERMO, sensor.getTempCByIndex(0));
    delay(1000);
}


Servo

#include <InteLCD.h>
#include <Servo.h>
 
#define FORM_SERVO 0
#define FIELD_SERVO 0
 
InteLCD lcd; //   lcd   LCD 
Servo myservo; //   servo   
void lcdEvent(void); //    

void setup(void)
{
    myservo.attach(9); // ,    9 
    lcd.init(); //  lcd
}
 
void loop(void)
{
}
 
void lcdEvent(void)
{
    switch (lcd.event.code) {
        case InteLCD::FIELD_UPDATED:
		//    0  1
		if (lcd.event.formid == FORM_SERVO && lcd.event.fieldid == FIELD_SERVO) 
               {
    	            //      
        	    //      
            	    myservo.write(lcd.event.arg[0]); 
 
    	            //       
        	    delay(15); 
	    	}
 
            break;
    }
}


Schlussendlich


Meiner Meinung nach sollte sich die Heimwerkerelektronik zu einer größtmöglichen Modularität entwickeln, bei der jedes Modul äußerst einfach und vollständig ist. Während das Kind sein Spielzeugschloss aus den verschiedenen Lego-Teilen errichtet, muss der Benutzer sein Gerät in Ziegeln zusammenbauen, jedoch ohne Hammer und Feile. Mein Schild ist ein kleiner Schritt in diese Richtung.
Ich werde mich freuen, wertvolle Ratschläge zu hören und zu verstehen, wem außer mir so etwas Nützliches fehlt.

Source: https://habr.com/ru/post/de384363/


All Articles