Spisu treści:
- Krok 1: Wprowadzenie
- Krok 2: Zbieranie części i narzędzi
- Krok 3: Instalacja Arduino IDE
- Krok 4: Kodeks
- Krok 5: Schemat obwodu
- Krok 6: Złóż wszystko razem
- Krok 7: Wniosek
Wideo: Ekspresor emocji ze sztucznych roślin (A.P.E.X.): 7 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
Ale poczekaj… To nie wszystko!
Krok 1: Wprowadzenie
Co to jest APEX?
APEX to inteligentne (nie wspominając o uroczym) urządzenie do monitorowania roślin. Wystarczy podłączyć go do dowolnej rośliny, a wyświetli poziom „szczęśliwości” rośliny! To świetne przypomnienie, aby podlewać rośliny, jeśli masz zły nawyk zapominania ich podlewania.
Jak to działa?
Magia. Żartuję! APEX wykorzystuje Arduino połączone z czujnikiem wilgoci, który umieszcza się w glebie rośliny. Ten czujnik odczyta zawartość wilgoci w glebie, a następnie Arduino obliczy, jaką twarz wyświetlić.
Ale dlaczego?
Dlaczego nie?
Krok 2: Zbieranie części i narzędzi
Wejdźmy w to! Do tego Instructable będziesz potrzebować sporo części i narzędzi. Na szczęście wszystkie są wymienione poniżej:
W duchu konkursu mikrokontrolerów ten projekt został w całości wykonany z części zakupionych na Amazon! (niesponsorowane)
Lista części:
- Arduino Uno
- Wyświetlacz LED 8x8
- Pojemnościowy czujnik dotykowy
- Czujnik wilgoci
- Złącze baterii 9 V
- Bateria 9V
Lista narzędzi:
- 22 przewód pomiarowy
- Taśma elektryczna
- Narzędzia do ściągania izolacji
- Lutownica
- Pompa rozlutowująca
Po zebraniu całego niezbędnego sprzętu nadszedł czas na konfigurację oprogramowania Arduino!
Krok 3: Instalacja Arduino IDE
Aby ten projekt zadziałał, będziemy musieli umieć zaprogramować Arduino. Wymaga to pobrania i zainstalowania zintegrowanego środowiska programistycznego Arduino (IDE) na komputerze. To dość proste wyjaśnienie, ale przeprowadzę Cię przez ten proces:
1. Odwiedź stronę Arduino
2. Przejdź do strony pobierania (Oprogramowanie > Pobieranie)
3. Kliknij łącze pobierania dla swojego systemu operacyjnego
Uwaga dodatkowa: program będzie działał w systemach Windows, Mac i Linux.
4. Instalacja w systemie Windows
- Kliknij dwukrotnie pobrany plik, aby go uruchomić
- Kliknij „Zgadzam się”, aby zaakceptować licencję
- Postępuj zgodnie z pozostałymi monitami
- Program powinien być teraz zainstalowany!
(Pamiętaj, aby spojrzeć na zrzuty ekranu, jeśli się zgubisz)
5. Instalacja na Macu
- Kliknij pobrany plik
- Wybierz „Otwórz”
- Program automatycznie się zainstaluje i uruchomi!
(Pamiętaj, aby sprawdzić zrzuty ekranu, jeśli się zdezorientujesz)
6. To wszystko
I jesteś skończony! Masz teraz pobrane Arduino IDE na swój system!
Krok 4: Kodeks
Ten krok dotyczy kodu. To dość krótki program, więc omówię go z tobą i wyjaśnię, jak to działa. Najpierw krótki przegląd, potem dogłębne wyjaśnienie, a na koniec jak wepchnąć go do Arduino!
Krótki przegląd
Dla tych z Was, którzy nie są zainteresowani szczegółowym wyjaśnieniem kodu, udostępniam segment TL;DR! Oto podstawowe wyjaśnienie. Arduino co kilka sekund pobiera wartości z czujnika wilgoci. Te informacje są następnie wykorzystywane do obliczania i wyświetlania określonej twarzy! Na końcu jest też trochę kodu, który pozwala pojemnościowemu przyciskowi dotykowemu włączać i wyłączać wyświetlacz. Całkiem proste, prawda?
Nitty Gritty
Ta część samouczka jest przeznaczona dla tych, którzy są bardzo zainteresowani działaniem całego programu, wiersz po wierszu. Przedstawię zrzuty ekranu powyżej, aby pomóc Ci zrozumieć, o czym mówię, a także zamieścić niektóre wiersze kodu w tym opisie.
Ten program jest podzielony na pięć sekcji:
- Dołączanie bibliotek i tworzenie zmiennych
- Funkcja konfiguracji
- Funkcje dla mimiki twarzy
- Funkcja zapisu Arduino na matrycy
- Funkcja pętli
Dołączanie bibliotek i tworzenie zmiennych:
Pierwsza sekcja tego kodu dotyczy zmiennych i bibliotek, których będziemy używać.
#include "LedControlMS.h"
#define TouchSensor 7 LedControl lc=LedControl(12, 11, 10, 1); wewn czujnikPin = A5; int sensorValue = 0; bool rozpoczęty = fałsz; bool on = prawda; wciśnięty logiczny = NISKI;
Pierwsza linia zawiera bibliotekę o nazwie LedControlMS. Ta biblioteka jest wymagana, aby móc wysyłać wartości do wyświetlacza LED. Kolejny wiersz to wyrażenie define, które ustawia pin czujnika dotyku na 7. Następnie mamy jeszcze trzy zmienne, które definiują piny wyświetlacza LED, czujnika wilgoci i jego wartość. Ostatnie trzy wiersze to wszystkie wartości logiczne, które regulują stan przycisku dotykowego i wyświetlacza. Po tym mamy nasze wartości bajtów:
bajt uśmiechu[4]={B00000100, B00110010, B01100100, B01100000};bajtowa niespodzianka[4]={B00001110, B00001010, B01101110, B10010000}; bajt meh[4]={B00000100, B00100100, B00100100, B00100000}; bajt smutny[4]={B00000010, B01100100, B00110010, B00110000}; bajt martwy[6]={B00001010, B00100100, B00101010, B00100000, B01100000, B01101010}; błąd bajtu[8]={B00111100, B01000010, B10100001, B10010001, B10001001, B10000101, B01000010, B00111100}; //Evil Faces byte esmile[4]={B00000010, B00101010, B01000100, B01000000}; bajt elaugh[4]={B00000010, B00101010, B01100100, B01100000}; eplain bajtowe[4]={B00000010, B00101010, B00100100, B00100000}; bajt eyell[4]={B00000001, B01101001, B01100010, B01100000}; bajt etalk[4]={B00000001, B00101001, B01100010, B01100000};
Te wartości reprezentują wszystkie twarze APEX. Każdy bajt to tablica, która zawiera wiele bitów, które dyktują stan każdego piksela w danym wierszu. „1” i „0” oznaczają odpowiednio Wł./Wył.
Funkcja konfiguracji:
Przechodząc do następnej sekcji, mamy naszą funkcję konfiguracji.
void setup() { //MS Serial Output Serial.begin(9600);
pinMode (TouchSensor, INPUT);
//Konfiguracja matrycy LED lc.shutdown(0, fałsz); lc.setIntensity(0, 4); lc.clearWyświetlacz(0); }
Nazwa bardzo dobrze to wyjaśnia. To tutaj „konfigurujemy” nasz czujnik dotykowy i wyświetlacz. Pierwsze dwie linie rozpoczynają nasze wyjście szeregowe (używane do debugowania). Trzecia linia ustawia pin czujnika dotyku na wejście, a ostatnie cztery linie uruchamiają wyświetlacz.
Funkcje dla wyrazu twarzy:
To prawdopodobnie najdłuższy odcinek ze wszystkich, ale jest bardzo prosty i powtarzalny.
void broken() { lc.setRow(0, 0, error[0]); lc.setRow(0, 1, błąd[1]); lc.setRow(0, 2, błąd [2]); lc.setRow(0, 3, błąd [3]); lc.setRow(0, 4, błąd[4]); lc.setRow(0, 5, błąd[5]); lc.setRow(0, 6, błąd[6]); lc.setRow(0, 7, błąd[7]); }
nieważne szczęśliwe () {
lc.setRow(0, 0, uśmiech[0]); lc.setRow(0, 1, uśmiech [1]); lc.setRow(0, 2, uśmiech [2]); lc.setRow(0, 3, uśmiech [3]); lc.setRow(0, 4, uśmiech [3]); lc.setRow(0, 5, uśmiech [2]); lc.setRow(0, 6, uśmiech [1]); lc.setRow(0, 7, uśmiech[0]); }
pusta zwykła () {
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]); }
nieważne zaskoczenie () {
lc.setRow(0, 0, niespodzianka[0]); lc.setRow (0, 1, niespodzianka [1]); lc.setRow(0, 2, niespodzianka [2]); lc.setRow(0, 3, niespodzianka [3]); lc.setRow(0, 4, niespodzianka [3]); lc.setRow(0, 5, niespodzianka [2]); lc.setRow(0, 6, niespodzianka[1]); lc.setRow(0, 7, niespodzianka[0]); }
nieważne umieranie () {
lc.setRow(0, 0, martwy[0]); lc.setRow(0, 1, martwy[1]); lc.setRow(0, 2, martwy[2]); lc.setRow(0, 3, martwy[3]); lc.setRow(0, 4, martwy[4]); lc.setRow(0, 5, martwy[5]); lc.setRow(0, 6, martwy[1]); lc.setRow(0, 7, martwy[0]); }
nieważne płacz () {
lc.setRow(0, 0, sad[0]); lc.setRow(0, 1, smutny[1]); lc.setRow(0, 2, smutny[2]); lc.setRow(0, 3, smutny[3]); lc.setRow(0, 4, smutny[3]); lc.setRow(0, 5, smutny[2]); lc.setRow(0, 6, smutny[1]); lc.setRow(0, 7, sad[0]); }
nieważny zły uśmiech () {
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]); }
nieważny zły śmiech () {
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]); }
nieważne złoplain() {
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]); }
nieważne złoyell() {
lc.setRow(0, 0, eyell[0]); lc.setRow(0, 1, eyell[1]); lc.setRow(0, 2, oczko[2]); lc.setRow(0, 3, oczko[3]); lc.setRow(0, 4, oczko [3]); lc.setRow(0, 5, oczko[2]); lc.setRow(0, 6, eyell[1]); lc.setRow(0, 7, eyell[0]); }
nieważne złotalk() {
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]); }
Te funkcje służą do definiowania każdego wyrazu twarzy przy użyciu naszych wartości bajtowych z pierwszej sekcji. Każdy wiersz definiuje pozycję x i wartości bajtów, a następnie stosuje te wartości do tej kolumny. Niektóre funkcje wymagają większej liczby wierszy, ponieważ jest więcej wierszy używanych do wyświetlania wartości tej ściany. Każda twarz jest symetryczna, dlatego linie powtarzamy.
Funkcja WriteArduinoOnMatrix:
Czwarta sekcja służy do obliczania i zapisywania właściwych twarzy na wyświetlaczu LED. Składa się z szeregu instrukcji else if, które sprawdzają wartości wody, a następnie ustawiają wyświetlacz, wywołując inne funkcje z poprzedniej sekcji.
void writeArduinoOnMatrix() { if(SensorValue > 0 && SensorValue 30 && SensorValue 100 && SensorValue 200 && SensorValue 400 && SensorValue 650 && SensorValue <= 800) { zaskoczony(); } inny { uszkodzony(); } }
Możesz zauważyć, że dodaliśmy „zepsute” twarze na wypadek, gdyby czujnik wyszedł poza zakresy robocze. Zapobiega to niektórym dziwnym błędom zerowym, które się zdarzają, i daje nam lepsze wizualne zrozumienie tego, co dzieje się w kodzie.
Funkcja pętli:
Ostatnia, ale nie mniej ważna jest funkcja pętli. Ten kod robi dokładnie to, co mówi jego nazwa, zapętla się! Chociaż w tej funkcji jest sporo wierszy, w rzeczywistości jest ona dość prosta. Kod najpierw odczytuje stan przycisku i sprawdza, czy wyświetlacz jest włączony. Jeśli stwierdzi, że to prawda, wywoła funkcję WriteArduinoOnMatrix, która następnie narysuje twarz na APEX. Ponieważ ta funkcja zapętla się, będzie aktualizować wyświetlacz tak często, jak chcemy. Opóźnienie to jest podyktowane zmienną delaytime.
void loop() { if (start == true){ delaytime = 3000; } //Odczyt wciśnięty przycisk = digitalRead(TouchSensor);
jeśli (naciśnięty) {
if (on == true) { lc.clearDisplay(0); on = fałsz; opóźnienie (czas opóźnienia); } else { on = prawda; opóźnienie (czas opóźnienia); } } sensorValue = analogRead(sensorPin); opóźnienie (czas opóźnienia); if (on == true) { //Rysuj twarze writeArduinoOnMatrix(); }
rozpoczęte = prawda;
}
To wszystko, co jest związane z kodem. Mam nadzieję, że teraz lepiej rozumiesz, jak to wszystko działa, i możesz wykorzystać tę wiedzę, aby zacząć dostosowywać ją do swojego projektu!
Przekazywanie kodu do Arduino
Teraz, gdy omówiliśmy już cały kod, nadszedł czas, aby przenieść go na Arduino! Na szczęście IDE sprawia, że jest to bardzo proste. Wszystko, co musisz zrobić, to podłączyć Arduino do komputera za pomocą kabla USB, a następnie kliknąć strzałkę w prawo w lewym górnym rogu IDE. Niech kod pchnie, a powinieneś zobaczyć komunikat o powodzeniu na dole programu, jeśli zrobiłeś to dobrze!
Krok 5: Schemat obwodu
Podobnie jak kod, schemat obwodu nie jest zbyt skomplikowany. Składa się tylko z trzech czujników i Arduino, więc powiem ci pin-outy dla każdego, a jeśli potrzebujesz innej pomocy, po prostu zapoznaj się z powyższym schematem.
Wyświetlacz LED:
- VCC -> 5V
- GRD -> GRD
- DIN -> Pin 12
- CS -> Pin 10
- CLK -> Pin 11
Czujnik wilgoci:
- Dodatni -> 5V
- Negatywne -> GRD
- Sygnał -> A5
Pojemnościowy czujnik dotykowy:
- VCC -> 5V
- GRD -> GRD
- SYG -> 7
Nie za trudne, prawda? Jeśli masz jakiekolwiek problemy z tym wyprowadzeniem, zapoznaj się z poniższym filmem, w którym przeprowadzę Cię przez proces podłączania.
Krok 6: Złóż wszystko razem
Trudno wyjaśnić tekstem, jak to wszystko pasuje, więc zdecydowanie sugerowałbym obejrzenie filmu do tej części. Właściwie nie zamierzam wyjaśniać dokładnie, w jaki sposób złożyłem moje, to zbyt trudne. Ale żeby to wyjaśnić niejasno, przylutowałem połączenia przewodowe i owinąłem je z tyłu płytki. Następnie umieściłem czujniki i przymocowałem je taśmą elektryczną. Na koniec przetestowałem go z baterią 9 V, a kiedy już wiedziałem, że działa, umieściłem baterię z tyłu i również ją przykleiłem. Jak powiedziałem wcześniej, OBEJRZYJ WIDEO W TYM KROKU, ma ładny mały segment do lutowania, który jest przyspieszony i pomoże ci poprawnie owinąć przewody. Jeśli się zgubisz, możesz go zatrzymać lub odtworzyć z połową szybkości.
Gratulacje! Jeśli wszystko poszło pomyślnie, powinieneś mieć teraz w pełni funkcjonalną jednostkę APEX!
Aby przetestować swoją jednostkę, znajdź podlaną roślinę i podłącz ją! Powinieneś zauważyć, że jest szczęśliwy lub zaskoczony, a to oznacza, że powinien działać!!! Świetna robota za ukończenie projektu!
Krok 7: Wniosek
I to wszystko Instructable! Dziękujemy za zapoznanie się z projektem! Zostaw wszystkie pytania i komentarze poniżej i pamiętaj, aby śledzić Urban Farming Guys, aby uzyskać więcej fajnych samouczków, takich jak ten! Chcielibyśmy usłyszeć o tym, jak poszła twoja kompilacja APEX, a zdjęcia są bardzo cenione! Jeszcze raz dziękujemy za zatrzymanie się, życzę miłego dnia!
(Ten Instruktaż został zainspirowany starszym projektem, Plant Emoji!)
PS Ten Instructable bierze udział w konkursie Mikrokontrolery, więc nie zapomnij na nas głosować! Bardzo to doceniamy:)
PS. Zdobądź APEX w Make Magazine! Głosuj tutaj ! Dziękuję:)
Zalecana:
Automatyczny system nawadniania roślin za pomocą Micro:bit: 8 kroków (ze zdjęciami)
Automatyczny system nawadniania roślin przy użyciu Micro:bit: W tej instrukcji pokażę, jak zbudować automatyczny system nawadniania roślin przy użyciu Micro:bit i kilku innych małych elementów elektronicznych. Micro:bit wykorzystuje czujnik wilgoci do monitorowania poziomu wilgoci w glebie rośliny i
Zautomatyzowana wtryskarka do recyklingu tworzyw sztucznych: 5 kroków
Zautomatyzowana wtryskarka do recyklingu tworzyw sztucznych: Cześć :) Ten Instructable dotyczy naszej „automatycznej wtryskarki do recyklingu tworzyw sztucznych”. (tzw. Smart Injector) Ideą maszyny jest oferowanie zdecentralizowanego rozwiązania do recyklingu tworzyw sztucznych. Recykling jest często ograniczony
Inteligentny monitor roślin wewnętrznych – dowiedz się, kiedy Twoja roślina potrzebuje podlewania: 8 kroków (ze zdjęciami)
Inteligentny monitor roślin doniczkowych - wiedz, kiedy twoja roślina potrzebuje podlewania: kilka miesięcy temu zrobiłem kij do monitorowania wilgotności gleby, który jest zasilany bateryjnie i można go wbić w glebę w doniczce rośliny doniczkowej, aby uzyskać przydatne informacje o glebie poziom nawilżenia i migające diody LED informujące, kiedy w
Ekspresor emocji: 4 kroki
Ekspresor emocji: Wstęp: Ta maszyna jest ekspresem emocji, pomaga ludziom, którzy nie są dobrzy w wyrażaniu swoich uczuć, wyrażać swoje uczucia. Ta maszyna może pomóc ludziom, którzy potrzebują pomocy lub potrzebują kogoś, kto ich wysłucha, narzeka na rzeczy, które
UWaiPi - Automatyczny system nawadniania roślin sterowany czasem: 11 kroków (ze zdjęciami)
UWaiPi - Automatyczny system nawadniania roślin sterowany czasem: Cześć! Zapomniałeś dziś rano podlać swoje rośliny? Planujesz wakacje, ale zastanawiasz się, kto podleje rośliny? Cóż, jeśli twoje odpowiedzi brzmią tak, to mam rozwiązanie twojego problemu. Naprawdę cieszę się, że mogę przedstawić uWaiPi