Innholdsfortegnelse:

The Artificial Plant Emotion Expressor (A.P.E.X.): 7 trinn (med bilder)
The Artificial Plant Emotion Expressor (A.P.E.X.): 7 trinn (med bilder)

Video: The Artificial Plant Emotion Expressor (A.P.E.X.): 7 trinn (med bilder)

Video: The Artificial Plant Emotion Expressor (A.P.E.X.): 7 trinn (med bilder)
Video: Pete Davidson is Master BDE 2024, November
Anonim
Image
Image

Men vent … Det er mer!

Trinn 1: Introduksjon

Introduksjon
Introduksjon
Introduksjon
Introduksjon
Introduksjon
Introduksjon

Hva er APEX?

APEX er en smart (for ikke å snakke om søt) planteovervåkingsenhet. Bare koble den til en hvilken som helst plante, og den vil vise "lykke" -nivået til planten! Dette er en god påminnelse om å vanne plantene dine hvis du har en dårlig vane med å glemme å vanne dem.

Hvordan virker det?

Magi. Bare tuller! APEX bruker en Arduino festet til en fuktighetssensor, som settes inn i plantens jord. Denne sensoren vil lese fuktighetsinnholdet i jorda, og deretter beregner Arduino hvilket ansikt som skal vises.

Men hvorfor?

Hvorfor ikke?

Trinn 2: Samle deler og verktøy

Samle deler og verktøy
Samle deler og verktøy
Samle deler og verktøy
Samle deler og verktøy
Samle deler og verktøy
Samle deler og verktøy

La oss komme inn på det! For denne instruksjonsmåten trenger du ganske mange deler og verktøy. Heldigvis for deg er de alle listet opp nedenfor:

I ånden til Microcontrollers Contest ble dette prosjektet fullstendig laget av deler kjøpt på Amazon! (ikke sponset)

Deleliste:

  • Arduino Uno
  • 8x8 LED -skjerm
  • Kapasitiv berøringssensor
  • Fuktighetssensor
  • 9V batterikontakt
  • 9V batteri

Verktøyliste:

  • 22 Gauge Wire
  • Elektrisk tape
  • Wire strippere
  • Loddejern
  • Desoldering Pump

Når du har samlet alt nødvendig utstyr, er det på tide å sette opp Arduino -programvaren!

Trinn 3: Installere Arduino IDE

Installere Arduino IDE
Installere Arduino IDE
Installere Arduino IDE
Installere Arduino IDE
Installere Arduino IDE
Installere Arduino IDE

For at dette prosjektet skal fungere, må vi kunne programmere Arduino. Dette krever at du laster ned og installerer Arduino Integrated Development Environment (IDE) på datamaskinen. Det er en ganske enkel forklaring, men jeg vil lede deg gjennom prosessen:

1. Besøk Arduino -nettstedet

2. Naviger til nedlastingsside (programvare> nedlastinger)

3. Klikk på nedlastingskoblingen for operativsystemet

Sidemerk: Programmet fungerer på Windows, Mac og Linux.

4. Installere på Windows

  • Dobbeltklikk på den nedlastede filen for å kjøre den
  • Klikk på "Godta" for å godta lisensen
  • Følg resten av instruksjonene
  • Programmet bør nå installeres!

(Sørg for å se på skjermbildene hvis du går deg vill)

5. Installere på Mac

  • Klikk på den nedlastede filen
  • Velg "Åpne"
  • Programmet installeres og kjøres automatisk!

(Sørg for å sjekke ut skjermbildene hvis du blir forvirret)

6. Det er det

Og du er ferdig! Du har nå lastet ned Arduino IDE til systemet ditt!

Trinn 4: Koden

Koden
Koden
Koden
Koden
Koden
Koden

Dette trinnet handler om koden. Det er et ganske kort program, så jeg skal gå over det med deg og forklare hvordan det fungerer. Først en kort oversikt, deretter en grundig forklaring, og til slutt hvordan du skyver den til Arduino!

Den korte oversikten

For de av dere som ikke er interessert i den detaljerte forklaringen på koden, gir jeg et TL; DR -segment! Her er den grunnleggende forklaringen. Arduino tar tak i verdier fra fuktighetssensoren hvert par sekunder. Denne informasjonen brukes deretter til å beregne og vise et bestemt ansikt! Det er også litt kode på slutten som lar den kapasitive berøringsknappen slå på og av skjermen. Ganske enkelt ikke sant?

The Nitty Gritty

Denne delen av opplæringen er for de som er veldig interessert i hvordan hele programmet fungerer, linje for linje. Jeg gir skjermbilder ovenfor for å hjelpe deg å forstå hva jeg snakker om, samt inkludere noen av kodelinjene i denne beskrivelsen.

Dette programmet er delt inn i fem seksjoner:

  1. Inkludert biblioteker og opprettelse av variabler
  2. Oppsettfunksjonen
  3. Funksjoner for ansiktsuttrykk
  4. Write Arduino On Matrix -funksjonen
  5. Loop -funksjonen

Inkludert biblioteker og opprettelse av variabler:

Den første delen av denne koden handler om variablene og bibliotekene vi skal bruke.

#include "LedControlMS.h"

#define TouchSensor 7 LedControl lc = LedControl (12, 11, 10, 1); int sensorPin = A5; int sensorValue = 0; bool startet = false; bool on = true; boolsk presset = LAV;

Den første linjen inkluderer et bibliotek som heter LedControlMS. Dette biblioteket er nødvendig for å kunne sende verdier til LED -displayet. Den neste linjen er en definere -setning som setter pinnen for berøringssensoren til 7. Etter det har vi ytterligere tre variabler som definerer pinnene for LED -displayet, fuktighetssensoren og dens verdi. De tre siste linjene er alle booleanere som regulerer tilstanden til berøringsknappen og displayet. Etter dette har vi våre byteverdier:

byte smile [4] = {B00000100, B00110010, B01100100, B01100000}; byte overraskelse [4] = {B00001110, B00001010, B01101110, B10010000}; byte meh [4] = {B00000100, B00100100, B00100100, B00100000}; byte trist [4] = {B00000010, B01100100, B00110010, B00110000}; byte død [6] = {B00001010, B00100100, B00101010, B00100000, B01100000, B01101010}; byte feil [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};

Disse verdiene representerer alle ansiktene til APEX. Hver byte er en matrise som inneholder flere biter som dikterer tilstanden til hver piksel i en gitt rad. "1" og "0" representerer henholdsvis På/Av.

Oppsettfunksjonen:

Når vi går videre til neste avsnitt, har vi vår oppsettfunksjon.

ugyldig oppsett () {// MS Serial Output Serial.begin (9600);

pinMode (TouchSensor, INPUT);

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

Navnet forklarer det veldig godt. Det er her vi "setter opp" vår berøringssensor og skjerm. De to første linjene starter vår serielle utgang (brukes til feilsøking). Den tredje linjen setter berøringssensoren til en inngang, og de fire siste linjene starter skjermen.

Funksjoner for ansiktsuttrykk:

Dette er sannsynligvis den lengste delen over alt, men det er veldig enkelt og repeterende.

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

ugyldig glad () {

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

ugyldig overrasket () {

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

tomrom dør () {

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

tomrom gråt () {

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

Disse funksjonene brukes til å definere hvert ansiktsuttrykk ved å bruke byteverdiene våre fra den første delen. Hver linje definerer en x -posisjon og byteverdier og bruker deretter verdiene på den kolonnen. Noen funksjoner krever flere linjer fordi det er flere rader som brukes til å vise verdiene til det ansiktet. Hvert ansikt er symmetrisk, og derfor gjentar vi linjene.

WriteArduinoOnMatrix -funksjonen:

Den fjerde delen brukes til å beregne og skrive de riktige ansiktene på LED -displayet. Den består av en rekke andre if -setninger som kontrollerer vannverdiene og deretter angir displayet ved å kalle forskjellige funksjoner fra forrige seksjon.

void writeArduinoOnMatrix () {if (sensorValue> 0 && sensorValue 30 && sensorValue 100 && sensorValue 200 && sensorValue 400 && sensorValue 650 && sensorValue <= 800) {overrasket (); } annet {broken (); }}

Du vil kanskje legge merke til at vi har lagt til "ødelagte" ansikter bare hvis sensoren går utenfor arbeidsområdet. Dette forhindrer noen rare nullfeil som skjer og gir oss en bedre visuell forståelse av hva som skjer i koden.

Loop -funksjonen:

Sist men ikke minst er loop -funksjonen. Denne koden gjør akkurat det navnet sier, den sløyfer! Selv om det er ganske mange linjer i denne funksjonen, er det faktisk ganske enkelt. Koden leser først knappestatus og ser om displayet er "På". Hvis den finner ut at dette er sant, kaller den deretter WriteArduinoOnMatrix -funksjonen, som deretter tegner et ansikt på APEX. Fordi denne funksjonen sløyfes, vil den oppdatere skjermen så ofte vi vil. Denne forsinkelsen er diktert av forsinkelsesvariabelen.

void loop () {if (started == true) {delaytime = 3000; } // Leseknapp trykket = digitalRead (TouchSensor);

hvis (trykket) {

if (on == true) {lc.clearDisplay (0); på = usant; forsinkelse (forsinkelse); } annet {on = true; forsinkelse (forsinkelse); }} sensorValue = analogRead (sensorPin); forsinkelse (forsinkelse); if (on == true) {// Draw Faces writeArduinoOnMatrix (); }

startet = sant;

}

Det er alt som er med koden. Forhåpentligvis har du en bedre forståelse av hvordan det hele fungerer, og kan bruke denne kunnskapen til å begynne å tilpasse den til prosjektet ditt!

Skyv koden til Arduino

Nå som vi har dekket hele koden, er det på tide å skyve den til Arduino! Heldigvis gjør IDE dette veldig enkelt. Alt du trenger å gjøre er å koble Arduino til datamaskinen med en USB -kabel, og klikk deretter på høyre pil øverst til venstre i IDE. La koden skyve, og du bør se en suksessmelding nederst i programmet hvis du gjorde det riktig!

Trinn 5: Kretsdiagram

Kretsdiagram
Kretsdiagram

På samme måte som koden, er kretsdiagrammet ikke så komplisert. Den består bare av tre sensorer og Arduino, så jeg vil fortelle deg pin-outs for hver, og hvis du trenger annen hjelp, kan du bare se diagrammet ovenfor.

LED -skjermen:

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

Fuktighetssensoren:

  • Positiv -> 5V
  • Negativ -> GRD
  • Signal -> A5

Den kapasitive berøringssensoren:

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

Ikke så vanskelig, ikke sant? Hvis du har problemer med denne pin-out, må du referere til videoen nedenfor der jeg viser deg hvordan du kobler den til.

Trinn 6: Sett alt sammen

Sette alt sammen
Sette alt sammen
Sette alt sammen
Sette alt sammen
Sette alt sammen
Sette alt sammen

Det er vanskelig å forklare over tekst hvordan det passer sammen, så jeg vil definitivt foreslå å sjekke ut videoen for denne delen. Jeg kommer faktisk ikke til å forklare nøyaktig hvordan jeg satte min sammen, det er altfor vanskelig. Men for å forklare tingene uklart, loddet jeg på trådforbindelsene og pakket dem rundt baksiden av brettet. Deretter plasserte jeg sensorene og brukte elektrisk tape for å holde alt sammen. Til slutt testet jeg det med 9V -batteriet, og så snart jeg visste at det fungerte, la jeg batteriet på baksiden og teipet det på også. Som jeg sa før, KONTROLLER VIDEOEN FOR DETTE STEGET, den har et fint lite loddesegment som er raskere og vil hjelpe deg med å pakke inn ledningene riktig. Ta den gjerne på pause eller spill den på halv hastighet hvis du går deg vill.

Gratulerer! Hvis alt gikk vellykket, bør du nå ha en fullt funksjonell APEX -enhet!

For å teste enheten din, finn et vannet anlegg og koble det til! Du bør finne ut at den enten er glad eller overrasket, og dette betyr at den skal fungere !!! Flott jobb med å fullføre prosjektet!

Trinn 7: Konklusjon

Konklusjon
Konklusjon

Og det er hele Instructable! Takk for at du sjekket prosjektet! Legg igjen spørsmål og kommentarer nedenfor, og sørg for å følge Urban Farming Guys for flere kule opplæringsprogrammer som dette! Vi vil gjerne høre om hvordan APEX -bygget ditt gikk, og bilder blir satt stor pris på! Takk igjen for at du var innom, ha en fin dag!

(Denne instruksen ble inspirert av et eldre prosjekt, Plant Emoji!)

P. S. Denne instruksen er med i Microcontrollers -konkurransen, så ikke glem å stemme på oss! Vi setter stor pris på det:)

P. P. S. La oss få APEX i Make Magazine! Stem her! Takk:)

Anbefalt: