Innehållsförteckning:
- Steg 1: Introduktion
- Steg 2: Samla delar och verktyg
- Steg 3: Installera Arduino IDE
- Steg 4: Koden
- Steg 5: Kretsdiagram
- Steg 6: Sätta ihop allt
- Steg 7: Slutsats
Video: The Artificial Plant Emotion Expressor (A.P.E.X.): 7 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:46
Men vänta … Det finns mer!
Steg 1: Introduktion
Vad är APEX?
APEX är en smart (för att inte tala om söt) växtövervakningsenhet. Anslut den bara till vilken växt som helst och den kommer att visa plantans "lycka"! Detta är en bra påminnelse om att vattna dina växter om du har en dålig vana att glömma att vattna dem.
Hur fungerar det?
Magi. Skojar bara! APEX använder en Arduino ansluten till en fuktsensor, som sätts in i växtens jord. Denna sensor avläser jordens fuktinnehåll och sedan beräknar Arduino vilket ansikte som ska visas.
Men varför?
Varför inte?
Steg 2: Samla delar och verktyg
Låt oss gå in i det! För denna instruktionsbara, behöver du en hel del delar och verktyg. Lyckligtvis för dig är de alla listade nedan:
I anda av Microcontrollers Contest gjordes detta projekt helt av delar köpta på Amazon! (inte sponsrad)
Reservdelar:
- Arduino Uno
- 8x8 LED -display
- Kapacitiv beröringssensor
- Fuktsensor
- 9V batterikontakt
- 9V batteri
Verktygslista:
- 22 Mätare
- Eltejp
- Wire Strippers
- Lödkolv
- Avlödningspump
När du har samlat all nödvändig utrustning är det dags att konfigurera Arduino -programvaran!
Steg 3: Installera Arduino IDE
För att detta projekt ska fungera måste vi kunna programmera Arduino. Detta kräver att Arduino Integrated Development Environment (IDE) laddas ner och installeras på din dator. Det är en ganska enkel förklaring, men jag leder dig igenom processen:
1. Besök Arduinos webbplats
2. Navigera till nedladdningssidan (programvara> nedladdningar)
3. Klicka på nedladdningslänken för ditt operativsystem
Sidnotering: Programmet fungerar på Windows, Mac och Linux.
4. Installera på Windows
- Dubbelklicka på den nedladdade filen för att köra den
- Klicka på "Godkänn" för att godkänna licensen
- Följ resten av anvisningarna
- Nu ska programmet installeras!
(Se till att titta på skärmdumparna om du går vilse)
5. Installera på Mac
- Klicka på den nedladdade filen
- Välj "Öppna"
- Programmet installeras och körs automatiskt!
(Se till att kolla in skärmdumparna om du blir förvirrad)
6. Det är det
Och du är klar! Du har nu laddat ner Arduino IDE till ditt system!
Steg 4: Koden
Det här steget handlar om koden. Det är ett ganska kort program, så jag kommer att gå igenom det med dig och förklara hur det fungerar. Först en kort översikt, sedan en fördjupad förklaring, och slutligen hur du skjuter den till Arduino!
Den korta översikten
För er som inte är intresserade av den detaljerade förklaringen av koden tillhandahåller jag ett TL; DR -segment! Här är den grundläggande förklaringen. Arduino tar tag i värden från fuktsensorn med några sekunders mellanrum. Denna information används sedan för att beräkna och visa ett visst ansikte! Det finns också lite kod i slutet som låter den kapacitiva tryckknappen slå på och stänga av skärmen. Ganska enkelt eller hur?
Nitty Gritty
Denna del av handledningen är för dem som är mycket intresserade av hur hela programmet fungerar, rad för rad. Jag tillhandahåller skärmdumpar ovan för att hjälpa dig att förstå vad jag pratar om, samt inkludera några av kodraderna i den här beskrivningen.
Detta program är uppdelat i fem avsnitt:
- Inklusive bibliotek och skapa variabler
- Inställningsfunktionen
- Funktioner för ansiktsuttryck
- Funktionen Write Arduino On Matrix
- Loop -funktionen
Inklusive bibliotek och skapa variabler:
Det första avsnittet i den här koden handlar om de variabler och bibliotek vi kommer att använda.
#inkludera "LedControlMS.h"
#define TouchSensor 7 LedControl lc = LedControl (12, 11, 10, 1); int sensorPin = A5; int sensorValue = 0; bool startade = falskt; bool on = true; boolsk pressad = LÅG;
Den första raden innehåller ett bibliotek som heter LedControlMS. Detta bibliotek krävs för att kunna skicka värden till LED -displayen. Nästa rad är ett definieringsuttalande som sätter stiftet för pekgivaren till 7. Efter det har vi ytterligare tre variabler som definierar stiften för LED -displayen, fuktsensorn och dess värde. De tre sista raderna är alla booleaner som reglerar statusen för tryckknappen och displayen. Efter detta har vi våra bytevärden:
byte smile [4] = {B00000100, B00110010, B01100100, B01100000}; byte överraskning [4] = {B00001110, B00001010, B01101110, B10010000}; byte meh [4] = {B00000100, B00100100, B00100100, B00100000}; byte sad [4] = {B00000010, B01100100, B00110010, B00110000}; byte död [6] = {B00001010, B00100100, B00101010, B00100000, B01100000, B01101010}; byte -fel [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};
Dessa värden representerar alla ansikten på APEX. Varje byte är en array som innehåller flera bitar som dikterar tillståndet för varje pixel i en given rad. "1" och "0" representerar På/Av respektive.
Inställningsfunktionen:
När vi går vidare till nästa avsnitt har vi vår installationsfunktion.
void setup () {// MS Serial Output Serial.begin (9600);
pinMode (TouchSensor, INPUT);
// LED Matrix Setup lc. Avstängning (0, falskt); lc.setIntensity (0, 4); lc.clearDisplay (0); }
Namnet förklarar det mycket bra. Det är här vi "ställer in" vår beröringssensor och display. De två första raderna börjar vår serieutmatning (används för felsökning). Den tredje raden ställer in touchsensorns stift på en ingång, och de sista fyra raderna startar displayen.
Funktioner för ansiktsuttryck:
Detta är förmodligen det längsta avsnittet över allt, men det är mycket enkelt och repetitivt.
void broken () {lc.setRow (0, 0, error [0]); lc.setRow (0, 1, fel [1]); lc.setRow (0, 2, fel [2]); lc.setRow (0, 3, fel [3]); lc.setRow (0, 4, fel [4]); lc.setRow (0, 5, fel [5]); lc.setRow (0, 6, fel [6]); lc.setRow (0, 7, fel [7]); }
tomrum glad () {
lc.setRow (0, 0, leende [0]); lc.setRow (0, 1, leende [1]); lc.setRow (0, 2, leende [2]); lc.setRow (0, 3, le [3]); lc.setRow (0, 4, leende [3]); lc.setRow (0, 5, leende [2]); lc.setRow (0, 6, leende [1]); lc.setRow (0, 7, leende [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]); }
tomrum förvånad () {
lc.setRow (0, 0, surprise [0]); lc.setRow (0, 1, överraskning [1]); lc.setRow (0, 2, surprise [2]); lc.setRow (0, 3, surprise [3]); lc.setRow (0, 4, surprise [3]); lc.setRow (0, 5, överraskning [2]); lc.setRow (0, 6, överraskning [1]); lc.setRow (0, 7, överraskning [0]); }
tomrum döende () {
lc.setRow (0, 0, dead [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]); }
tomrumsgråt () {
lc.setRow (0, 0, ledsen [0]); lc.setRow (0, 1, ledsen [1]); lc.setRow (0, 2, ledsen [2]); lc.setRow (0, 3, ledsen [3]); lc.setRow (0, 4, trist [3]); lc.setRow (0, 5, ledsen [2]); lc.setRow (0, 6, ledsen [1]); lc.setRow (0, 7, ledsen [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]); }
Dessa funktioner används för att definiera varje ansiktsuttryck med hjälp av våra bytevärden från det första avsnittet. Varje rad definierar en x -position och bytevärden och applicerar sedan värdena på den kolumnen. Vissa funktioner kräver fler rader eftersom det finns fler rader som används för att visa värdena för det ansiktet. Varje ansikte är symmetriskt, varför vi upprepar raderna.
WriteArduinoOnMatrix -funktionen:
Det fjärde avsnittet används för att beräkna och skriva rätt ansikten på LED -displayen. Den består av en rad andra if -uttalanden som kontrollerar vattenvärdena och sedan ställer in displayen genom att anropa olika funktioner från föregående avsnitt.
void writeArduinoOnMatrix () {if (sensorValue> 0 && sensorValue 30 && sensorValue 100 && sensorValue 200 && sensorValue 400 && sensorValue 650 && sensorValue <= 800) {förvånad (); } annat {brutet (); }}
Du kanske märker att vi har lagt till "trasiga" ansikten bara om sensorn går utanför arbetsområdena. Detta förhindrar några konstiga nollfel som händer och ger oss en bättre visuell förståelse för vad som händer inom koden.
Loop -funktionen:
Sist men inte minst är loop -funktionen. Den här koden gör precis vad namnet säger, den slingrar! Även om det finns ganska många rader i den här funktionen, är det faktiskt ganska enkelt. Koden läser först knapptillståndet och ser om displayen är "På". Om den finner att detta är sant, kommer den att ringa funktionen WriteArduinoOnMatrix, som sedan kommer att rita ett ansikte på APEX. Eftersom den här funktionen slingas kommer den att uppdatera skärmen så ofta vi vill. Denna fördröjning dikteras av fördröjningsvariabeln.
void loop () {if (started == true) {delaytime = 3000; } // Läsknapp nedtryckt = digitalRead (TouchSensor);
om (tryckt) {
if (on == true) {lc.clearDisplay (0); på = falskt; fördröjning (fördröjningstid); } annat {on = true; fördröjning (fördröjningstid); }} sensorValue = analogRead (sensorPin); fördröjning (fördröjningstid); if (on == true) {// Draw Faces writeArduinoOnMatrix (); }
startade = sant;
}
Det är allt som finns i koden. Förhoppningsvis har du en bättre förståelse för hur det hela fungerar och kan använda denna kunskap för att börja anpassa det till ditt projekt!
Skjuter koden till Arduino
Nu när vi har täckt hela koden är det dags att skjuta den till Arduino! Lyckligtvis gör IDE detta väldigt enkelt. Allt du behöver göra är att ansluta din Arduino till din dator med en USB -kabel och klicka sedan på högerpilen längst upp till vänster på IDE. Låt koden trycka, och du bör se ett framgångsmeddelande längst ner i programmet om du gjorde det rätt!
Steg 5: Kretsdiagram
På samma sätt som koden är kretsschemat inte alltför komplicerat. Den består bara av tre sensorer och Arduino, så jag kommer att berätta pin-outs för varje, och om du behöver annan hjälp, se bara diagrammet ovan.
LED -displayen:
- VCC -> 5V
- GRD -> GRD
- DIN -> Stift 12
- CS -> Pin 10
- CLK -> Pin 11
Fuktsensorn:
- Positivt -> 5V
- Negativ -> GRD
- Signal -> A5
Den kapacitiva beröringssensorn:
- VCC -> 5V
- GRD -> GRD
- SIG -> 7
Inte för svårt, eller hur? Om du har problem med denna pin-out, se till att se videon nedan där jag visar dig hur du kopplar upp den.
Steg 6: Sätta ihop allt
Det är svårt att förklara över text hur det passar ihop, så jag skulle definitivt föreslå att du tittar på videon för den här delen. Jag tänker faktiskt inte förklara exakt hur jag satte ihop min, det är alldeles för svårt. Men för att förklara saker oklart, lödde jag på trådanslutningarna och lindade dem runt baksidan av brädet. Sedan placerade jag sensorerna och använde eltejp för att hålla ihop allt. Slutligen testade jag det med 9V -batteriet, och när jag först visste att det fungerade lade jag batteriet på baksidan och tejpade det också. Som jag sa tidigare, KONTROLLERA VIDEOEN FÖR DETTA STEG, den har ett fint lödsegment som är snabbare och hjälper dig att linda trådarna korrekt. Pausa gärna den eller spela den på halvfart om du går vilse.
Grattis! Om allt gick framgångsrikt borde du nu ha en fullt fungerande APEX -enhet!
För att testa din enhet, hitta en vattnad anläggning och anslut den! Du bör upptäcka att den är antingen glad eller förvånad och det betyder att den ska fungera !!! Bra jobbat med att slutföra projektet!
Steg 7: Slutsats
Och det är hela Instructable! Tack för att du kollade in projektet! Lämna några frågor och kommentarer nedan och se till att följa Urban Farming Guys för fler coola självstudier som detta! Vi vill gärna höra om hur din APEX -konstruktion gick och bilderna uppskattas mycket! Tack igen för att du tittade in, ha en bra dag!
(Denna instruktör inspirerades av ett äldre projekt, Plant Emoji!)
P. S. Denna instruktionsbok är med i Microcontrollers -tävlingen, så glöm inte att rösta på oss! Vi uppskattar det jättemycket:)
P. P. S. Låt oss få APEX i Make Magazine! Rösta här! Tack:)
Rekommenderad:
Pixie - Let Your Plant Smart: 4 Steg (med bilder)
Pixie - Let Your Plant Smart: Pixie var ett projekt som utvecklats i avsikt att göra de växter vi har hemma mer interaktiva, eftersom för de flesta är en av utmaningarna med att ha en planta hemma att veta hur man tar hand om den, hur ofta vi vattnar, när och hur mycket su
Plant'm: 6 steg (med bilder)
Plant'm: Som de flesta gör, älskar jag att ha växter runt huset. Tyvärr dör de nästan alltid inom ett par veckor. Så när jag i slutet av mitt första år som student vid MCT på Howest fick i uppgift att skapa ett projekt som skulle visa allt
Emotion Expresser: 4 steg
Emotion Expresser: Intro: Den här maskinen är en känsloutryckare, den fungerar genom att hjälpa människor som inte är bra på att uttrycka sina känslor att uttrycka sin känsla. Denna maskin kan hjälpa människor som behöver hjälp eller behöver någon att lyssna på dem klaga på saker som är
DIY Plant Inspection Trädgårdsdrönare (vikbar trikopter på en budget): 20 steg (med bilder)
DIY Plant Inspection Gardening Drone (Folding Tricopter on a Budget): På vårt helghus har vi en fin liten trädgård med mycket frukt och grönsaker men ibland är det bara svårt att hänga med i hur växterna förändras. De behöver ständig övervakning och de är mycket sårbara för väder, infektioner, buggar osv … Jag
IoT Plant Monitoring System (med IBM IoT -plattform): 11 steg (med bilder)
IoT Plant Monitoring System (Med IBM IoT Platform): Översikt Plant Monitoring System (PMS) är en applikation byggd med individer som är i arbetarklassen med en grön tumme i åtanke. Idag är arbetande individer mer upptagna än någonsin; utveckla sin karriär och hantera sin ekonomi.