Sadržaj:
- Korak 1: Uvod
- Korak 2: Prikupljanje dijelova i alata
- Korak 3: Instalirajte Arduino IDE
- Korak 4: Kôd
- Korak 5: Dijagram kola
- Korak 6: Sastavite sve zajedno
- Korak 7: Zaključak
Video: Ekspresor umjetne biljke (A.P.E.X.): 7 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:08
Ali čekaj … Ima još!
Korak 1: Uvod
Šta je APEX?
APEX je pametan (da ne spominjemo simpatičan) uređaj za nadzor biljaka. Samo ga uključite u bilo koju biljku i prikazat će se nivo "sreće" biljke! Ovo je sjajan podsjetnik da zalijete svoje biljke ako imate lošu naviku da ih zaboravite zalijevati.
Kako to radi?
Magija. Šalim se! APEX koristi Arduino pričvršćen na senzor vlage, koji je umetnut u tlo biljke. Ovaj senzor će očitati sadržaj vlage u tlu, a zatim Arduino izračunava koje lice treba prikazati.
Ali zašto?
Zašto ne?
Korak 2: Prikupljanje dijelova i alata
Uđimo u to! Za ovaj Instructable trebat će vam dosta dijelova i alata. Na vašu sreću, svi su navedeni ispod:
U duhu takmičenja za mikrokontrolere, ovaj projekt su u potpunosti izradili dijelovi kupljeni na Amazonu! (nije sponzorisano)
Lista dijelova:
- Arduino Uno
- 8x8 LED ekran
- Kapacitivni senzor dodira
- Senzor vlage
- 9V konektor za bateriju
- 9V baterija
Lista alata:
- 22 Kalibrska žica
- Električna traka
- Strojevi za skidanje žice
- Lemilica
- Pumpa za odlemljivanje
Nakon što prikupite svu potrebnu opremu, vrijeme je za postavljanje softvera Arduino!
Korak 3: Instalirajte Arduino IDE
Da bi ovaj projekt funkcionirao, morat ćemo moći programirati Arduino. Ovo zahtijeva preuzimanje i instaliranje Arduino integriranog razvojnog okruženja (IDE) na vaše računalo. To je prilično jednostavno objašnjenje, ali ću vas provesti kroz postupak:
1. Posjetite Arduino web stranicu
2. Idite na stranicu za preuzimanje (softver> preuzimanja)
3. Kliknite vezu za preuzimanje za vaš operativni sistem
Sporedna napomena: Program će raditi na Windows, Mac i Linux.
4. Instaliranje na Windows
- Dvaput kliknite na preuzetu datoteku da biste je pokrenuli
- Pritisnite "Slažem se" da prihvatite Licencu
- Slijedite ostale upute
- Program bi sada trebao biti instaliran!
(Obavezno pogledajte snimke ekrana ako se izgubite)
5. Instaliranje na Mac računaru
- Kliknite na preuzetu datoteku
- Odaberite "Otvori"
- Program će se automatski instalirati i pokrenuti!
(Obavezno pogledajte snimke ekrana ako ste zbunjeni)
6. To je to
I gotovi ste! Sada ste Arduino IDE preuzeli na svoj sistem!
Korak 4: Kôd
Ovaj korak se odnosi na kôd. To je prilično kratak program, pa ću ga razmotriti s vama i objasniti kako radi. Prvo kratak pregled, zatim detaljno objašnjenje i na kraju kako to prebaciti na Arduino!
Kratak pregled
Za one od vas koje ne zanima detaljno objašnjenje koda, nudim TL; DR segment! Evo osnovnog objašnjenja. Arduino svakih nekoliko sekundi bilježi vrijednosti sa senzora vlage. Ove se informacije zatim koriste za izračunavanje i prikaz određenog lica! Na kraju se nalazi i malo koda koji omogućuje da kapacitivno dugme na dodir uključi i isključi ekran. Prilično jednostavno zar ne?
The Nitty Gritty
Ovaj dio vodiča namijenjen je onima koji su jako zainteresirani za to kako cijeli program radi, red po redak. Gore ću vam dati snimke ekrana kako biste lakše razumjeli o čemu govorim, kao i uključiti neke retke koda u ovaj opis.
Ovaj program je podijeljen u pet odjeljaka:
- Uključujući biblioteke i kreiranje varijabli
- Funkcija postavljanja
- Funkcije za izraze lica
- Zapišite funkciju Arduino o matrici
- Funkcija petlje
Uključujući biblioteke i kreiranje varijabli:
Prvi dio ovog koda govori o varijablama i bibliotekama koje ćemo koristiti.
#include "LedControlMS.h"
#define TouchSensor 7 LedControl lc = LedControl (12, 11, 10, 1); int sensorPin = A5; int sensorValue = 0; bool pokrenut = false; bool on = true; logičko pritisnuto = LOW;
Prvi red uključuje biblioteku pod nazivom LedControlMS. Ova biblioteka je potrebna za slanje vrijednosti na LED zaslon. Sljedeći red je definicija koja postavlja pin za osjetnik dodira na 7. Nakon toga imamo još tri varijable koje definiraju pinove za LED zaslon, senzor vlage i njegovu vrijednost. Posljednja tri retka su logičke vrijednosti koje reguliraju stanje dodirnog gumba i zaslona. Nakon toga imamo vrijednosti bajtova:
bajt osmijeh [4] = {B00000100, B00110010, B01100100, B01100000}; iznenađenje bajta [4] = {B00001110, B00001010, B01101110, B10010000}; bajt meh [4] = {B00000100, B00100100, B00100100, B00100000}; bajt sad [4] = {B00000010, B01100100, B00110010, B00110000}; bajt mrtav [6] = {B00001010, B00100100, B00101010, B00100000, B01100000, B01101010}; greška u bajtovima [8] = {B00111100, B01000010, B10100001, B10010001, B10001001, B10000101, B01000010, B00111100}; // Zla lica byte esmile [4] = {B00000010, B00101010, B01000100, B01000000}; bajt elaugh [4] = {B00000010, B00101010, B01100100, B01100000}; bajt eplain [4] = {B00000010, B00101010, B00100100, B00100000}; bajtovo oko [4] = {B00000001, B01101001, B01100010, B01100000}; bajt etalk [4] = {B00000001, B00101001, B01100010, B01100000};
Ove vrijednosti predstavljaju sva lica APEX -a. Svaki bajt je niz koji sadrži više bitova koji diktiraju stanje svakog piksela u datom redu. "1" i "0" predstavljaju uključeno/isključeno.
Funkcija postavljanja:
Prelazimo na sljedeći odjeljak, imamo funkciju postavljanja.
void setup () {// MS serijski izlaz Serial.begin (9600);
pinMode (TouchSensor, INPUT);
// LED Matrix Setup lc.shutdown (0, false); lc.setIntensity (0, 4); lc.clearDisplay (0); }
Naziv to vrlo dobro objašnjava. Ovdje "postavljamo" naš senzor dodira i ekran. Prva dva retka započinju naš serijski izlaz (koristi se za otklanjanje grešaka). Treći red postavlja pin senzora dodira na ulaz, a posljednja četiri retka pokreću prikaz.
Funkcije za izraze lica:
Ovo je vjerojatno najduži odjeljak od svih, ali sve je vrlo jednostavno i ponavlja se.
void broken () {lc.setRow (0, 0, greška [0]); lc.setRow (0, 1, greška [1]); lc.setRow (0, 2, greška [2]); lc.setRow (0, 3, greška [3]); lc.setRow (0, 4, greška [4]); lc.setRow (0, 5, greška [5]); lc.setRow (0, 6, greška [6]); lc.setRow (0, 7, greška [7]); }
void happy () {
lc.setRow (0, 0, osmijeh [0]); lc.setRow (0, 1, osmijeh [1]); lc.setRow (0, 2, osmijeh [2]); lc.setRow (0, 3, osmijeh [3]); lc.setRow (0, 4, osmijeh [3]); lc.setRow (0, 5, osmijeh [2]); lc.setRow (0, 6, osmijeh [1]); lc.setRow (0, 7, osmijeh [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 iznenađen () {
lc.setRow (0, 0, iznenađenje [0]); lc.setRow (0, 1, iznenađenje [1]); lc.setRow (0, 2, iznenađenje [2]); lc.setRow (0, 3, iznenađenje [3]); lc.setRow (0, 4, iznenađenje [3]); lc.setRow (0, 5, iznenađenje [2]); lc.setRow (0, 6, iznenađenje [1]); lc.setRow (0, 7, iznenađenje [0]); }
void dying () {
lc.setRow (0, 0, mrtvo [0]); lc.setRow (0, 1, mrtav [1]); lc.setRow (0, 2, mrtvo [2]); lc.setRow (0, 3, mrtvo [3]); lc.setRow (0, 4, mrtvi [4]); lc.setRow (0, 5, mrtav [5]); lc.setRow (0, 6, mrtvi [1]); lc.setRow (0, 7, dead [0]); }
void crying () {
lc.setRow (0, 0, sad [0]); lc.setRow (0, 1, sad [1]); lc.setRow (0, 2, sad [2]); lc.setRow (0, 3, sad [3]); lc.setRow (0, 4, sad [3]); lc.setRow (0, 5, sad [2]); lc.setRow (0, 6, sad [1]); lc.setRow (0, 7, sad [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, očnjak [1]); lc.setRow (0, 2, očnjak [2]); lc.setRow (0, 3, oko [3]); lc.setRow (0, 4, oko [3]); lc.setRow (0, 5, oko [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]); }
Ove se funkcije koriste za definiranje svakog izraza lica koristeći naše vrijednosti bajtova iz prvog odjeljka. Svaka linija definira x položaj i vrijednosti bajta, a zatim primjenjuje vrijednosti na taj stupac. Neke funkcije zahtijevaju više linija jer se više redova koristi za prikaz vrijednosti tog lica. Svako lice je simetrično, zbog čega ponavljamo linije.
Funkcija WriteArduinoOnMatrix:
Četvrti odjeljak koristi se za izračunavanje i ispisivanje odgovarajućih lica na LED ekranu. Sastoji se od niza naredbi if if koje provjeravaju vrijednosti vode, a zatim postavljaju prikaz pozivanjem različitih funkcija iz prethodnog odjeljka.
void writeArduinoOnMatrix () {if (sensorValue> 0 && sensorValue 30 && sensorValue 100 && sensorValue 200 && sensorValue 400 && sensorValue 650 && sensorValue <= 800) {iznenađen (); } else {slomljeno (); }}
Možda ćete primijetiti da smo dodali "slomljena" lica samo u slučaju da senzor izađe iz radnog raspona. Ovo sprječava neke čudne null greške koje se događaju i daje nam bolje vizualno razumijevanje onoga što se događa unutar koda.
Funkcija petlje:
Na kraju, ali ne i najmanje važno, je funkcija petlje. Ovaj kôd radi upravo ono što mu ime kaže, petlje! Iako u ovoj funkciji postoji dosta linija, zapravo je prilično jednostavno. Kôd prvo čita stanje dugmeta i vidi je li prikaz "Uključen". Ako utvrdi da je to istina, tada će pozvati funkciju WriteArduinoOnMatrix, koja će tada nacrtati lice na APEX -u. Budući da se ova funkcija ponavlja, ažurirat će zaslon onoliko često koliko želimo. Ovo kašnjenje diktira varijabla delaytime.
void loop () {if (start == true) {delaytime = 3000; } // Pritisnite dugme za čitanje = digitalRead (TouchSensor);
if (pritisnuto) {
if (on == true) {lc.clearDisplay (0); on = false; kašnjenje (vrijeme kašnjenja); } else {on = true; kašnjenje (vrijeme kašnjenja); }} sensorValue = analogRead (sensorPin); kašnjenje (vrijeme kašnjenja); if (on == true) {// Crtanje lica writeArduinoOnMatrix (); }
započeto = tačno;
}
To je sve što postoji u kodu. Nadajmo se da ste sada bolje razumjeli kako sve to funkcionira i da ćete to znanje moći upotrijebiti za prilagođavanje svom projektu!
Potiskivanje koda na Arduino
Sada kada smo pokrili sav kôd, vrijeme je da ga prebacimo na Arduino! Srećom, IDE ovo čini vrlo jednostavnim. Sve što trebate učiniti je priključiti svoj Arduino na računalo pomoću USB kabela, a zatim samo kliknite strelicu nadesno u gornjem lijevom kutu IDE -a. Pustite kôd da se pritisne i trebali biste vidjeti poruku o uspjehu na dnu programa ako ste to učinili kako treba!
Korak 5: Dijagram kola
Slično kodu, dijagram kola nije previše komplikovan. Sastoji se samo od tri senzora i Arduina, pa ću vam reći ispise za svaki, a ako vam je potrebna dodatna pomoć, samo pogledajte gornji dijagram.
LED displej:
- VCC -> 5V
- GRD -> GRD
- DIN -> Pin 12
- CS -> Pin 10
- CLK -> Pin 11
Senzor vlage:
- Pozitivno -> 5V
- Negativno -> GRD
- Signal -> A5
Kapacitivni senzor dodira:
- VCC -> 5V
- GRD -> GRD
- SIG -> 7
Nije previše teško, zar ne? Ako imate bilo kakvih problema s ovim isticanjem, svakako pogledajte donji videozapis u kojem ću vas provesti kako to povezati.
Korak 6: Sastavite sve zajedno
Teško je preko teksta objasniti kako sve to pristaje, pa bih svakako predložio da pogledate video za ovaj dio. Neću zapravo objašnjavati kako sam sastavio svoje, previše je teško. Ali kako bih nejasno objasnio stvari, lemio sam žičane veze i omotao ih oko stražnje strane ploče. Zatim sam postavio senzore i upotrijebio električnu traku da ih sve držim zajedno. Na kraju, testirao sam ga s 9V baterijom, a onda sam nakon što sam saznao da radi, stavio bateriju na stražnju stranu i zalijepio je i to. Kao što sam već rekao, PROVJERITE VIDEO ZA OVAJ KORAK, ima lijep mali segment za lemljenje koji je ubrzan i pomoći će vam da pravilno omotate žice. Slobodno ga pauzirajte ili pustite na pola brzine ako se izgubite.
Čestitamo! Ako je sve prošlo uspješno, sada biste trebali imati potpuno funkcionalnu APEX jedinicu!
Da biste isprobali svoju jedinicu, pronađite zalijevanu biljku i uključite je u struju! Trebali biste otkriti da je ili sretan ili iznenađen, a to znači da bi trebao raditi !!! Odličan posao za završetak projekta!
Korak 7: Zaključak
I to je cijeli Instructable! Hvala vam što ste pogledali projekat! Ostavite bilo kakva pitanja i komentare dolje i svakako slijedite Urban Farming Guys za više cool tutoriala poput ovog! Voljeli bismo čuti o tome kako je prošla vaša verzija APEX -a, a slike su jako cijenjene! Hvala vam još jednom što ste svratili, ugodan dan!
(Ovaj Instructable inspiriran je starijim projektom, Plant Emoji!)
P. S. Ovaj Instructable je prijavljen na takmičenje za mikrokontrolere, pa ne zaboravite da glasate za nas! Veoma cijenimo:)
P. P. S. Uzmimo APEX u Make Magazine! Glasajte ovdje! Hvala:)
Preporučuje se:
Pametni unutarnji monitor za biljke - saznajte kada vašoj biljci treba zalijevanje: 8 koraka (sa slikama)
Pametni sobni monitor za biljke - saznajte kada vašoj biljci treba zalijevanje: Prije nekoliko mjeseci napravio sam štap za praćenje vlažnosti tla koji se napaja iz baterije i može se zabiti u tlo u saksiji vaše sobne biljke kako bih vam dao neke korisne informacije o tlu nivo vlage i LED diode bljeskalice koje će vam reći kada treba
Arduino štap za praćenje vlage tla - nikada ne zaboravite zalijevati vaše biljke: 4 koraka (sa slikama)
Arduino štap za praćenje vlažnosti tla - nikada ne zaboravite zalijevati vaše biljke: Zaboravljate li često zalijevanje sobnih biljaka? Ili im možda pridajete previše pažnje i zalijevate ih? Ako to učinite, trebali biste sami napraviti štap za praćenje vlažnosti tla na baterije. Ovaj monitor koristi kapacitivnu vlagu tla
WiFi automatska hranilica za biljke s rezervoarom - Postavljanje za uzgoj u zatvorenom/na otvorenom - Automatski vodene biljke s daljinskim nadzorom: 21 korak
WiFi automatska hranilica za biljke s rezervoarom - postavljanje za uzgoj u zatvorenom/na otvorenom - automatsko zalijevanje biljaka sa daljinskim nadzorom: U ovom ćemo vodiču pokazati kako postaviti prilagođeni sustav za hranjenje biljaka u zatvorenom/vanjskom prostoru koji automatski zalijeva biljke i može se daljinski nadzirati pomoću platforme Adosia
OSNOVNI VODIČ O JEZIKU OZNAKE UMJETNE INTELIGENCIJE (AIML) PREKO NOTEPADA: 8 koraka
OSNOVNI VODIČ O JEZIKU OZNAKE UMJETNE INTELIGENCIJE (AIML) PREKO NEPRIJATKA: Jezik označavanja umjetne inteligencije (AIML) je programski jezik koji je specifikacija proširenog jezika označavanja (XML) koju koriste chatbot, verbot, pandorabot, superbot i drugi roboti koji govore. Razvio ga je dr Richard Wallace i ¦
Stropni zvučnici montirani u umjetne kutije zvučnika .: 6 koraka
Stropni zvučnici montirani u umjetne kutije zvučnika .: Ideja je ovdje upotrijebiti visokokvalitetni stropni zvučnik, kupljen po sniženoj cijeni na aukcijskoj stranici, ponovno ga zapakirati za rad surround zvuka. Ovdje sam koristio EV C8.2. Oni se prodaju u maloprodaji za oko 350 USD po paru. Kupio sam ih na Ebayu za manje