Kazalo:

Umetni izraževalnik čustev rastlin (A.P.E.X.): 7 korakov (s slikami)
Umetni izraževalnik čustev rastlin (A.P.E.X.): 7 korakov (s slikami)

Video: Umetni izraževalnik čustev rastlin (A.P.E.X.): 7 korakov (s slikami)

Video: Umetni izraževalnik čustev rastlin (A.P.E.X.): 7 korakov (s slikami)
Video: Высокая плотность 2022 2024, November
Anonim
Image
Image

Ampak počakaj … Še več je!

1. korak: Uvod

Uvod
Uvod
Uvod
Uvod
Uvod
Uvod

Kaj je APEX?

APEX je pametna (da ne omenjam srčkanih) naprav za nadzor rastlin. Samo priključite ga v katero koli rastlino in prikazal bo raven "sreče" rastline! To je odličen opomnik, da svoje rastline zalivate, če imate slabo navado, da jih pozabite zalivati.

Kako deluje?

Magija. Hecam se! APEX uporablja Arduino, pritrjen na senzor vlage, ki se vstavi v zemljo rastline. Ta senzor bo prebral vsebnost vlage v tleh, nato pa Arduino izračuna, kateri obraz naj prikaže.

Ampak zakaj?

Zakaj ne?

2. korak: Zbiranje delov in orodja

Zbiranje delov in orodja
Zbiranje delov in orodja
Zbiranje delov in orodja
Zbiranje delov in orodja
Zbiranje delov in orodja
Zbiranje delov in orodja

Pojdimo v to! Za ta Instructable boste potrebovali kar nekaj delov in orodij. Na vašo srečo so vsi navedeni spodaj:

V duhu natečaja za mikrokrmilnike so ta projekt v celoti izdelali deli, kupljeni na Amazonu! (ni sponzorirano)

Seznam delov:

  • Arduino Uno
  • 8x8 LED zaslon
  • Kapacitivni senzor na dotik
  • Senzor vlage
  • 9V priključek za baterijo
  • 9V baterija

Seznam orodij:

  • 22 merilna žica
  • Električni trak
  • Odstranjevalci žice
  • Spajkalnik
  • Črpalka za spajkanje

Ko zberete vso potrebno opremo, je čas za nastavitev programske opreme Arduino!

3. korak: Namestitev Arduino IDE

Namestitev Arduino IDE
Namestitev Arduino IDE
Namestitev Arduino IDE
Namestitev Arduino IDE
Namestitev Arduino IDE
Namestitev Arduino IDE

Da bi ta projekt deloval, bomo morali znati programirati Arduino. To zahteva prenos in namestitev Arduino integriranega razvojnega okolja (IDE) v računalnik. To je dokaj preprosta razlaga, vendar vas bom popeljal skozi postopek:

1. Obiščite spletno mesto Arduino

2. Pomaknite se na stran s prenosi (programska oprema> prenosi)

3. Kliknite povezavo za prenos za vaš operacijski sistem

Stranska opomba: Program bo deloval v sistemih Windows, Mac in Linux.

4. Namestitev v sistemu Windows

  • Dvokliknite preneseno datoteko, da jo zaženete
  • Kliknite "Strinjam se", da se strinjate z licenco
  • Sledite preostalim pozivom
  • Program bi moral biti zdaj nameščen!

(Če se izgubite, si oglejte posnetke zaslona)

5. Namestitev na Mac

  • Kliknite na preneseno datoteko
  • Izberite "Odpri"
  • Program se bo samodejno namestil in zagnal!

(Če ste zmedeni, si oglejte posnetke zaslona)

6. To je to

In končali ste! Arduino IDE je zdaj naložen v vaš sistem!

4. korak: Koda

Kodeks
Kodeks
Kodeks
Kodeks
Kodeks
Kodeks

Ta korak se nanaša na kodo. To je dokaj kratek program, zato ga bom obravnaval z vami in razložil, kako deluje. Najprej kratek pregled, nato poglobljena razlaga in na koncu, kako to potisniti na Arduino!

Kratek pregled

Za tiste, ki vas podrobna razlaga kode ne zanima, nudim segment TL; DR! Tu je osnovna razlaga. Arduino vsakih nekaj sekund zajame vrednosti iz senzorja vlage. Ti podatki se nato uporabijo za izračun in prikaz določenega obraza! Na koncu je tudi nekaj kode, ki omogoča, da kapacitivni gumb na dotik vklopi in izklopi zaslon. Precej preprosto kajne?

Nitty Gritty

Ta del vadnice je namenjen tistim, ki jih zelo zanima, kako deluje celoten program, vrstica za vrstico. Zgoraj bom posnel posnetke zaslona, ki vam bodo pomagali razumeti, o čem govorim, in vključil nekatere vrstice kode v ta opis.

Ta program je razdeljen na pet delov:

  1. Vključno z knjižnicami in ustvarjanjem spremenljivk
  2. Funkcija namestitve
  3. Funkcije za izraze obraza
  4. Napišite funkcijo Arduino On Matrix
  5. Funkcija zanke

Vključno z knjižnicami in ustvarjanjem spremenljivk:

Prvi del te kode govori o spremenljivkah in knjižnicah, ki jih bomo uporabljali.

#include "LedControlMS.h"

#define TouchSensor 7 LedControl lc = LedControl (12, 11, 10, 1); int sensorPin = A5; int sensorValue = 0; bool začel = false; bool on = res; logično pritisnjeno = LOW;

Prva vrstica vključuje knjižnico z imenom LedControlMS. Ta knjižnica je potrebna za pošiljanje vrednosti na LED zaslon. Naslednja vrstica je izjava define, ki nastavi pin za senzor na dotik na 7. Nato imamo še tri spremenljivke, ki definirajo zatiče za LED zaslon, senzor vlage in njegovo vrednost. Zadnje tri vrstice so vse logične vrednosti, ki uravnavajo stanje tipke na dotik in zaslona. Po tem imamo vrednosti bajtov:

byte smile [4] = {B00000100, B00110010, B01100100, B01100000}; presenečenje bajtov [4] = {B00001110, B00001010, B01101110, B10010000}; bajt meh [4] = {B00000100, B00100100, B00100100, B00100000}; bajt sad [4] = {B00000010, B01100100, B00110010, B00110000}; bajt mrtev [6] = {B00001010, B00100100, B00101010, B00100000, B01100000, B01101010}; napaka bajtov [8] = {B00111100, B01000010, B10100001, B10010001, B10001001, B10000101, B01000010, B00111100}; // Zlobni obrazi byte esmile [4] = {B00000010, B00101010, B01000100, B01000000}; bajt elaugh [4] = {B00000010, B00101010, B01100100, B01100000}; bajt eplain [4] = {B00000010, B00101010, B00100100, B00100000}; bajtno očesce [4] = {B00000001, B01101001, B01100010, B01100000}; bajt etalk [4] = {B00000001, B00101001, B01100010, B01100000};

Te vrednosti predstavljajo vse obraze APEX. Vsak bajt je niz, ki vsebuje več bitov, ki narekujejo stanje vsakega piksla v dani vrstici. "1" in "0" predstavljata Vklop/Izklop.

Nastavitvena funkcija:

Če se premaknemo na naslednji razdelek, imamo nastavitveno funkcijo.

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

pinMode (Senzor na dotik, VHOD);

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

Ime to zelo dobro razlaga. Tu "nastavimo" senzor in zaslon na dotik. Prvi dve vrstici začneta naš serijski izhod (uporablja se za odpravljanje napak). Tretja vrstica nastavi pin senzorja dotika na vhod, zadnje štiri vrstice pa zaženejo zaslon.

Funkcije za izraze obraza:

To je verjetno najdaljši odsek, vendar je vse zelo preprosto in se ponavlja.

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

void happy () {

lc.setRow (0, 0, nasmeh [0]); lc.setRow (0, 1, nasmeh [1]); lc.setRow (0, 2, nasmeh [2]); lc.setRow (0, 3, nasmeh [3]); lc.setRow (0, 4, nasmeh [3]); lc.setRow (0, 5, nasmeh [2]); lc.setRow (0, 6, nasmeh [1]); lc.setRow (0, 7, nasmeh [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]); }

void presenečen () {

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

void dying () {

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

void crying () {

lc.setRow (0, 0, žalostno [0]); lc.setRow (0, 1, žalostno [1]); lc.setRow (0, 2, žalostno [2]); lc.setRow (0, 3, žalostno [3]); lc.setRow (0, 4, žalostno [3]); lc.setRow (0, 5, žalostno [2]); lc.setRow (0, 6, žalostno [1]); lc.setRow (0, 7, žalostno [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, vek [0]); lc.setRow (0, 1, vek [1]); lc.setRow (0, 2, vek [2]); lc.setRow (0, 3, vek [3]); lc.setRow (0, 4, vek [3]); lc.setRow (0, 5, vek [2]); lc.setRow (0, 6, vek [1]); lc.setRow (0, 7, vek [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]); }

Te funkcije se uporabljajo za opredelitev vsakega izraza obraza z uporabo naših vrednosti bajtov iz prvega razdelka. Vsaka vrstica definira vrednosti položaja x in bajtov, nato pa vrednosti uporabi za ta stolpec. Nekatere funkcije zahtevajo več vrstic, ker se za prikaz vrednosti tega obraza uporablja več vrstic. Vsak obraz je simetričen, zato vrstice ponavljamo.

Funkcija WriteArduinoOnMatrix:

Četrti del se uporablja za izračun in zapis ustreznih obrazov na LED zaslonu. Sestavljen je iz vrste stavkov else if, ki preverijo vrednosti vode in nato nastavi prikaz tako, da pokličejo različne funkcije iz prejšnjega razdelka.

void writeArduinoOnMatrix () {if (sensorValue> 0 && sensorValue 30 && sensorValue 100 && sensorValue 200 && sensorValue 400 && sensorValue 650 && sensorValue <= 800) {presenečen (); } else {broken (); }}

Morda boste opazili, da smo dodali "zlomljene" obraze samo v primeru, da senzor preseže delovna območja. To preprečuje nekatere čudne ničelne napake in nam omogoča boljše vizualno razumevanje dogajanja v kodi.

Funkcija zanke:

Nenazadnje je funkcija zanke. Ta koda naredi točno tisto, kar pove njeno ime, se zanka! Čeprav je v tej funkciji kar nekaj vrstic, je pravzaprav precej preprosto. Koda najprej prebere stanje gumba in preveri, ali je zaslon "Vklopljen". Če ugotovi, da je to res, bo poklical funkcijo WriteArduinoOnMatrix, ki bo nato narisala obraz v APEX. Ker se ta funkcija vrti, bo zaslon posodabljal tako pogosto, kot želimo. To zakasnitev narekuje spremenljivka zakasnitve.

void loop () {if (začelo == true) {zakasnitev = 3000; } // pritisnjen gumb za branje = digitalRead (senzor na dotik);

if (pritisnjeno) {

if (on == true) {lc.clearDisplay (0); vklopljeno = napačno; zamuda (zamik); } else {on = res; zamuda (zamik); }} sensorValue = analogRead (sensorPin); zamuda (zamik); if (on == true) {// Nariši obraze writeArduinoOnMatrix (); }

začelo = res;

}

To je vse, kar obstaja v kodi. Upajmo, da boste zdaj bolje razumeli, kako vse to deluje, in lahko to znanje uporabite za začetek prilagajanja svojemu projektu!

Potiskanje kode na Arduino

Zdaj, ko smo zajeli vso kodo, je čas, da jo potisnemo na Arduino! Na srečo je IDE to zelo preprosto. Vse, kar morate storiti, je, da svoj Arduino priključite v računalnik s kablom USB in nato samo kliknete puščico desno v zgornjem levem kotu IDE. Naj se koda potisne in na dnu programa bi morali videti sporočilo o uspehu, če ste to storili pravilno!

5. korak: Shema vezja

Shema vezja
Shema vezja

Podobno kot koda vezje ni preveč zapleteno. Sestavljen je samo iz treh senzorjev in Arduina, zato vam bom povedal pin-out za vsakega in če potrebujete kakšno drugo pomoč, si oglejte zgornji diagram.

LED zaslon:

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

Senzor vlage:

  • Pozitivno -> 5V
  • Negativno -> GRD
  • Signal -> A5

Kapacitivni senzor na dotik:

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

Ni preveč težko, kajne? Če imate s tem izhodom težave, se prepričajte, da si oglejte spodnji videoposnetek, kjer vas bom seznanil, kako ga povezati.

Korak 6: Združite vse skupaj

Vse skupaj
Vse skupaj
Vse skupaj
Vse skupaj
Vse skupaj
Vse skupaj

Težko je prek besedila razložiti, kako se vse skupaj ujema, zato vsekakor predlagam ogled videoposnetka za ta del. Pravzaprav ne bom natančno razlagal, kako sem sestavil svojega, je preveč težko. Da pa razjasnim stvari, sem spajkal žične povezave in jih ovil okoli hrbtne strani plošče. Nato sem namestil senzorje in z električnim trakom vse skupaj držal. Nazadnje sem ga preizkusil z 9V baterijo in potem, ko sem vedel, da deluje, sem baterijo položil na zadnjo stran in tudi to prilepil. Kot sem že rekel, PREGLEDITE VIDEO ZA TAJ KORAK, ima lep mali spajkalni segment, ki je pospešen in vam bo pomagal pravilno zaviti žice. Če se izgubite, ga začasno ustavite ali predvajajte s polovično hitrostjo.

Čestitamo! Če bi bilo vse uspešno, bi morali imeti zdaj popolnoma delujočo enoto APEX!

Če želite preizkusiti svojo enoto, poiščite zalivano rastlino in jo priključite! Morali bi ugotoviti, da je bodisi vesel ali presenečen, kar pomeni, da bi moralo delovati !!! Odlično delo za dokončanje projekta!

7. korak: Zaključek

Zaključek
Zaključek

In to je celoten Instructable! Hvala za ogled projekta! Spodaj pustite vsa vprašanja in komentarje ter sledite Urban Farming Guys za bolj kul vaje, kot je ta! Radi bi slišali o tem, kako je potekala vaša zgradba APEX, in slike so zelo cenjene! Še enkrat hvala za obisk, lep dan želim!

(Ta Instructable je navdihnil starejši projekt, Plant Emoji!)

P. S. Ta Instructable je vpisan v natečaj za mikrokrmilnike, zato ne pozabite glasovati za nas! Zelo cenimo:)

P. P. S. Pridobimo APEX v reviji Make Magazine! Glasujte tukaj! Hvala:)

Priporočena: