Tartalomjegyzék:
- 1. lépés: Bevezetés
- 2. lépés: Az alkatrészek és eszközök összegyűjtése
- Lépés: Az Arduino IDE telepítése
- 4. lépés: A kód
- 5. lépés: Áramköri diagram
- 6. lépés: Összerakás
- 7. lépés: Következtetés
Videó: A mesterséges növényi érzelem kifejező (A.P.E.X.): 7 lépés (képekkel)
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:43
De várj … Van még!
1. lépés: Bevezetés
Mi az APEX?
Az APEX egy okos (nem is beszélve aranyos) növényfigyelő eszköz. Csak csatlakoztassa bármilyen növényhez, és megjeleníti a növény "boldogságát"! Ez nagyszerű emlékeztető a növények öntözésére, ha rossz szokása van, hogy elfelejti öntözni őket.
Hogyan működik?
Varázslat. Csak viccel! Az APEX egy nedvességérzékelőhöz csatlakoztatott Arduino -t használ, amelyet a növény talajába helyeznek. Ez az érzékelő leolvassa a talaj nedvességtartalmát, majd az Arduino kiszámítja, hogy milyen arcot kell megjeleníteni.
De miért?
Miért ne?
2. lépés: Az alkatrészek és eszközök összegyűjtése
Menjünk bele! Ehhez az Instructable -hez jó néhány alkatrészre és eszközre lesz szüksége. Szerencsére az alábbiakban felsoroljuk őket:
A mikrokontrollerek versenyének szellemében ezt a projektet teljes egészében az Amazonon vásárolt alkatrészek készítették! (nem szponzorált)
Alkatrész lista:
- Arduino Uno
- 8x8 LED kijelző
- Kapacitív érintésérzékelő
- Nedvesség érzékelő
- 9V -os elemcsatlakozó
- 9V -os akkumulátor
Eszközök listája:
- 22 Mérőhuzal
- Elektromos szalag
- Huzalcsupaszítók
- Forrasztópáka
- Forrasztószivattyú
Miután összegyűjtötte az összes szükséges felszerelést, ideje beállítani az Arduino szoftvert!
Lépés: Az Arduino IDE telepítése
Ahhoz, hogy ez a projekt működjön, képesnek kell lennünk az Arduino programozására. Ehhez le kell töltenie és telepítenie kell az Arduino integrált fejlesztői környezetet (IDE) a számítógépére. Ez egy meglehetősen egyszerű magyarázat, de végigvezetem a folyamaton:
1. Látogassa meg az Arduino webhelyét
2. Keresse meg a Letöltések oldalt (Szoftver> Letöltések)
3. Kattintson az operációs rendszerének megfelelő letöltési linkre
Oldalsó megjegyzés: A program Windows, Mac és Linux rendszeren fog működni.
4. Telepítés Windows rendszerre
- A letöltéshez kattintson duplán a letöltött fájlra
- Kattintson az "Elfogadom" gombra a licenc elfogadásához
- Kövesse a többi utasítást
- A programot most telepíteni kell!
(Feltétlenül nézze meg a képernyőképeket, ha eltéved)
5. Telepítés Mac számítógépre
- Kattintson a letöltött fájlra
- Válassza a "Megnyitás" lehetőséget
- A program automatikusan települ és fut!
(Ha zavaros, nézze meg a képernyőképeket)
6. Ez az
És kész! Most már letöltötte az Arduino IDE -t a rendszerére!
4. lépés: A kód
Ez a lépés a kódról szól. Ez egy meglehetősen rövid program, ezért átmegyek veled, és elmagyarázom, hogyan működik. Először is, egy rövid áttekintés, majd egy mélyreható magyarázat, és végül hogyan kell tolni az Arduino-hoz!
A rövid áttekintés
Azoknak, akiket nem érdekel a kód részletes magyarázata, egy TL; DR szegmenst ajánlok! Itt az alapvető magyarázat. Az Arduino néhány másodpercenként lefoglalja a nedvességérzékelő értékeit. Ezt az információt használjuk egy bizonyos arc kiszámításához és megjelenítéséhez! A végén van egy kis kód is, amellyel a kapacitív érintőgomb be- és kikapcsolhatja a kijelzőt. Elég egyszerű ugye?
A Nitty Gritty
Az oktatóanyag ezen része azoknak szól, akiket nagyon érdekel az egész program működése soronként. A fenti képernyőképeket bemutatom, hogy segítsen megérteni, miről beszélek, valamint a kód egyes sorait belefoglalom ebbe a leírásba.
Ez a program öt részre oszlik:
- Beleértve a könyvtárakat és a változók létrehozását
- A beállítási funkció
- Funkciók az arckifejezésekhez
- Az Write Arduino On Matrix függvény
- A hurok funkció
Könyvtárak és változók létrehozása:
Ennek a kódnak az első szakasza az általunk használt változókról és könyvtárakról szól.
#include "LedControlMS.h"
#define TouchSensor 7 LedControl lc = LedControl (12, 11, 10, 1); int sensorPin = A5; int sensorValue = 0; bool elindult = hamis; bool on = igaz; logikai préselés = LOW;
Az első sor egy LedControlMS nevű könyvtárat tartalmaz. Ez a könyvtár szükséges ahhoz, hogy értékeket lehessen küldeni a LED kijelzőre. A következő sor egy definiáló utasítás, amely 7 -re állítja az érintőérzékelő érintkezőjét. Ezt követően további három változó áll rendelkezésünkre, amelyek meghatározzák a LED -kijelző, a nedvességérzékelő és az érték értékét. Az utolsó három sor boolean, amelyek az érintőgomb és a kijelző állapotát szabályozzák. Ezek után megvannak a bájt értékeink:
bájt mosoly [4] = {B00000100, B00110010, B01100100, B01100000}; bájt meglepetés [4] = {B00001110, B00001010, B01101110, B10010000}; bájt meh [4] = {B00000100, B00100100, B00100100, B00100000}; bájt szomorú [4] = {B00000010, B01100100, B00110010, B00110000}; byte dead [6] = {B00001010, B00100100, B00101010, B00100000, B01100000, B01101010}; bájt hiba [8] = {B00111100, B01000010, B10100001, B10010001, B10001001, B10000101, B01000010, B00111100}; // Gonosz arcok byte esmile [4] = {B00000010, B00101010, B01000100, B01000000}; bájt elaugh [4] = {B00000010, B00101010, B01100100, B01100000}; bájt eplain [4] = {B00000010, B00101010, B00100100, B00100000}; bájt szem [4] = {B00000001, B01101001, B01100010, B01100000}; bájt etalk [4] = {B00000001, B00101001, B01100010, B01100000};
Ezek az értékek képviselik az APEX összes arcát. Minden bájt egy tömb, amely több bitet tartalmaz, amelyek diktálják az adott sor egyes pixeleinek állapotát. Az "1" és a "0" be-/kikapcsolást jelent.
A beállítási funkció:
A következő szakaszra áttérve van a beállítási funkciónk.
void setup () {// MS soros kimenet Serial.begin (9600);
pinMode (TouchSensor, INPUT);
// LED Matrix Setup lc.shutdown (0, false); lc.setIntensity (0, 4); lc.clearDisplay (0); }
A név nagyon jól megmagyarázza. Itt "állítjuk be" az érintésérzékelőt és a kijelzőt. Az első két sor kezdi a soros kimenetünket (hibakeresésre használják). A harmadik sor bemenetre állítja az érintésérzékelő érintkezőjét, és az utolsó négy sor elindítja a kijelzőt.
Az arckifejezések funkciói:
Valószínűleg ez a leghosszabb szakasz, de nagyon egyszerű és ismétlődő.
void tört () {lc.setRow (0, 0, hiba [0]); lc.setRow (0, 1, hiba [1]); lc.setRow (0, 2, hiba [2]); lc.setRow (0, 3, hiba [3]); lc.setRow (0, 4, hiba [4]); lc.setRow (0, 5, hiba [5]); lc.setRow (0, 6, hiba [6]); lc.setRow (0, 7, hiba [7]); }
üres boldog () {
lc.setRow (0, 0, mosoly [0]); lc.setRow (0, 1, mosoly [1]); lc.setRow (0, 2, mosoly [2]); lc.setRow (0, 3, mosoly [3]); lc.setRow (0, 4, mosoly [3]); lc.setRow (0, 5, mosoly [2]); lc.setRow (0, 6, mosoly [1]); lc.setRow (0, 7, mosoly [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 meglepett () {
lc.setRow (0, 0, meglepetés [0]); lc.setRow (0, 1, meglepetés [1]); lc.setRow (0, 2, meglepetés [2]); lc.setRow (0, 3, meglepetés [3]); lc.setRow (0, 4, meglepetés [3]); lc.setRow (0, 5, meglepetés [2]); lc.setRow (0, 6, meglepetés [1]); lc.setRow (0, 7, meglepetés [0]); }
void dying () {
lc.setRow (0, 0, halott [0]); lc.setRow (0, 1, halott [1]); lc.setRow (0, 2, halott [2]); lc.setRow (0, 3, halott [3]); lc.setRow (0, 4, halott [4]); lc.setRow (0, 5, halott [5]); lc.setRow (0, 6, halott [1]); lc.setRow (0, 7, halott [0]); }
üres sírás () {
lc.setRow (0, 0, szomorú [0]); lc.setRow (0, 1, szomorú [1]); lc.setRow (0, 2, szomorú [2]); lc.setRow (0, 3, szomorú [3]); lc.setRow (0, 4, szomorú [3]); lc.setRow (0, 5, szomorú [2]); lc.setRow (0, 6, szomorú [1]); lc.setRow (0, 7, szomorú [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, szem [0]); lc.setRow (0, 1, szem [1]); lc.setRow (0, 2, szem [2]); lc.setRow (0, 3, szem [3]); lc.setRow (0, 4, szem [3]); lc.setRow (0, 5, szem [2]); lc.setRow (0, 6, szem [1]); lc.setRow (0, 7, szem [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]); }
Ezeket a funkciókat használjuk az egyes arckifejezések meghatározására az első szakasz bájtértékei alapján. Minden sor x pozíciót és bájtértékeket határoz meg, majd az oszlopra alkalmazza az értékeket. Bizonyos funkciók több sort igényelnek, mert több sor van az arc értékeinek megjelenítésére. Minden arc szimmetrikus, ezért ismételjük meg a sorokat.
A WriteArduinoOnMatrix függvény:
A negyedik rész a megfelelő arcok kiszámítására és írására szolgál a LED kijelzőn. Ez egy sor egyéb utasításból áll, amelyek ellenőrzik a vízértékeket, majd beállítják a kijelzőt az előző szakasz különböző funkcióinak meghívásával.
void writeArduinoOnMatrix () {if (sensorValue> 0 && sensorValue 30 && sensorValue 100 && sensorValue 200 && sensorValue 400 && sensorValue 650 && sensorValue <= 800) {meglepett (); } else {tört (); }}
Észreveheti, hogy "törött" arcokat adtunk hozzá arra az esetre, ha az érzékelő kívül esik a működési tartományon. Ez megakadályozza a furcsa nullhibákat, és jobb vizuális megértést biztosít számunkra a kódon belül.
A hurok funkció:
Végül, de nem utolsósorban a hurokfüggvény. Ez a kód pontosan azt teszi, amit a neve mond, hurok! Bár ebben a funkcióban elég sok sor van, valójában meglehetősen egyszerű. A kód először kiolvassa a gomb állapotát, és megnézi, hogy a kijelző "Be" van -e kapcsolva. Ha ezt igaznak találja, akkor meghívja a WriteArduinoOnMatrix függvényt, amely ezután arcot rajzol az APEX -re. Mivel ez a funkció ciklusos, frissíti a kijelzőt, ahányszor csak akarjuk. Ezt a késleltetést a delaytime változó szabja meg.
void loop () {if (elindult == igaz) {delaytime = 3000; } // Olvasás gomb megnyomva = digitalRead (TouchSensor);
ha (lenyomva) {
if (on == true) {lc.clearDisplay (0); be = hamis; késleltetés (késleltetési idő); } else {on = true; késleltetés (késleltetési idő); }} sensorValue = analogRead (sensorPin); késleltetés (késleltetési idő); if (on == true) {// Draw Faces writeArduinoOnMatrix (); }
kezdett = igaz;
}
Ennyi van a kódban. Remélhetőleg most már jobban megérti, hogyan működik mindez, és felhasználhatja ezeket az ismereteket a projekt személyre szabásához!
A kód elküldése az Arduino -hoz
Most, hogy lefedtük az összes kódot, itt az ideje, hogy áthelyezzük az Arduino -hoz! Szerencsére az IDE nagyon egyszerűvé teszi ezt. Mindössze annyit kell tennie, hogy USB -kábellel csatlakoztatja az Arduino -t a számítógéphez, majd kattintson az IDE bal felső sarkában lévő jobbra mutató nyílra. Hagyja, hogy a kód nyomjon, és sikeres üzenetet kell látnia a program alján, ha jól tette!
5. lépés: Áramköri diagram
A kódhoz hasonlóan a kapcsolási rajz sem túl bonyolult. Csak három érzékelőből és az Arduino-ból áll, ezért elmondom a tűk mindegyikét, és ha bármilyen más segítségre van szüksége, nézze meg a fenti ábrát.
LED kijelző:
- VCC -> 5V
- GRD -> GRD
- DIN -> 12. csap
- CS -> 10. csap
- CLK -> 11 -es csap
A nedvességérzékelő:
- Pozitív -> 5V
- Negatív -> GRD
- Jel -> A5
Kapacitív érintésérzékelő:
- VCC -> 5V
- GRD -> GRD
- SIG -> 7
Nem túl nehéz, igaz? Ha bármilyen problémája van ezzel a kivezetéssel, akkor feltétlenül nézze meg az alábbi videót, ahol bemutatom, hogyan kell bekötni.
6. lépés: Összerakás
Nehéz szövegesen megmagyarázni, hogyan illeszkedik egymáshoz, ezért mindenképpen azt javaslom, hogy nézze meg a videót ehhez a részhez. Valójában nem fogom elmagyarázni, hogy pontosan hogyan raktam össze az enyémet, túl nehéz. De hogy homályosan elmagyarázzam a dolgokat, forrasztottam a vezetékcsatlakozásokat, és körbecsavartam őket a tábla hátulján. Ezután elhelyeztem az érzékelőket, és elektromos szalaggal tartottam össze az egészet. Végül kipróbáltam a 9V -os elemmel, majd miután megtudtam, hogy működik, a hátlapra helyeztem az akkumulátort, és azt is ragasztottam. Ahogy korábban mondtam, nézze meg a videót ehhez a lépéshez, van egy szép kis forrasztási szegmense, amely felgyorsult, és segít a vezetékek helyes becsomagolásában. Nyugodtan szüneteltesse vagy játssza le fél sebességgel, ha eltéved.
Gratulálunk! Ha minden sikeres volt, akkor rendelkezzen egy teljesen működőképes APEX egységgel!
Az egység kipróbálásához keressen egy öntözőberendezést, és csatlakoztassa! Észre kell vennie, hogy boldog vagy meglepett, és ez azt jelenti, hogy működnie kell !!! Remek munka a projekt befejezéséhez!
7. lépés: Következtetés
És ez az egész Instructable! Köszönöm, hogy megnézted a projektet! Hagyja lent az esetleges kérdéseket és megjegyzéseket, és kövesse az Urban Farming Guys további hasonló oktatóanyagokat! Szeretnénk hallani arról, hogyan haladt az APEX felépítése, és a képeket nagyra értékeljük! Még egyszer köszönöm, hogy benéztél, további szép napot!
(Ezt az Instructable -t egy régebbi projekt, a Plant Emoji ihlette!)
P. S. Ez az Instructable részt vesz a mikrokontrollerek versenyében, ezért ne felejts el szavazni ránk! Nagyra értékeljük:)
P. P. S. Vegyük az APEX -et a Make Magazinba! Szavazz itt! Kösz:)
Ajánlott:
Automatikus növényi öntözőrendszer mikro segítségével: bit: 8 lépés (képekkel)
Automatikus növényi öntözőrendszer Micro: bit használatával: Ebben az utasításban megmutatom, hogyan kell felépíteni egy automatikus növényi öntözőrendszert a Micro: bit és néhány más kis elektronikus alkatrész segítségével. A Micro: bit nedvességérzékelőt használ figyelemmel kíséri a nedvesség szintjét a növény talajában és
Mesterséges intelligencia és képfelismerés a HuskyLens használatával: 6 lépés (képekkel)
Mesterséges intelligencia és képfelismerés a HuskyLens segítségével: Hé, mi van, srácok! Akarsh itt a CETech -től. Ebben a projektben áttekintjük a DFRobot HuskyLens -jét. Ez egy mesterséges intelligenciával működő kamera modul, amely számos mesterséges intelligencia műveletet képes végrehajtani, például az arcfelismerést
Kifejező robot- ha ez ennél: 5 lépés
Expression Robot- If This Than That: Hallo en welkom bij mijn Expression Robot Instructable.DIt de instructable waar ik aan heb gewerkt tijdens mijn les van If This Than That. De Expression robot is gemaakt met als doel jou als gebruiker te stimuleren bij jezelfreflectie . A robot együtt
UWaiPi - Idővezérelt automatikus növényi öntözőrendszer: 11 lépés (képekkel)
UWaiPi - Idővezérelt automatikus növényi öntözőrendszer: Üdv! Elfelejtetted ma reggel öntözni a növényeidet? Nyaralást tervez, de azon gondolkodik, ki fogja öntözni a növényeket? Nos, ha a válaszod igen, akkor van megoldásom a problémádra. Nagyon örülök, hogy bemutathatom az uWaiPi -t
Beszélgetés a Pick és mesterséges intelligencia csevegéssel a Cleverbot használatával: 14 lépés (képekkel)
Beszélgess a Pick -lel és a mesterséges intelligencia -csevegéssel a Cleverbot használatával: Itt nemcsak hangutasítással próbálkozom, hanem mesterséges intelligencia -csevegéssel is a számítógéppel a Cleverbot használatával. Valójában az ötlet akkor jött, amikor talált gyerekek keverik a színeket a színező dobozban, amikor egy színről a legközelebbi színre vesznek színt. De végre végre