The Artificial Plant Emotion Expressor (A.P.E.X.): 7 βήματα (με εικόνες)
The Artificial Plant Emotion Expressor (A.P.E.X.): 7 βήματα (με εικόνες)
Anonim
Image
Image

Αλλά περιμένετε… Υπάρχουν κι άλλα!

Βήμα 1: Εισαγωγή

Εισαγωγή
Εισαγωγή
Εισαγωγή
Εισαγωγή
Εισαγωγή
Εισαγωγή

Τι είναι το APEX;

Το APEX είναι μια έξυπνη (για να μην αναφέρουμε χαριτωμένη) συσκευή παρακολούθησης φυτών. Απλώς συνδέστε το σε οποιοδήποτε φυτό και θα εμφανίσει το επίπεδο "ευτυχίας" του φυτού! Αυτή είναι μια μεγάλη υπενθύμιση για να ποτίζετε τα φυτά σας εάν έχετε μια κακή συνήθεια να ξεχνάτε να τα ποτίζετε.

Πώς λειτουργεί;

Μαγεία. Απλά αστειεύομαι! Το APEX χρησιμοποιεί ένα Arduino προσαρτημένο σε έναν αισθητήρα υγρασίας, το οποίο εισάγεται στο χώμα του φυτού. Αυτός ο αισθητήρας θα διαβάσει την περιεκτικότητα σε υγρασία του εδάφους και στη συνέχεια το Arduino υπολογίζει τι πρόσωπο θα εμφανιστεί.

Μα γιατί?

Γιατί όχι?

Βήμα 2: Συγκέντρωση εξαρτημάτων και εργαλείων

Συγκέντρωση εξαρτημάτων και εργαλείων
Συγκέντρωση εξαρτημάτων και εργαλείων
Συγκέντρωση εξαρτημάτων και εργαλείων
Συγκέντρωση εξαρτημάτων και εργαλείων
Συγκέντρωση εξαρτημάτων και εργαλείων
Συγκέντρωση εξαρτημάτων και εργαλείων

Ας μπούμε σε αυτό! Για αυτό το Instructable, θα χρειαστείτε αρκετά μέρη και εργαλεία. Ευτυχώς για εσάς, αναφέρονται όλες παρακάτω:

Στο πνεύμα του Διαγωνισμού Μικροελεγκτών, αυτό το έργο έγινε εντελώς από ανταλλακτικά που αγοράστηκαν στο Amazon! (δεν χορηγείται)

Λίστα μερών:

  • Arduino Uno
  • Οθόνη LED 8x8
  • Χωρητικός αισθητήρας αφής
  • Αισθητήρας υγρασίας
  • Συνδετήρας μπαταρίας 9V
  • Μπαταρία 9V

Λίστα εργαλείων:

  • 22 Gauge Wire
  • Ηλεκτρική ταινία
  • Συρματόσχοινα
  • Συγκολλητικό σίδερο
  • Αντλία αποκόλλησης

Μόλις συλλέξετε όλο τον απαραίτητο εξοπλισμό, ήρθε η ώρα να ρυθμίσετε το λογισμικό Arduino!

Βήμα 3: Εγκατάσταση του Arduino IDE

Εγκατάσταση του Arduino IDE
Εγκατάσταση του Arduino IDE
Εγκατάσταση του Arduino IDE
Εγκατάσταση του Arduino IDE
Εγκατάσταση του Arduino IDE
Εγκατάσταση του Arduino IDE

Για να λειτουργήσει αυτό το έργο, θα πρέπει να είμαστε σε θέση να προγραμματίσουμε το Arduino. Αυτό απαιτεί λήψη και εγκατάσταση του Arduino Integrated Development Environment (IDE) στον υπολογιστή σας. Είναι μια αρκετά απλή εξήγηση, αλλά θα σας καθοδηγήσω στη διαδικασία:

1. Επισκεφτείτε τον ιστότοπο Arduino

2. Μεταβείτε στη σελίδα λήψεων (Λογισμικό> Λήψεις)

3. Κάντε κλικ στο σύνδεσμο Λήψη για το λειτουργικό σας σύστημα

Πλευρική σημείωση: Το πρόγραμμα θα λειτουργήσει σε Windows, Mac και Linux.

4. Εγκατάσταση στα Windows

  • Κάντε διπλό κλικ στο ληφθέν αρχείο για να το εκτελέσετε
  • Κάντε κλικ στο "Συμφωνώ" για να συμφωνήσετε με την Άδεια
  • Ακολουθήστε τις υπόλοιπες προτροπές
  • Το πρόγραμμα πρέπει τώρα να εγκατασταθεί!

(Φροντίστε να δείτε τα στιγμιότυπα οθόνης εάν χαθείτε)

5. Εγκατάσταση σε Mac

  • Κάντε κλικ στο αρχείο που κατεβάσατε
  • Επιλέξτε "Άνοιγμα"
  • Το πρόγραμμα θα εγκατασταθεί και θα τρέξει αυτόματα!

(Βεβαιωθείτε ότι έχετε δει τα στιγμιότυπα οθόνης εάν μπερδευτείτε)

6. Αυτό είναι

Και τελειώσατε! Τώρα έχετε κατεβάσει το Arduino IDE στο σύστημά σας!

Βήμα 4: Ο κώδικας

Ο κώδικας
Ο κώδικας
Ο κώδικας
Ο κώδικας
Ο κώδικας
Ο κώδικας

Αυτό το βήμα αφορά τον κώδικα. Είναι ένα αρκετά σύντομο πρόγραμμα, οπότε θα το συζητήσω μαζί σας και θα σας εξηγήσω πώς λειτουργεί. Πρώτα, μια σύντομη επισκόπηση, στη συνέχεια μια σε βάθος εξήγηση, και τέλος πώς να το σπρώξετε στο Arduino!

Η Σύντομη Επισκόπηση

Για εσάς που δεν ενδιαφέρεστε για τη λεπτομερή εξήγηση του κώδικα, παρέχω ένα τμήμα TL; DR! Εδώ είναι η βασική εξήγηση. Το Arduino συλλαμβάνει τιμές από τον αισθητήρα υγρασίας κάθε λίγα δευτερόλεπτα. Αυτές οι πληροφορίες χρησιμοποιούνται στη συνέχεια για τον υπολογισμό και την εμφάνιση ενός συγκεκριμένου προσώπου! Υπάρχει επίσης λίγος κώδικας στο τέλος που αφήνει το χωρητικό κουμπί αφής να ενεργοποιήσει και να απενεργοποιήσει την οθόνη. Αρκετά απλό σωστά;

Το Nitty Gritty

Αυτό το τμήμα του σεμιναρίου είναι για εκείνους που ενδιαφέρονται πολύ για το πώς λειτουργεί ολόκληρο το πρόγραμμα, γραμμή προς γραμμή. Θα σας δώσω παραπάνω στιγμιότυπα οθόνης για να σας βοηθήσω να καταλάβετε για τι πράγμα μιλάω, καθώς και να συμπεριλάβω μερικές από τις γραμμές κώδικα σε αυτήν την περιγραφή.

Το πρόγραμμα αυτό χωρίζεται σε πέντε ενότητες:

  1. Συμπεριλαμβανομένων των Βιβλιοθηκών και της Δημιουργίας Μεταβλητών
  2. Η λειτουργία ρύθμισης
  3. Λειτουργίες για εκφράσεις προσώπου
  4. Λειτουργία εγγραφής Arduino On Matrix
  5. Η συνάρτηση βρόχου

Συμπεριλαμβανομένων των Βιβλιοθηκών και της Δημιουργίας Μεταβλητών:

Το πρώτο τμήμα αυτού του κώδικα αφορά όλες τις μεταβλητές και τις βιβλιοθήκες που θα χρησιμοποιήσουμε.

#include "LedControlMS.h"

#define TouchSensor 7 LedControl lc = LedControl (12, 11, 10, 1); int sensorPin = A5; int sensorValue = 0; bool start = false? bool on = true? boolean pressed = LOW?

Η πρώτη γραμμή περιλαμβάνει μια βιβλιοθήκη που ονομάζεται LedControlMS. Αυτή η βιβλιοθήκη απαιτείται για να μπορεί να στέλνει τιμές στην οθόνη LED. Η επόμενη γραμμή είναι μια δήλωση ορισμού που ορίζει την καρφίτσα για τον αισθητήρα αφής στο 7. Στη συνέχεια έχουμε τρεις ακόμη μεταβλητές που καθορίζουν τις ακίδες για την οθόνη LED, τον αισθητήρα υγρασίας και την τιμή της. Οι τρεις τελευταίες γραμμές είναι όλες booleans που ρυθμίζουν την κατάσταση του κουμπιού αφής και της οθόνης. Μετά από αυτό, έχουμε τις τιμές byte:

byte smile [4] = {B00000100, B00110010, B01100100, B01100000} · byte έκπληξη [4] = {B00001110, B00001010, B01101110, B10010000}; byte meh [4] = {B00000100, B00100100, B00100100, B00100000}; byte sad [4] = {B00000010, B01100100, B00110010, B00110000}; byte dead [6] = {B00001010, B00100100, B00101010, B00100000, B01100000, B01101010}; byte error [8] = {B00111100, B01000010, B10100001, B10010001, B10001001, B10000101, B01000010, B00111100}; // Evil Faces byte esmile [4] = {B00000010, B00101010, B01000100, B01000000}; byte elaugh [4] = {B00000010, B00101010, B01100100, B01100000}; byte eplain [4] = {B00000010, B00101010, B00100100, B00100000}; byte eyell [4] = {B00000001, B01101001, B01100010, B01100000}; byte etalk [4] = {B00000001, B00101001, B01100010, B01100000};

Αυτές οι τιμές αντιπροσωπεύουν όλες τις όψεις του APEX. Κάθε byte είναι ένας πίνακας που περιέχει πολλά bits που υπαγορεύουν την κατάσταση κάθε pixel σε μια δεδομένη σειρά. Το "1" και το "0" αντιπροσωπεύουν On/Off αντίστοιχα.

Η συνάρτηση εγκατάστασης:

Προχωρώντας στην επόμενη ενότητα, έχουμε τη λειτουργία ρύθμισης.

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

pinMode (Αισθητήρας αφής, ΕΙΣΟΔΟΣ);

// LED Matrix Setup lc.shutdown (0, false); lc.setIntensity (0, 4); lc.clearDisplay (0); }

Το όνομα το εξηγεί πολύ καλά. Εδώ "ρυθμίζουμε" τον αισθητήρα αφής και την οθόνη μας. Οι δύο πρώτες γραμμές ξεκινούν τη σειριακή μας έξοδο (χρησιμοποιείται για εντοπισμό σφαλμάτων). Η τρίτη γραμμή ορίζει τον πείρο του αισθητήρα αφής σε είσοδο και οι τέσσερις τελευταίες γραμμές ξεκινούν την οθόνη.

Λειτουργίες για εκφράσεις προσώπου:

Αυτό είναι ίσως το μακρύτερο τμήμα από όλα, αλλά είναι πολύ απλό και επαναλαμβανόμενο.

κενό σπασμένο () {lc.setRow (0, 0, σφάλμα [0]); lc.setRow (0, 1, σφάλμα [1]); lc.setRow (0, 2, σφάλμα [2]); lc.setRow (0, 3, σφάλμα [3]); lc.setRow (0, 4, σφάλμα [4]); lc.setRow (0, 5, σφάλμα [5]); lc.setRow (0, 6, σφάλμα [6]); lc.setRow (0, 7, σφάλμα [7]); }

void happy () {

lc.setRow (0, 0, χαμόγελο [0]); lc.setRow (0, 1, χαμόγελο [1]); lc.setRow (0, 2, χαμόγελο [2]); lc.setRow (0, 3, χαμόγελο [3]); lc.setRow (0, 4, χαμόγελο [3]); lc.setRow (0, 5, χαμόγελο [2]); lc.setRow (0, 6, χαμόγελο [1]); lc.setRow (0, 7, χαμόγελο [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]); }

κενό έκπληκτος () {

lc.setRow (0, 0, έκπληξη [0]); lc.setRow (0, 1, έκπληξη [1]); lc.setRow (0, 2, έκπληξη [2]); lc.setRow (0, 3, έκπληξη [3]); lc.setRow (0, 4, έκπληξη [3]); lc.setRow (0, 5, έκπληξη [2]); lc.setRow (0, 6, έκπληξη [1]); lc.setRow (0, 7, έκπληξη [0]); }

void dieing () {

lc.setRow (0, 0, dead [0]); lc.setRow (0, 1, νεκρό [1]); lc.setRow (0, 2, νεκρά [2]); lc.setRow (0, 3, νεκρά [3]); lc.setRow (0, 4, νεκρά [4]); lc.setRow (0, 5, νεκρά [5]); lc.setRow (0, 6, νεκρά [1]); lc.setRow (0, 7, νεκρά [0]); }

άδειο κλάμα () {

lc.setRow (0, 0, λυπηρό [0]); lc.setRow (0, 1, θλιβερό [1]); lc.setRow (0, 2, λυπηρό [2]); lc.setRow (0, 3, λυπηρό [3]); lc.setRow (0, 4, θλιβερό [3]); lc.setRow (0, 5, λυπηρό [2]); lc.setRow (0, 6, λυπηρό [1]); lc.setRow (0, 7, θλιβερό [0]); }

void evilsmile () {

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 evillaugh () {

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]); }

void eviltalk () {

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]); }

Αυτές οι λειτουργίες χρησιμοποιούνται για τον καθορισμό κάθε έκφρασης του προσώπου χρησιμοποιώντας τις τιμές των byte από την πρώτη ενότητα. Κάθε γραμμή ορίζει μια θέση x και τιμές byte και στη συνέχεια εφαρμόζει τις τιμές σε αυτήν τη στήλη. Ορισμένες λειτουργίες απαιτούν περισσότερες γραμμές επειδή χρησιμοποιούνται περισσότερες γραμμές για την εμφάνιση των τιμών αυτού του προσώπου. Κάθε όψη είναι συμμετρική, γι 'αυτό επαναλαμβάνουμε τις γραμμές.

Η λειτουργία WriteArduinoOnMatrix:

Το τέταρτο τμήμα χρησιμοποιείται για τον υπολογισμό και την εγγραφή των κατάλληλων όψεων στην οθόνη LED. Αποτελείται από μια σειρά άλλων if προτάσεων που ελέγχουν τις τιμές νερού και στη συνέχεια ρυθμίζουν την οθόνη καλώντας διαφορετικές λειτουργίες από το προηγούμενο τμήμα.

void writeArduinoOnMatrix () {if (sensorValue> 0 && sensorValue 30 && sensorValue 100 && sensorValue 200 && sensorValue 400 && sensorValue 650 && sensorValue <= 800) {habit (); } else {σπασμένο (); }}

Μπορεί να παρατηρήσετε ότι προσθέσαμε "σπασμένα" πρόσωπα σε περίπτωση που ο αισθητήρας βγει εκτός των ορίων εργασίας. Αυτό αποτρέπει ορισμένα περίεργα μηδενικά σφάλματα που συμβαίνουν και μας δίνει μια καλύτερη οπτική κατανόηση του τι συμβαίνει στον κώδικα.

Η συνάρτηση βρόχου:

Τελευταίο αλλά όχι λιγότερο σημαντικό είναι η συνάρτηση βρόχου. Αυτός ο κώδικας κάνει ακριβώς αυτό που λέει το όνομά του, κάνει βρόχους! Αν και υπάρχουν αρκετές γραμμές σε αυτήν τη συνάρτηση, είναι στην πραγματικότητα αρκετά απλή. Ο κώδικας διαβάζει πρώτα την κατάσταση του κουμπιού και βλέπει εάν η οθόνη είναι "On". Εάν διαπιστώσει ότι αυτό είναι αλήθεια, θα καλέσει στη συνέχεια τη λειτουργία WriteArduinoOnMatrix, η οποία στη συνέχεια θα σχεδιάσει ένα πρόσωπο στο APEX. Επειδή αυτή η λειτουργία κάνει βρόχους, θα ενημερώνει την οθόνη όσο συχνά θέλουμε. Αυτή η καθυστέρηση υπαγορεύεται από τη μεταβλητή καθυστέρησης.

void loop () {if (start == true) {delaytime = 3000; } // Κουμπί ανάγνωσης πατημένο = digitalRead (TouchSensor);

αν (πατημένο) {

εάν (σε == true) {lc.clearDisplay (0); on = false? καθυστέρηση (καθυστέρηση) } else {on = true; καθυστέρηση (καθυστέρηση) }} sensorValue = analogRead (sensorPin); καθυστέρηση (καθυστέρηση) if (on == true) {// Draw Faces writeArduinoOnMatrix (); }

ξεκίνησε = αλήθεια?

}

Αυτό είναι το μόνο που υπάρχει στον κώδικα. Ας ελπίσουμε ότι τώρα έχετε κατανοήσει καλύτερα πώς λειτουργεί όλο αυτό και μπορείτε να χρησιμοποιήσετε αυτήν τη γνώση για να αρχίσετε να την προσαρμόζετε στο έργο σας!

Προώθηση του Κώδικα στο Arduino

Τώρα που καλύψαμε όλο τον κώδικα, ήρθε η ώρα να τον σπρώξουμε στο Arduino! Ευτυχώς, το IDE το κάνει πολύ απλό. Το μόνο που έχετε να κάνετε είναι να συνδέσετε το Arduino στον υπολογιστή σας με καλώδιο USB και, στη συνέχεια, απλά κάντε κλικ στο δεξί βέλος στο επάνω αριστερό μέρος του IDE. Αφήστε τον κώδικα να σπρώξει και θα δείτε ένα μήνυμα επιτυχίας στο κάτω μέρος του προγράμματος αν το κάνατε σωστά!

Βήμα 5: Διάγραμμα κυκλώματος

Διάγραμμα κυκλώματος
Διάγραμμα κυκλώματος

Ομοίως με τον κώδικα, το διάγραμμα κυκλώματος δεν είναι πολύ περίπλοκο. Αποτελείται μόνο από τρεις αισθητήρες και το Arduino, οπότε θα σας πω τις εξαγωγές για τον καθένα και εάν χρειάζεστε οποιαδήποτε άλλη βοήθεια, απλώς ανατρέξτε στο παραπάνω διάγραμμα.

Η οθόνη LED:

  • VCC -> 5V
  • GRD -> GRD
  • DIN -> Pin 12
  • CS -> Καρφίτσα 10
  • CLK -> Καρφίτσα 11

Αισθητήρας υγρασίας:

  • Θετικό -> 5V
  • Αρνητικό -> GRD
  • Σήμα -> A5

Ο χωρητικός αισθητήρας αφής:

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

Δεν είναι πολύ δύσκολο, σωστά; Εάν αντιμετωπίζετε κάποιο πρόβλημα με αυτό το pin-out, φροντίστε να ανατρέξετε στο παρακάτω βίντεο όπου θα σας καθοδηγήσω πώς να το συνδέσετε.

Βήμα 6: Το βάζουμε όλα μαζί

Το βάζουμε όλα μαζί
Το βάζουμε όλα μαζί
Το βάζουμε όλα μαζί
Το βάζουμε όλα μαζί
Το βάζουμε όλα μαζί
Το βάζουμε όλα μαζί

Είναι δύσκολο να εξηγήσω μέσω κειμένου πώς ταιριάζει όλα μαζί, οπότε σίγουρα θα πρότεινα να δείτε το βίντεο για αυτό το μέρος. Στην πραγματικότητα δεν πρόκειται να εξηγήσω πώς ακριβώς συνθέτω το δικό μου, είναι πάρα πολύ δύσκολο. Αλλά για να εξηγήσω τα πράγματα αόριστα, κόλλησα στις συνδέσεις σύρματος και τις τύλιξα στο πίσω μέρος του πίνακα. Στη συνέχεια, τοποθέτησα τους αισθητήρες και χρησιμοποίησα ηλεκτρική ταινία για να τα κρατήσω όλα μαζί. Τέλος, το δοκίμασα με την μπαταρία 9V και, στη συνέχεια, μόλις ήξερα ότι λειτουργεί, τοποθέτησα την μπαταρία στο πίσω μέρος και την έβαλα επίσης. Όπως είπα και πριν, ΔΙΑΒΑΣΤΕ ΤΟ ΒΙΝΤΕΟ ΓΙΑ ΑΥΤΟ ΤΟ ΒΗΜΑ, έχει ένα ωραίο μικρό τμήμα συγκόλλησης που επιταχύνεται και θα σας βοηθήσει να τυλίξετε σωστά τα καλώδια. Μη διστάσετε να το διακόψετε ή να το παίξετε με τη μισή ταχύτητα εάν χαθείτε.

Συγχαρητήρια! Εάν όλα πήγαν με επιτυχία, θα πρέπει τώρα να έχετε μια πλήρως λειτουργική μονάδα APEX!

Για να δοκιμάσετε τη μονάδα σας, βρείτε ένα ποτισμένο φυτό και συνδέστε το! Θα πρέπει να διαπιστώσετε ότι είναι είτε χαρούμενο είτε έκπληκτο και αυτό σημαίνει ότι πρέπει να λειτουργεί !!! Εξαιρετική δουλειά για την ολοκλήρωση του έργου!

Βήμα 7: Συμπέρασμα

συμπέρασμα
συμπέρασμα

Και αυτό είναι ολόκληρο το Instructable! Ευχαριστούμε που ελέγξατε το έργο! Αφήστε οποιεσδήποτε ερωτήσεις και σχόλια παρακάτω και βεβαιωθείτε ότι ακολουθείτε τους Urban Farming Guys για περισσότερα δροσερά μαθήματα όπως αυτό! Θα θέλαμε να μάθουμε πώς πήγε η κατασκευή του APEX και οι φωτογραφίες εκτιμώνται πολύ! Ευχαριστώ και πάλι για την επίσκεψή σας, καλή μέρα!

(Αυτό το Instructable ήταν εμπνευσμένο από ένα παλαιότερο έργο, το Plant Emoji!)

ΥΣΤΕΡΟΓΡΑΦΟ. Αυτό το Instructable συμμετέχει στο διαγωνισμό Microcontrollers, οπότε μην ξεχάσετε να μας ψηφίσετε! Το εκτιμούμε πολύ:)

Π. Π. Σ. Ας πάρουμε το APEX στο Make Magazine! Vηφίστε εδώ! Ευχαριστώ:)

Συνιστάται: