Përmbajtje:

Shprehësi i Emocionit të Bimëve Artificiale (A.P.E.X.): 7 hapa (me fotografi)
Shprehësi i Emocionit të Bimëve Artificiale (A.P.E.X.): 7 hapa (me fotografi)

Video: Shprehësi i Emocionit të Bimëve Artificiale (A.P.E.X.): 7 hapa (me fotografi)

Video: Shprehësi i Emocionit të Bimëve Artificiale (A.P.E.X.): 7 hapa (me fotografi)
Video: Si të sjelleni me njerëz të pavetëdishëm. 2024, Nëntor
Anonim
Image
Image

Por prisni … Ka më shumë!

Hapi 1: Hyrje

Prezantimi
Prezantimi
Prezantimi
Prezantimi
Prezantimi
Prezantimi

Çfarë është APEX?

APEX është një pajisje e zgjuar (për të mos përmendur bukur) për monitorimin e bimëve. Thjesht futeni atë në çdo bimë dhe do të shfaqë nivelin e "lumturisë" së bimës! Ky është një kujtesë e shkëlqyeshme për të ujitur bimët tuaja nëse keni një zakon të keq të harroni të ujisni ato.

Si punon?

Magjike. Vetëm shaka! APEX përdor një Arduino të lidhur me një sensor lagështie, i cili futet në tokën e uzinës. Ky sensor do të lexojë përmbajtjen e lagështirës së tokës, dhe pastaj Arduino llogarit se çfarë fytyre të shfaqet.

Por pse?

Pse jo?

Hapi 2: Mbledhja e Pjesëve dhe Mjeteve

Mbledhja e Pjesëve dhe Mjeteve
Mbledhja e Pjesëve dhe Mjeteve
Mbledhja e Pjesëve dhe Mjeteve
Mbledhja e Pjesëve dhe Mjeteve
Mbledhja e Pjesëve dhe Mjeteve
Mbledhja e Pjesëve dhe Mjeteve

Le të futemi në të! Për këtë Udhëzues, do t'ju duhen mjaft pjesë dhe mjete. Për fatin tuaj të mirë, të gjitha ato janë të listuara më poshtë:

Në frymën e Konkursit të Mikrokontrolluesve, ky projekt u bë plotësisht nga pjesët e blera në Amazon! (jo i sponsorizuar)

Lista e Pjesëve:

  • Arduino Uno
  • Ekran LED 8x8
  • Sensori me prekje me kapacitet
  • Sensor lagështie
  • Lidhës baterie 9V
  • Bateri 9V

Lista e mjeteve:

  • 22 Tela matës
  • Shirit Elektrik
  • Zhveshëset me tela
  • Makine per ngjitjen e metalit
  • Pompë e shkrirjes

Pasi të keni mbledhur të gjitha pajisjet e nevojshme, është koha për të konfiguruar programin Arduino!

Hapi 3: Instalimi i Arduino IDE

Instalimi i Arduino IDE
Instalimi i Arduino IDE
Instalimi i Arduino IDE
Instalimi i Arduino IDE
Instalimi i Arduino IDE
Instalimi i Arduino IDE

Që ky projekt të funksionojë, do të na duhet të jemi në gjendje të programojmë Arduino. Kjo kërkon shkarkimin dhe instalimin e Arduino Integrated Development Environment (IDE) në kompjuterin tuaj. Ashtë një shpjegim mjaft i thjeshtë, por unë do t'ju tregoj përmes procesit:

1. Vizitoni Uebfaqen e Arduino

2. Shkoni te Faqja e Shkarkimeve (Softuer> Shkarkime)

3. Klikoni në Lidhjen e Shkarkimit për Sistemin tuaj Operativ

Shënim anësor: Programi do të funksionojë në Windows, Mac dhe Linux.

4. Instalimi në Windows

  • Klikoni dy herë mbi skedarin e shkarkuar për ta ekzekutuar
  • Klikoni "Pajtohem" për t'u pajtuar me Licencën
  • Ndiqni pjesën tjetër të kërkesave
  • Programi tani duhet të instalohet!

(Sigurohuni që të shikoni pamjet e ekranit nëse humbni)

5. Instalimi në Mac

  • Klikoni në skedarin e shkarkuar
  • Zgjidhni "Hap"
  • Programi do të instalohet dhe ekzekutohet automatikisht!

(Sigurohuni që të shikoni pamjet e ekranit nëse ngatërroheni)

6. Kjo është ajo

Dhe mbaruat! Tani keni Arduino IDE të shkarkuar në sistemin tuaj!

Hapi 4: Kodi

Kodi
Kodi
Kodi
Kodi
Kodi
Kodi

Ky hap ka të bëjë me kodin. Shtë një program mjaft i shkurtër, kështu që unë do ta shqyrtoj me ju dhe do t'ju shpjegoj se si funksionon. Së pari, një përmbledhje e shkurtër, pastaj një shpjegim i thelluar, dhe më në fund si ta shtyni atë në Arduino!

Vështrim i shkurtër

Për ata prej jush që nuk janë të interesuar në shpjegimin e hollësishëm të kodit, unë po ofroj një segment TL; DR! Këtu është shpjegimi bazë. Arduino kap vlerat nga sensori i lagështisë çdo disa sekonda. Ky informacion përdoret më pas për të llogaritur dhe shfaqur një fytyrë të caktuar! Ekziston edhe një kod në fund, i cili le të ndezë dhe fikë ekranin butonin kapacitiv të prekjes. Mjaft e thjeshtë apo jo?

The Nitty Gritty

Kjo pjesë e mësimit është për ata që janë shumë të interesuar se si funksionon i gjithë programi, rresht pas rreshti. Unë do të ofroj pamje të ekranit më lart për t'ju ndihmuar të kuptoni se për çfarë po flas, si dhe të përfshijë disa nga linjat e kodit në këtë përshkrim.

Ky program është i ndarë në pesë pjesë:

  1. Përfshirë Bibliotekat dhe Krijimin e Variablave
  2. Funksioni i konfigurimit
  3. Funksionet për shprehjet e fytyrës
  4. Funksioni Shkruaj Arduino mbi Matricën
  5. Funksioni i lakut

Përfshirë Bibliotekat dhe Krijimin e Variablave:

Seksioni i parë i këtij kodi ka të bëjë me variablat dhe bibliotekat që do të përdorim.

#përfshi "LedControlMS.h"

#define TouchSensor 7 LedControl lc = LedControl (12, 11, 10, 1); int sensorPin = A5; int sensorVlera = 0; bool filluar = false; bool on = e vërtetë; boolean presion = LOW;

Linja e parë përfshin një bibliotekë të quajtur LedControlMS. Kjo bibliotekë kërkohet që të jetë në gjendje të dërgojë vlera në ekranin LED. Linja tjetër është një deklaratë e përcaktuar që vendos pinin për sensorin e prekjes në 7. Pas kësaj ne kemi tre ndryshore të tjera që përcaktojnë kunjat për ekranin LED, sensorin e lagështisë dhe vlerën e tij. Tre rreshtat e fundit janë të gjitha booleans që rregullojnë gjendjen e butonit të prekjes dhe ekranit. Pas kësaj, ne kemi vlerat tona të bajtit:

byte buzëqeshje [4] = {B00000100, B00110010, B01100100, B01100000}; byte surprizë [4] = {B00001110, B00001010, B01101110, B10010000}; byte meh [4] = {B00000100, B00100100, B00100100, B00100000}; byte e trishtuar [4] = {B00000010, B01100100, B00110010, B00110000}; byte i vdekur [6] = {B00001010, B00100100, B00101010, B00100000, B01100000, B01101010}; byte gabim [8] = {B00111100, B01000010, B10100001, B10010001, B10001001, B10000101, B01000010, B00111100}; // Fytyrat e liga 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};

Këto vlera përfaqësojnë të gjitha fytyrat e APEX. Çdo bajt është një grup i cili përmban bit të shumtë që diktojnë gjendjen e secilit piksel në një rresht të caktuar. "1" dhe "0" përfaqësojnë përkatësisht On/Off.

Funksioni i konfigurimit:

Duke kaluar në pjesën tjetër, ne kemi funksionin tonë të konfigurimit.

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

pinMode (TouchSensor, INPUT);

// LED Matrix Setup lc.shutdown (0, false); lc. Intensiteti (0, 4); lc. ClearDisplay (0); }

Emri e shpjegon shumë mirë. Këtu "konfigurojmë" sensorin dhe ekranin tonë të prekjes. Dy rreshtat e parë fillojnë daljen tonë serike (përdoret për korrigjim). Linja e tretë vendos pinin e sensorit të prekjes në një hyrje dhe katër rreshtat e fundit fillojnë ekranin.

Funksionet për shprehjet e fytyrës:

Ky është ndoshta pjesa më e gjatë mbi të gjitha, por është e gjitha shumë e thjeshtë dhe e përsëritur.

zbrazëti e thyer () {lc.setRow (0, 0, gabim [0]); lc.setRow (0, 1, gabim [1]); lc.setRow (0, 2, gabim [2]); lc.setRow (0, 3, gabim [3]); lc.setRow (0, 4, gabim [4]); lc.setRow (0, 5, gabim [5]); lc.setRow (0, 6, gabim [6]); lc.setRow (0, 7, gabim [7]); }

i zbrazët i lumtur () {

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

zbrazëti i befasuar () {

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

void vdes () {

lc.setRow (0, 0, i vdekur [0]); lc.setRow (0, 1, i vdekur [1]); lc.setRow (0, 2, i vdekur [2]); lc.setRow (0, 3, të vdekur [3]); lc.setRow (0, 4, të vdekur [4]); lc.setRow (0, 5, të vdekur [5]); lc.setRow (0, 6, të vdekur [1]); lc.setRow (0, 7, të vdekur [0]); }

qarje e zbrazët () {

lc.setRow (0, 0, i trishtuar [0]); lc.setRow (0, 1, i trishtuar [1]); lc.setRow (0, 2, i trishtuar [2]); lc.setRow (0, 3, i trishtuar [3]); lc.setRow (0, 4, e trishtuar [3]); lc.setRow (0, 5, i trishtuar [2]); lc.setRow (0, 6, i trishtuar [1]); lc.setRow (0, 7, trishtim [0]); }

i pavlefshem keq () {

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

Këto funksione përdoren për të përcaktuar çdo shprehje të fytyrës duke përdorur vlerat tona të bajtit nga pjesa e parë. Çdo rresht përcakton një pozicion x dhe vlera të bajtit dhe më pas aplikon vlerat në atë kolonë. Disa funksione kërkojnë më shumë rreshta sepse ka më shumë rreshta të përdorur për të shfaqur vlerat e asaj fytyre. Çdo faqe është simetrike, kjo është arsyeja pse ne përsërisim rreshtat.

Funksioni WriteArduinoOnMatrix:

Seksioni i katërt përdoret për të llogaritur dhe shkruar shkrimet e duhura në ekranin LED. Ai përbëhet nga një seri deklaratash të tjera if që kontrollojnë vlerat e ujit dhe më pas vendos ekranin duke thirrur funksione të ndryshme nga pjesa e mëparshme.

void writeArduinoOnMatrix () {if (sensorVlera> 0 && sensorVlera 30 && sensorVlera 100 && sensorVlera 200 && sensorVlera 400 && sensorVlera 650 && sensorVlera <= 800) {befasuar (); } else {e thyer (); }}

Ju mund të vini re se kemi shtuar fytyra "të thyera" vetëm në rast se sensori del jashtë kufijve të punës. Kjo parandalon disa gabime të pazakonta nul që ndodhin dhe na jep një kuptim më të mirë vizual të asaj që po ndodh brenda kodit.

Funksioni i lakut:

E fundit por jo më pak e rëndësishme është funksioni loop. Ky kod bën pikërisht atë që thotë emri i tij, ai bën sythe! Edhe pse ka mjaft rreshta në këtë funksion, është në të vërtetë mjaft e thjeshtë. Kodi së pari lexon gjendjen e butonit dhe shikon nëse ekrani është "On". Nëse e gjen këtë të vërtetë, atëherë do të thërrasë funksionin WriteArduinoOnMatrix, i cili më pas do të tërheqë një fytyrë në APEX. Meqenëse ky funksion lakon, ai do të azhurnojë ekranin aq shpesh sa ne duam. Kjo vonesë diktohet nga variabla e vonesës.

lak void () {if (start == true) {timetime = 3000; } // Butoni i leximit i shtypur = digitalRead (TouchSensor);

nëse (shtypur) {

nëse (në == e vërtetë) {lc.clearDisplay (0); on = false; vonesë (vonesë); } tjetër {në = e vërtetë; vonesë (vonesë); }} sensorValue = analogRead (sensorPin); vonesë (vonesë); if (on == true) {// Draw Faces writeArduinoOnMatrix (); }

filluar = e vërtetë;

}

Kjo është gjithçka që ka në kod. Shpresoj se tani ju keni një kuptim më të mirë se si funksionon gjithçka, dhe mund t'i përdorni këto njohuri për të filluar ta personalizoni atë në projektin tuaj!

Shtyrja e Kodit tek Arduino

Tani që kemi mbuluar të gjithë kodin, është koha ta shtyjmë atë në Arduino! Për fat të mirë, IDE e bën këtë shumë të thjeshtë. E tëra çfarë ju duhet të bëni është ta lidhni Arduino -n tuaj në kompjuterin tuaj me një kabllo USB dhe pastaj thjesht klikoni shigjetën e djathtë në pjesën e sipërme të majtë të IDE. Lëreni kodin të shtyjë dhe ju duhet të shihni një mesazh suksesi në fund të programit nëse e keni bërë atë si duhet!

Hapi 5: Diagrami i Qarkut

Diagrami i qarkut
Diagrami i qarkut

Ngjashëm me kodin, diagrami i qarkut nuk është shumë i komplikuar. Ai përbëhet vetëm nga tre sensorë dhe Arduino, kështu që unë do t'ju tregoj përfundimet për secilin, dhe nëse keni nevojë për ndonjë ndihmë tjetër, thjesht referojuni diagramit të mësipërm.

Ekrani LED:

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

Sensori i lagështisë:

  • Pozitiv -> 5V
  • Negativ -> GRD
  • Sinjali -> A5

Sensori prekës kapacitiv:

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

Jo shumë e vështirë, apo jo? Nëse keni ndonjë problem me këtë dalje, sigurohuni që t'i referoheni videos më poshtë ku do t'ju tregoj se si ta lidhni atë.

Hapi 6: Vendosja e të gjitha së bashku

Vendosja e të gjitha së bashku
Vendosja e të gjitha së bashku
Vendosja e të gjitha së bashku
Vendosja e të gjitha së bashku
Vendosja e të gjitha së bashku
Vendosja e të gjitha së bashku

Hardshtë e vështirë të shpjegosh mbi tekstin se si përshtatet të gjitha së bashku, kështu që patjetër që do të sugjeroja të shikosh videon për këtë pjesë. Unë në fakt nuk do të shpjegoj saktësisht se si e bashkova timen, është shumë e vështirë. Por për t'i shpjeguar gjërat në mënyrë të paqartë, unë u ngjita në lidhjet me tela dhe i mbështolla ato në anën e pasme të tabelës. Pastaj vendosa sensorët dhe përdor kasetë elektrike për t'i mbajtur të gjitha së bashku. Së fundmi, e testova me baterinë 9V, dhe pastaj sapo e dija se funksiononte, e vendosa baterinë në anën e pasme dhe e fiksova atë gjithashtu. Siç thashë më parë, SHECNONI VIDEON P FORR KIST HAPEP, ai ka një segment të bukur të vogël të saldimit që është i shpejtë dhe do t'ju ndihmojë të mbështillni telat në mënyrë korrekte. Ndjehuni të lirë ta ndaloni ose ta luani me gjysmë shpejtësie nëse humbni.

Urime! Nëse gjithçka shkoi me sukses, tani duhet të keni një njësi APEX plotësisht funksionale!

Për të provuar njësinë tuaj, gjeni një bimë të ujitur dhe futeni në prizë! Ju duhet të gjeni se është ose i lumtur ose i befasuar dhe kjo do të thotë se duhet të funksionojë !!! Punë e shkëlqyeshme për përfundimin e projektit!

Hapi 7: Përfundimi

Përfundim
Përfundim

Dhe kjo është e tëra e udhëzueshme! Faleminderit që shikuat projektin! Lini çdo pyetje dhe koment më poshtë dhe sigurohuni që të ndiqni Djemtë e Bujqësisë Urbane për mësime më interesante si kjo! Ne do të donim të dëgjonim se si shkoi ndërtimi juaj APEX, dhe fotografitë vlerësohen shumë! Faleminderit përsëri për kalimin, kaloni një ditë të mrekullueshme!

(Ky Instructable u frymëzua nga një projekt më i vjetër, Poj Emoji!)

P. S. Ky udhëzues futet në konkursin e Mikrokontrolluesve, kështu që mos harroni të votoni për ne! Ne e vlerësojmë shumë:)

P. P. S. Le të marrim APEX në Make Magazine! Votoni këtu! Faleminderit:)

Recommended: