Je connais l'opinion de nombreux experts techniques sur Arduino et partage dans une certaine mesure leur point de vue. Néanmoins, par exemple, pour une automatisation rapide, cette plate-forme est très utile: elle, comme le concepteur d'un enfant, vous permet d'assembler et de programmer un appareil en quelques heures sans perdre de temps sur diverses «références indéfinies à __bss_start__» et «Appareil non détecté».Une fois, pour automatiser une autre routine, j'avais besoin d'un affichage. J'ai feuilleté Aliexpress et je n'ai toujours pas trouvé de bouclier approprié pour Arduno.
Chat pour attirer l'attentionLes problèmes de down and out ont commencé
Donc, j'avais besoin d'une interface utilisateur de dialogue et, en plus, rapidement. (Le chat devait attirer l'attention, il a été remarqué - cela fonctionne.) Comme si c'était exprès, tous les fabricants ont suggéré de dessiner manuellement des champs de saisie et des barres de progression, de programmer des gestionnaires de boutons et, en un mot, de faire tout ce que je ne voulais pas. Étonnamment, pourquoi ne pas fournir une bibliothèque de haut niveau qui répond à ces préoccupations? Probablement dans 80% des cas, toutes les tâches se résument à une séquence simple:- Affichez un formulaire avec des champs de saisie.
- Attendez que l'utilisateur modifie le champ Foo.
- Obtenez la nouvelle valeur du champ Foo.
- Faites quelque chose en retour.
Mais le manque de bibliothèque n'était pas le seul obstacle. Les rares réserves de ROM de mon Arduino Uno (et la même situation avec Leonardo, Ethernet, Pro) étaient au mieux suffisantes pour stocker une image à une résolution de 128x128 pixels. Et il n'y avait plus de place pour le code.Après avoir parcouru un large front à travers Aliexpress, DX et les magasins similaires, j'ai finalement trouvé, dans le langage des développeurs de réseaux, des boucliers "minces" ou "trop gros" . Les premiers ne résolvent pas le problème, mais sont bon marché. Ces derniers sont comme un système de missile antiaérien, et vous devrez payer un montant équitable pour cette redondance. Si je pouvais mettre les lèvres de Nikanor Ivanovich sur le nez d'Ivan Kuzmich ... Après quelques hésitations, j'ai décidé de combler cette lacune marketing ennuyeuse.Que devons-nous construire un bouclier
J'ai écarté la planche, commandé les premiers échantillons pour des expériences, essayé.
L'idée a progressivement pris forme. Ainsi, la solution doit être facile à utiliser et toujours bon marché (à propos de laquelle ci-dessous):- À bord du bouclier devrait être un microcontrôleur avec une marge de mémoire pour au moins quelques écrans.
- Pour vous assurer qu'il n'y a aucun problème avec la mémoire, vous pouvez ajouter un slot microSD.
- De plus, juste sur le bouclier, vous devez placer quelques boutons.
- Le microcontrôleur doit faire le «travail noir», rendre les champs de formulaire et traiter les pressions de bouton de telle manière que, uniquement en alimentant le bouclier cousu, il serait possible de feuilleter les formulaires, de modifier les champs de saisie, de mettre un oiseau dans la case à cocher, etc.
- Arduino : I2C, SPI UART. Arduino; (, ).
- Arduino GPIO, .
- , , « Vim, !», , , GTK Glade .
Le composant le plus fondamental du bouclier est le module d'affichage. Tant le prix que les caractéristiques techniques du produit en dépendent le plus. Lors de la recherche d'un module adapté, je voulais manger du poisson et monter à cheval: d'une part, je suis parti du critère de disponibilité, d'autre part, le coût du module devrait être minime. Fondamentalement, ces critères se contredisent: des magasins comme Terraelectronics, avec des bureaux dans tout le pays, ont offert un certain ensemble d'écrans couleur pour les modèles courants, mais leurs prix étaient de 2000 roubles et plus; d'autre part, il y avait beaucoup de bonnes options sur le même Aliexpress, mais elles avaient toutes le même inconvénient: il y avait un abîme entre eux et nos malheureux utilisateurs, dans lequel plus d'un millier de cartons sont morts, et dont le comportement était tout aussi facilement prévisible,comme le comportement des citations de pétrole ou de la météo.Chacun comprenait bien sûr de quoi il s'agissait. Donc, mon idée n'était encore qu'une idée.Comme cela arrive souvent, le bavardage de la cuisine autour d'une tasse de thé se révèle fatal. Un ami a raconté au passage comment il avait changé un écran cassé sur son HTC. Il s'est avéré que les écrans de smartphone, ayant sans aucun doute de meilleures caractéristiques que les produits des catalogues Terraelectronics, coûtaient deux à trois fois moins cher! Ce fut une révélation. Après cela, un affichage a été assez rapidement trouvé, qui en Russie peut être acheté à presque chaque étape pour un sou; Il a été installé sur les téléphones Nokia 2600/2650/3100/3200/5100/5140/6100/6220/6610/7210/7250. (Comme il s'est avéré plus tard, j'ai redécouvert l'Amérique, car cet écran est utilisé dans de nombreux boucliers pour Arduino.) Sa résolution - 128 × 128 pixels - est suffisante pour afficher un formulaire avec trois ou quatre champs d'entrée.
Le vitrage vaut mieux que le vantard
Beaucoup, probablement, ne comprennent toujours pas comment utiliser le gadget décrit. La façon la plus simple d'illustrer cela est peut-être avec deux situations standard:- Nous avons un thermomètre numérique, il est nécessaire d'afficher ses lectures sur l'écran.
- Il y a un servo variateur, vous devez définir les paramètres de son fonctionnement. Par exemple, sa position.
Thermomètre
#include <intelcd.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
#define FORM_TERMO 0
#define FIELD_TERMO 0
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensor(&oneWire);
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;
Servo myservo;
void lcdEvent(void);
void setup(void)
{
myservo.attach(9);
lcd.init();
}
void loop(void)
{
}
void lcdEvent(void)
{
switch (lcd.event.code) {
case InteLCD::FIELD_UPDATED:
if (lcd.event.formid == FORM_SERVO && lcd.event.fieldid == FIELD_SERVO)
{
myservo.write(lcd.event.arg[0]);
delay(15);
}
break;
}
}
À la fin
À mon avis, l'électronique DIY devrait évoluer vers la plus grande modularité, où chaque module est extrêmement simple et complet. Ensuite, alors que l'enfant érige son château de jouets à partir des différentes pièces Lego, l'utilisateur doit assembler son appareil en briques, mais sans utiliser de marteau et de lime. Mon bouclier est un petit pas dans cette direction.Je serai heureux d'entendre de précieux conseils et de comprendre qui d'autre que moi manque une chose si utile.