Inhoudsopgave:

The Artificial Plant Emotion Expressor (A.P.E.X.): 7 stappen (met afbeeldingen)
The Artificial Plant Emotion Expressor (A.P.E.X.): 7 stappen (met afbeeldingen)

Video: The Artificial Plant Emotion Expressor (A.P.E.X.): 7 stappen (met afbeeldingen)

Video: The Artificial Plant Emotion Expressor (A.P.E.X.): 7 stappen (met afbeeldingen)
Video: Amazon FBA COMPLETE Product Research Tutorial 2024 2024, November
Anonim
Image
Image

Maar wacht… Er is meer!

Stap 1: Inleiding

Invoering
Invoering
Invoering
Invoering
Invoering
Invoering

Wat is APEX?

APEX is een slim (en niet te vergeten schattig) plantbewakingsapparaat. Sluit hem gewoon aan op een plant en hij zal het "geluk"-niveau van de plant weergeven! Dit is een goede herinnering om je planten water te geven als je de slechte gewoonte hebt om ze te vergeten water te geven.

Hoe werkt het?

Magie. Grapje! APEX gebruikt een Arduino die is bevestigd aan een vochtsensor, die in de bodem van de plant wordt gestoken. Deze sensor leest het vochtgehalte van de grond en vervolgens berekent de Arduino welk gezicht moet worden weergegeven.

Maar waarom?

Waarom niet?

Stap 2: De onderdelen en gereedschappen verzamelen

De onderdelen en gereedschappen verzamelen
De onderdelen en gereedschappen verzamelen
De onderdelen en gereedschappen verzamelen
De onderdelen en gereedschappen verzamelen
De onderdelen en gereedschappen verzamelen
De onderdelen en gereedschappen verzamelen

Laten we erop ingaan! Voor deze Instructable heb je nogal wat onderdelen en gereedschappen nodig. Gelukkig voor jou staan ze hieronder allemaal vermeld:

In de geest van de Microcontrollers-wedstrijd werd dit project volledig gemaakt door onderdelen die op Amazon waren gekocht! (niet gesponsord)

Onderdelen lijst:

  • Arduino Uno
  • 8x8 LED-display
  • Capacitieve aanraaksensor
  • Vochtsensor
  • 9V batterijconnector
  • 9V batterij

Gereedschap Lijst:

  • 22 gauge draad
  • Elektrische tape
  • Draadstrippers
  • Soldeerbout
  • Desoldeerpomp

Zodra je alle benodigde apparatuur hebt verzameld, is het tijd om de Arduino-software in te stellen!

Stap 3: De Arduino IDE installeren

De Arduino IDE installeren
De Arduino IDE installeren
De Arduino IDE installeren
De Arduino IDE installeren
De Arduino IDE installeren
De Arduino IDE installeren

Om dit project te laten werken, moeten we de Arduino kunnen programmeren. Hiervoor moet u de Arduino Integrated Development Environment (IDE) op uw computer downloaden en installeren. Het is een vrij eenvoudige uitleg, maar ik zal je door het proces leiden:

1. Bezoek de Arduino-website

2. Navigeer naar de downloadpagina (Software > Downloads)

3. Klik op de downloadlink voor uw besturingssysteem

Kanttekening: het programma werkt op Windows, Mac en Linux.

4. Installeren op Windows

  • Dubbelklik op het gedownloade bestand om het uit te voeren
  • Klik op "Akkoord" om akkoord te gaan met de licentie
  • Volg de rest van de aanwijzingen
  • Het programma zou nu geïnstalleerd moeten zijn!

(Let op de screenshots als je verdwaalt)

5. Installeren op Mac

  • Klik op het gedownloade bestand
  • Kies "Openen"
  • Het programma wordt automatisch geïnstalleerd en uitgevoerd!

(Let op de screenshots als je in de war raakt)

6. Dat is het

En je bent klaar! Je hebt nu de Arduino IDE gedownload op je systeem!

Stap 4: De code

De code
De code
De code
De code
De code
De code

Bij deze stap draait alles om de code. Het is een vrij kort programma, dus ik zal het met je doornemen en uitleggen hoe het werkt. Eerst een kort overzicht, dan een uitgebreide uitleg en tot slot hoe je het naar de Arduino kunt pushen!

Het korte overzicht

Voor degenen onder u die niet geïnteresseerd zijn in de gedetailleerde uitleg van de code, geef ik een TL; DR-segment! Hier is de basisverklaring. De Arduino haalt om de paar seconden waarden uit de vochtsensor. Deze informatie wordt vervolgens gebruikt om een bepaald gezicht te berekenen en weer te geven! Er is ook een stukje code aan het einde waarmee de capacitieve aanraakknop het scherm kan in- en uitschakelen. Vrij simpel toch?

The Nitty Gritty

Dit gedeelte van de tutorial is voor degenen die erg geïnteresseerd zijn in hoe het hele programma regel voor regel werkt. Ik zal hierboven schermafbeeldingen geven om u te helpen begrijpen waar ik het over heb, evenals enkele regels code in deze beschrijving.

Dit programma is onderverdeeld in vijf secties:

  1. Bibliotheken opnemen en variabelen maken
  2. De Setup-functie
  3. Functies voor gezichtsuitdrukkingen
  4. De functie Arduino schrijven op matrix
  5. De lusfunctie

Bibliotheken opnemen en variabelen maken:

Het eerste deel van deze code gaat over de variabelen en bibliotheken die we zullen gebruiken.

#include "LedControlMS.h"

#define TouchSensor 7 LedControl lc=LedControl (12, 11, 10, 1); int-sensorPin = A5; int sensorWaarde = 0; bool gestart = false; bool aan = waar; boolean ingedrukt = LAAG;

De eerste regel bevat een bibliotheek genaamd LedControlMS. Deze bibliotheek is nodig om waarden naar het LED-display te kunnen sturen. De volgende regel is een definitie-statement dat de pin voor de aanraaksensor instelt op 7. Daarna hebben we nog drie variabelen die de pinnen voor het LED-display, de vochtsensor en de waarde ervan definiëren. De laatste drie regels zijn allemaal booleans die de status van de aanraakknop en het display regelen. Hierna hebben we onze bytewaarden:

byte smile[4]={B00000100, B00110010, B01100100, B01100000};byte surprise[4]={B00001110, B00001010, B01101110, B10010000}; byte meh[4]={B00000100, B00100100, B00100100, B00100000}; byte sad[4]={B00000010, B01100100, B00110010, B00110000}; byte dood [6]={B00001010, B00100100, B0001010, B00100000, B01100000, B01101010}; bytefout[8]={B00111100, B01000010, B10100001, B10010001, B10001001, B10000101, B01000010, B00111100}; //Evil Faces byte esmile [4]={B00000010, B00010010, B01000100, B01000000}; byte elaugh[4]={B00000010, B00010010, B01100100, B01100000}; byte eplain[4]={B00000010, B00010010, B00100100, B00100000}; byte eyell[4]={B00000001, B01101001, B01100010, B01100000}; byte etalk[4]={B00000001, B00101001, B01100010, B01100000};

Deze waarden vertegenwoordigen alle gezichten van APEX. Elke byte is een array die meerdere bits bevat die de status van elke pixel in een bepaalde rij dicteren. "1" en "0" staan respectievelijk voor Aan/Uit.

De Setup-functie:

Als we naar het volgende gedeelte gaan, hebben we onze instellingsfunctie.

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

pinMode (aanraaksensor, INGANG);

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

De naam verklaart het heel goed. Dit is waar we onze aanraaksensor en display "instellen". De eerste twee regels beginnen met onze seriële uitvoer (gebruikt voor foutopsporing). De derde regel stelt de aanraaksensorpin in op een ingang en de laatste vier regels starten het display op.

Functies voor gezichtsuitdrukkingen:

Dit is waarschijnlijk het langste gedeelte van allemaal, maar het is allemaal heel eenvoudig en repetitief.

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

leegte blij() {

lc.setRow(0, 0, smile[0]); lc.setRow(0, 1, smile[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, smile[1]); lc.setRow(0, 7, smile[0]); }

leegte vlakte() {

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

nietig verrast(){

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

nietig sterven() {

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

nietig huilen() {

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

ongeldige boze glimlach() {

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

nietig kwaadlach () {

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

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

Deze functies worden gebruikt om elke gezichtsuitdrukking te definiëren met behulp van onze bytewaarden uit de eerste sectie. Elke regel definieert een x-positie en bytewaarden en past de waarden vervolgens toe op die kolom. Sommige functies vereisen meer lijnen omdat er meer rijen worden gebruikt om de waarden van dat vlak weer te geven. Elk gezicht is symmetrisch, daarom herhalen we de lijnen.

De WriteArduinoOnMatrix-functie:

De vierde sectie wordt gebruikt om de juiste gezichten op het LED-display te berekenen en te schrijven. Het bestaat uit een reeks else if-instructies die de waterwaarden controleren en vervolgens de weergave instellen door verschillende functies uit de vorige sectie aan te roepen.

void writeArduinoOnMatrix() {if(sensorValue > 0 && sensorValue 30 && sensorValue 100 && sensorValue 200 && sensorValue 400 && sensorValue 650 && sensorValue <= 800) { verrast(); } anders { kapot(); } }

Het is je misschien opgevallen dat we "gebroken" gezichten hebben toegevoegd voor het geval de sensor buiten het werkbereik komt. Dit voorkomt een aantal rare null-fouten die optreden en geeft ons een beter visueel begrip van wat er in de code gebeurt.

De lusfunctie:

Last but not least is de lusfunctie. Deze code doet precies wat de naam zegt, het loopt! Hoewel er nogal wat regels in deze functie zitten, is het eigenlijk vrij eenvoudig. De code leest eerst de knopstatus en kijkt of het display "Aan" is. Als het vindt dat dit waar is, roept het de functie WriteArduinoOnMatrix aan, die vervolgens een gezicht op APEX tekent. Omdat deze functie wordt herhaald, wordt het scherm zo vaak bijgewerkt als we willen. Deze vertraging wordt bepaald door de variabele vertragingstijd.

void loop() {if (gestart == true){ delaytime = 3000; } //Leesknop ingedrukt = digitalRead (TouchSensor);

indien (ingedrukt) {

if (aan == waar) { lc.clearDisplay(0); aan = onwaar; vertraging (vertragingstijd); } anders { op = waar; vertraging (vertragingstijd); } } sensorValue = analogRead (sensorPin); vertraging (vertragingstijd); if (on == true) {//Draw Faces writeArduinoOnMatrix(); }

begonnen = waar;

}

Dat is alles wat er is aan de code. Hopelijk heb je nu een beter begrip van hoe het allemaal werkt, en kun je deze kennis gebruiken om het aan je project aan te passen!

De code naar de Arduino duwen

Nu we alle code hebben behandeld, is het tijd om deze naar de Arduino te pushen! Gelukkig maakt de IDE dit heel eenvoudig. Het enige wat u hoeft te doen is uw Arduino met een USB-kabel op uw computer aan te sluiten en vervolgens op de pijl naar rechts in de linkerbovenhoek van de IDE te klikken. Laat de code pushen en je zou een succesbericht onderaan het programma moeten zien als je het goed hebt gedaan!

Stap 5: Schakelschema

Schakelschema
Schakelschema

Net als bij de code is het schakelschema niet al te ingewikkeld. Het bestaat slechts uit drie sensoren en de Arduino, dus ik zal je de pin-outs voor elk vertellen, en als je andere hulp nodig hebt, raadpleeg dan het bovenstaande diagram.

Het LED-display:

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

De vochtsensor:

  • Positief -> 5V
  • Negatief -> GRD
  • Signaal -> A5

De capacitieve aanraaksensor:

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

Niet te moeilijk, toch? Als je problemen hebt met deze pin-out, raadpleeg dan de onderstaande video, waar ik je laat zien hoe je het moet aansluiten.

Stap 6: Alles samenbrengen

Alles bij elkaar zetten
Alles bij elkaar zetten
Alles bij elkaar zetten
Alles bij elkaar zetten
Alles bij elkaar zetten
Alles bij elkaar zetten

Het is moeilijk om via tekst uit te leggen hoe het allemaal in elkaar past, dus ik zou zeker aanraden om de video voor dit onderdeel te bekijken. Ik ga eigenlijk niet precies uitleggen hoe ik de mijne in elkaar heb gezet, het is veel te moeilijk. Maar om de dingen vaag uit te leggen, soldeerde ik de draadverbindingen en wikkelde ze rond de achterkant van het bord. Daarna plaatste ik de sensoren en gebruikte ik elektrische tape om alles bij elkaar te houden. Ten slotte heb ik het getest met de 9V-batterij, en toen ik eenmaal wist dat het werkte, plaatste ik de batterij op de achterkant en plakte die ook vast. Zoals ik al eerder zei, BEKIJK DE VIDEO VOOR DEZE STAP, het heeft een leuk klein soldeersegment dat versneld wordt en je zal helpen de draden correct te wikkelen. Voel je vrij om het te pauzeren of op halve snelheid te spelen als je verdwaalt.

Gefeliciteerd! Als alles goed is gegaan, zou je nu een volledig functionele APEX-eenheid moeten hebben!

Om uw apparaat te testen, zoekt u een bewaterde plant en sluit u deze aan! Je zou moeten ontdekken dat het of blij of verrast is en dit betekent dat het zou moeten werken!!! Mooie opdracht om het project af te ronden!

Stap 7: Conclusie

Conclusie
Conclusie

En dat is de hele Instructable! Bedankt voor het bekijken van het project! Laat hieronder al je vragen en opmerkingen achter en volg de Urban Farming Guys voor meer coole tutorials zoals deze! We horen graag hoe je APEX-build is verlopen, en foto's worden zeer op prijs gesteld! Nogmaals bedankt voor het langskomen, fijne dag!

(Deze Instructable is geïnspireerd op een ouder project, de Plant Emoji!)

PS Deze Instructable doet mee aan de Microcontrollers-wedstrijd, dus vergeet niet op ons te stemmen! Wij waarderen het enorm:)

P. S. Laten we APEX in Make Magazine zetten! Stem hier! Bedankt:)

Aanbevolen: