Table des matières:

L'Expresseur d'Émotions Végétales Artificielles (A.P.E.X.) : 7 étapes (avec photos)
L'Expresseur d'Émotions Végétales Artificielles (A.P.E.X.) : 7 étapes (avec photos)

Vidéo: L'Expresseur d'Émotions Végétales Artificielles (A.P.E.X.) : 7 étapes (avec photos)

Vidéo: L'Expresseur d'Émotions Végétales Artificielles (A.P.E.X.) : 7 étapes (avec photos)
Vidéo: Pourquoi il ne faut pas PLEURER dans l'ESPACE ? 2024, Novembre
Anonim
Image
Image

Mais attendez… Il y a plus !

Étape 1: Présentation

introduction
introduction
introduction
introduction
introduction
introduction

Qu'est-ce que l'APEX ?

APEX est un appareil de surveillance des plantes intelligent (pour ne pas dire mignon). Il suffit de le brancher sur n'importe quelle plante et il affichera le niveau de « bonheur » de la plante ! C'est un excellent rappel pour arroser vos plantes si vous avez la mauvaise habitude d'oublier de les arroser.

Comment ça marche?

La magie. Je rigole! APEX utilise un Arduino attaché à un capteur d'humidité, qui est inséré dans le sol de la plante. Ce capteur lira la teneur en humidité du sol, puis l'Arduino calculera quelle face afficher.

Mais pourquoi?

Pourquoi pas?

Étape 2: Rassembler les pièces et les outils

Rassembler les pièces et les outils
Rassembler les pièces et les outils
Rassembler les pièces et les outils
Rassembler les pièces et les outils
Rassembler les pièces et les outils
Rassembler les pièces et les outils

Entrons-y ! Pour ce Instructable, vous aurez besoin de quelques pièces et outils. Heureusement pour vous, ils sont tous énumérés ci-dessous:

Dans l'esprit du Concours Microcontrôleurs, ce projet a été entièrement réalisé avec des pièces achetées sur Amazon ! (non sponsorisé)

Liste des pièces:

  • Arduino Uno
  • Affichage LED 8x8
  • Capteur tactile capacitif
  • Capteur d'humidité
  • Connecteur de batterie 9V
  • Batterie 9V

Liste des outils:

  • Fil de calibre 22
  • Ruban électrique
  • Pince à dénuder
  • Fer à souder
  • Pompe à dessouder

Une fois que vous avez rassemblé tout le matériel nécessaire, il est temps de configurer le logiciel Arduino !

Étape 3: Installation de l'IDE Arduino

Installation de l'IDE Arduino
Installation de l'IDE Arduino
Installation de l'IDE Arduino
Installation de l'IDE Arduino
Installation de l'IDE Arduino
Installation de l'IDE Arduino

Pour que ce projet fonctionne, nous devrons pouvoir programmer l'Arduino. Cela nécessite le téléchargement et l'installation de l'environnement de développement intégré (IDE) Arduino sur votre ordinateur. C'est une explication assez simple, mais je vais vous guider tout au long du processus:

1. Visitez le site Web Arduino

2. Accédez à la page Téléchargements (Logiciel > Téléchargements)

3. Cliquez sur le lien de téléchargement correspondant à votre système d'exploitation

Note latérale: Le programme fonctionnera sur Windows, Mac et Linux.

4. Installation sous Windows

  • Double-cliquez sur le fichier téléchargé pour l'exécuter
  • Cliquez sur « Accepter » pour accepter la licence
  • Suivez le reste des invites
  • Le programme devrait maintenant être installé !

(Assurez-vous de regarder les captures d'écran si vous vous perdez)

5. Installation sur Mac

  • Cliquez sur le fichier téléchargé
  • Choisissez "Ouvrir"
  • Le programme s'installera et s'exécutera automatiquement !

(Assurez-vous de vérifier les captures d'écran si vous êtes confus)

6. C'est tout

Et tu as fini! Vous avez maintenant téléchargé l'IDE Arduino sur votre système !

Étape 4: le code

Le code
Le code
Le code
Le code
Le code
Le code

Cette étape concerne le code. C'est un programme assez court, je vais donc le revoir avec vous et vous expliquer comment il fonctionne. Tout d'abord, un bref aperçu, puis une explication approfondie, et enfin comment le pousser vers l'Arduino !

Le bref aperçu

Pour ceux d'entre vous qui ne sont pas intéressés par l'explication détaillée du code, je propose un segment TL;DR ! Voici l'explication de base. L'Arduino récupère les valeurs du capteur d'humidité toutes les quelques secondes. Ces informations sont ensuite utilisées pour calculer et afficher un certain visage ! Il y a aussi un peu de code à la fin qui permet au bouton tactile capacitif d'allumer et d'éteindre l'écran. Assez simple non?

Le Nitty Gritty

Cette partie du didacticiel est destinée à ceux qui sont très intéressés par le fonctionnement de l'ensemble du programme, ligne par ligne. Je vais fournir des captures d'écran ci-dessus pour vous aider à comprendre de quoi je parle, ainsi que pour inclure certaines des lignes de code dans cette description.

Ce programme est divisé en cinq sections:

  1. Inclusion de bibliothèques et création de variables
  2. La fonction de configuration
  3. Fonctions pour les expressions faciales
  4. La fonction Write Arduino On Matrix
  5. La fonction de boucle

Inclure des bibliothèques et créer des variables:

La première section de ce code concerne les variables et les bibliothèques que nous utiliserons.

#include "LedControlMS.h"

#define TouchSensor 7 LedControl lc=LedControl(12, 11, 10, 1); int capteurPin = A5; int sensorValue = 0; bool démarré = faux; booléen = vrai; booléen enfoncé = LOW;

La première ligne comprend une bibliothèque appelée LedControlMS. Cette bibliothèque est nécessaire pour pouvoir envoyer des valeurs à l'affichage LED. La ligne suivante est une instruction de définition qui définit la broche du capteur tactile sur 7. Après cela, nous avons trois autres variables qui définissent les broches de l'écran LED, le capteur d'humidité et sa valeur. Les trois dernières lignes sont toutes des booléens qui régulent l'état du bouton tactile et de l'affichage. Après cela, nous avons nos valeurs d'octets:

octet smile[4]={B00000100, B00110010, B01100100, B01100000};octet surprise[4]={B00001110, B00001010, B01101110, B10010000}; octet meh[4]={B00000100, B00100100, B00100100, B00100000}; octet triste[4]={B0000010, B01100100, B00110010, B00110000}; octet mort[6]={B00001010, B00100100, B00101010, B00100000, B01100000, B01101010}; erreur d'octet[8]={B00111100, B01000010, B10100001, B10010001, B10001001, B10000101, B01000010, B00111100}; //Evil Faces byte esmile[4]={B00000010, B00101010, B01000100, B01000000}; octet elaugh[4]={B00000010, B001001010, B01100100, B01100000}; octet eplain[4]={B0000010, B00101010, B00100100, B00100000}; octet eyell[4]={B00000001, B01101001, B01100010, B01100000}; octet etalk[4]={B00000001, B00101001, B01100010, B01100000};

Ces valeurs représentent tous les visages de l'APEX. Chaque octet est un tableau qui contient plusieurs bits qui dictent l'état de chaque pixel d'une ligne donnée. "1" et "0" représentent respectivement Marche/Arrêt.

La fonction de configuration:

Passant à la section suivante, nous avons notre fonction de configuration.

void setup() { //MS Serial Output Serial.begin(9600);

pinMode (TouchSensor, INPUT);

//Configuration de la matrice LED lc.shutdown(0, false); lc.setIntensity(0, 4); lc.clearDisplay(0); }

Le nom l'explique très bien. C'est là que nous "configurons" notre capteur tactile et notre affichage. Les deux premières lignes commencent notre sortie série (utilisée pour le débogage). La troisième ligne définit la broche du capteur tactile sur une entrée et les quatre dernières lignes démarrent l'affichage.

Fonctions pour les expressions faciales:

C'est probablement la section la plus longue, mais c'est très simple et répétitif.

void broken() { lc.setRow(0, 0, error[0]); lc.setRow(0, 1, erreur[1]); lc.setRow(0, 2, erreur[2]); lc.setRow(0, 3, erreur[3]); lc.setRow (0, 4, erreur[4]); lc.setRow(0, 5, erreur[5]); lc.setRow(0, 6, erreur[6]); lc.setRow(0, 7, erreur[7]); }

vide heureux () {

lc.setRow(0, 0, smile[0]); lc.setRow(0, 1, sourire[1]); lc.setRow(0, 2, smile[2]); lc.setRow(0, 3, smile[3]); lc.setRow(0, 4, smile[3]); lc.setRow(0, 5, smile[2]); lc.setRow(0, 6, sourire[1]); lc.setRow(0, 7, smile[0]); }

void plain() {

lc.setRow(0, 0, meh[0]); lc.setRow(0, 1, meh[1]); lc.setRow(0, 2, meh[2]); lc.setRow(0, 3, meh[3]); lc.setRow(0, 4, meh[3]); lc.setRow(0, 5, meh[2]); lc.setRow(0, 6, meh[1]); lc.setRow(0, 7, meh[0]); }

vide surpris (){

lc.setRow(0, 0, surprise[0]); lc.setRow(0, 1, surprise[1]); lc.setRow(0, 2, surprise[2]); lc.setRow(0, 3, surprise[3]); lc.setRow(0, 4, surprise[3]); lc.setRow(0, 5, surprise[2]); lc.setRow(0, 6, surprise[1]); lc.setRow(0, 7, surprise[0]); }

nul en train de mourir () {

lc.setRow(0, 0, mort[0]); lc.setRow(0, 1, mort[1]); lc.setRow(0, 2, mort[2]); lc.setRow(0, 3, mort[3]); lc.setRow (0, 4, mort[4]); lc.setRow(0, 5, mort[5]); lc.setRow (0, 6, mort[1]); lc.setRow(0, 7, mort[0]); }

vide pleurer () {

lc.setRow(0, 0, triste[0]); lc.setRow(0, 1, triste[1]); lc.setRow(0, 2, triste[2]); lc.setRow(0, 3, triste[3]); lc.setRow(0, 4, triste[3]); lc.setRow(0, 5, triste[2]); lc.setRow(0, 6, triste[1]); lc.setRow(0, 7, triste[0]); }

annuler le mauvais sourire () {

lc.setRow(0, 0, esmile[0]); lc.setRow(0, 1, esmile[1]); lc.setRow(0, 2, esmile[2]); lc.setRow(0, 3, esmile[3]); lc.setRow(0, 4, esmile[3]); lc.setRow(0, 5, esmile[2]); lc.setRow(0, 6, esmile[1]); lc.setRow(0, 7, esmile[0]); }

void mauvais rire () {

lc.setRow(0, 0, elaugh[0]); lc.setRow(0, 1, elaugh[1]); lc.setRow(0, 2, elaugh[2]); lc.setRow(0, 3, elaugh[3]); lc.setRow(0, 4, elaugh[3]); lc.setRow(0, 5, elaugh[2]); lc.setRow(0, 6, elaugh[1]); lc.setRow(0, 7, elaugh[0]); }

void evilplain() {

lc.setRow(0, 0, eplain[0]); lc.setRow(0, 1, eplain[1]); lc.setRow(0, 2, eplain[2]); lc.setRow(0, 3, eplain[3]); lc.setRow(0, 4, eplain[3]); lc.setRow(0, 5, eplain[2]); lc.setRow(0, 6, eplain[1]); lc.setRow(0, 7, eplain[0]); }

void evilyell() {

lc.setRow(0, 0, eyell[0]); lc.setRow(0, 1, eyell[1]); lc.setRow(0, 2, eyell[2]); lc.setRow(0, 3, eyell[3]); lc.setRow(0, 4, eyell[3]); lc.setRow(0, 5, eyell[2]); lc.setRow(0, 6, eyell[1]); lc.setRow(0, 7, eyell[0]); }

annuler le mauvais discours () {

lc.setRow(0, 0, etalk[0]); lc.setRow(0, 1, etalk[1]); lc.setRow(0, 2, etalk[2]); lc.setRow(0, 3, etalk[3]); lc.setRow(0, 4, etalk[3]); lc.setRow(0, 5, etalk[2]); lc.setRow(0, 6, etalk[1]); lc.setRow(0, 7, etalk[0]); }

Ces fonctions sont utilisées pour définir chaque expression faciale en utilisant nos valeurs d'octets de la première section. Chaque ligne définit une position x et des valeurs d'octet, puis applique les valeurs à cette colonne. Certaines fonctions nécessitent plus de lignes car il y a plus de lignes utilisées pour afficher les valeurs de ce visage. Chaque face est symétrique, c'est pourquoi nous répétons les lignes.

La fonction WriteArduinoOnMatrix:

La quatrième section est utilisée pour calculer et écrire les visages appropriés sur l'écran LED. Il se compose d'une série d'instructions else if qui vérifient les valeurs de l'eau, puis définissent l'affichage en appelant différentes fonctions de la section précédente.

void writeArduinoOnMatrix() { if(sensorValue > 0 && sensorValue 30 && sensorValue 100 && sensorValue 200 && sensorValue 400 && sensorValue 650 && sensorValue <= 800) { surpris(); } else { cassé(); } }

Vous remarquerez peut-être que nous avons ajouté des visages "cassés" au cas où le capteur sortirait des plages de travail. Cela empêche certaines erreurs null étranges qui se produisent et nous donne une meilleure compréhension visuelle de ce qui se passe dans le code.

La fonction boucle:

Le dernier mais non le moindre est la fonction de boucle. Ce code fait exactement ce que son nom dit, il boucle ! Bien qu'il y ait pas mal de lignes dans cette fonction, c'est en fait assez simple. Le code lit d'abord l'état du bouton et voit si l'affichage est « On ». S'il constate que cela est vrai, il appellera alors la fonction WriteArduinoOnMatrix, qui dessinera ensuite un visage sur APEX. Parce que cette fonction boucle, elle mettra à jour l'affichage aussi souvent que nous le souhaitons. Ce délai est dicté par la variable delaytime.

void loop() { if (started == true){ delaytime = 3000; } //Bouton de lecture enfoncé = digitalRead(TouchSensor);

si (appuyé) {

if (on == true) { lc.clearDisplay(0); activé = faux; retard (délai); } else { activé = vrai; retard (délai); } } sensorValue = analogRead(sensorPin); retard (délai); if (on == true) { // Dessiner des faces writeArduinoOnMatrix(); }

commencé = vrai;

}

C'est tout ce qu'il y a dans le code. J'espère que vous comprenez mieux maintenant comment tout cela fonctionne et que vous pouvez utiliser ces connaissances pour commencer à le personnaliser en fonction de votre projet !

Pousser le code vers l'Arduino

Maintenant que nous avons couvert tout le code, il est temps de le pousser vers l'Arduino ! Heureusement, l'IDE rend cela très simple. Tout ce que vous avez à faire est de brancher votre Arduino sur votre ordinateur avec un câble USB, puis de cliquer simplement sur la flèche droite en haut à gauche de l'IDE. Laissez le code pousser, et vous devriez voir un message de réussite au bas du programme si vous l'avez bien fait !

Étape 5: schéma de circuit

Schéma
Schéma

De la même manière que le code, le schéma de circuit n'est pas trop compliqué. Il ne se compose que de trois capteurs et de l'Arduino, je vais donc vous dire les brochages pour chacun, et si vous avez besoin d'une autre aide, reportez-vous simplement au schéma ci-dessus.

L'affichage LED:

  • VCC -> 5V
  • GRD -> GRD
  • DIN -> Broche 12
  • CS -> Broche 10
  • CLK -> Broche 11

Le capteur d'humidité:

  • Positif -> 5V
  • Négatif -> GRD
  • Signal -> A5

Le capteur tactile capacitif:

  • VCC -> 5V
  • GRD -> GRD
  • SIG -> 7

Pas trop difficile, non ? Si vous rencontrez des problèmes avec ce brochage, assurez-vous de vous référer à la vidéo ci-dessous où je vous explique comment le câbler.

Étape 6: Tout assembler

Mettre tous ensemble
Mettre tous ensemble
Mettre tous ensemble
Mettre tous ensemble
Mettre tous ensemble
Mettre tous ensemble

Il est difficile d'expliquer sur le texte comment tout cela s'emboîte, donc je suggère certainement de regarder la vidéo pour cette partie. En fait, je ne vais pas expliquer exactement comment j'ai assemblé le mien, c'est beaucoup trop difficile. Mais pour expliquer vaguement les choses, j'ai soudé les connexions des fils et les ai enroulées autour de l'arrière de la carte. Ensuite, j'ai positionné les capteurs et utilisé du ruban électrique pour maintenir le tout ensemble. Enfin, je l'ai testé avec la batterie 9V, puis une fois que j'ai su que cela fonctionnait, j'ai placé la batterie à l'arrière et l'ai également collée. Comme je l'ai déjà dit, VÉRIFIEZ LA VIDÉO DE CETTE ÉTAPE, elle a un joli petit segment de soudure qui est accéléré et vous aidera à enrouler correctement les fils. N'hésitez pas à le mettre en pause ou à le jouer à mi-vitesse si vous vous perdez.

Toutes nos félicitations! Si tout s'est bien passé, vous devriez maintenant avoir une unité APEX entièrement fonctionnelle !

Pour tester votre appareil, trouvez une plante arrosée et branchez-la ! Vous devriez constater qu'il est soit heureux, soit surpris et cela signifie qu'il devrait fonctionner !!! Bravo pour la réalisation du projet !

Étape 7: Conclusion

Conclusion
Conclusion

Et c'est tout Instructable ! Merci d'avoir consulté le projet ! Laissez vos questions et commentaires ci-dessous et assurez-vous de suivre les Urban Farming Guys pour des tutoriels plus intéressants comme celui-ci! Nous aimerions savoir comment s'est déroulée votre construction APEX, et les photos sont très appréciées ! Merci encore d'être passé, bonne journée !

(Ce Instructable a été inspiré par un projet plus ancien, le Plant Emoji !)

P. S. Ce Instructable est inscrit au concours de microcontrôleurs, alors n'oubliez pas de voter pour nous ! Nous l'apprécions grandement:)

P. P. S. Entrons dans l'APEX dans Make Magazine ! Votez ici ! Merci:)

Conseillé: