İçindekiler:

Yapay Bitki Duygu İfade Edici (A.P.E.X.): 7 Adım (Resimlerle)
Yapay Bitki Duygu İfade Edici (A.P.E.X.): 7 Adım (Resimlerle)

Video: Yapay Bitki Duygu İfade Edici (A.P.E.X.): 7 Adım (Resimlerle)

Video: Yapay Bitki Duygu İfade Edici (A.P.E.X.): 7 Adım (Resimlerle)
Video: Yemeyin, Beyni Yavaşlatıyor! HER GÜN SOFRAMIZDA. İÇİNDE ARSENİK, CİVA VAR. KANSERİ TETİKLER! 2024, Temmuz
Anonim
Image
Image

Ama bekleyin… Dahası var!

Adım 1: Giriş

Tanıtım
Tanıtım
Tanıtım
Tanıtım
Tanıtım
Tanıtım

APEX nedir?

APEX, akıllı (tabii şirin) bir tesis izleme cihazıdır. Sadece herhangi bir bitkiye takın ve bitkinin "mutluluk" seviyesini gösterecektir! Bu, onları sulamayı unutmak gibi kötü bir alışkanlığınız varsa, bitkilerinizi sulamak için harika bir hatırlatmadır.

O nasıl çalışır?

Büyü. Şaka yapıyorum! APEX, bitkinin toprağına yerleştirilen bir nem sensörüne bağlı bir Arduino kullanır. Bu sensör toprağın nem içeriğini okuyacak ve ardından Arduino hangi yüzün görüntüleneceğini hesaplayacaktır.

Ama neden?

Neden olmasın?

Adım 2: Parçaları ve Araçları Toplama

Parçaların ve Araçların Toplanması
Parçaların ve Araçların Toplanması
Parçaların ve Araçların Toplanması
Parçaların ve Araçların Toplanması
Parçaların ve Araçların Toplanması
Parçaların ve Araçların Toplanması

Hadi içeri girelim! Bu Eğitilebilir Kitap için epeyce parça ve araca ihtiyacınız olacak. Neyse ki sizin için hepsi aşağıda listelenmiştir:

Mikrodenetleyiciler Yarışması ruhuyla, bu proje tamamen Amazon'dan satın alınan parçalarla yapıldı! (sponsorlu değil)

Parça listesi:

  • Arduino Uno
  • 8x8 LED Ekran
  • Kapasitif Dokunmatik Sensör
  • Nem Sensörü
  • 9V Pil Konektörü
  • 9V Pil

Araçlar Listesi:

  • 22 Ayar Tel
  • Elektrik bandı
  • Tel Sıyırıcılar
  • Havya
  • Lehim Sökme Pompası

Gerekli tüm ekipmanı topladıktan sonra Arduino yazılımını kurma zamanı!

Adım 3: Arduino IDE'yi Kurma

Arduino IDE'yi Kurma
Arduino IDE'yi Kurma
Arduino IDE'yi Kurma
Arduino IDE'yi Kurma
Arduino IDE'yi Kurma
Arduino IDE'yi Kurma

Bu projenin çalışması için Arduino'yu programlayabilmemiz gerekecek. Bu, Arduino Integrated Development Environment'ın (IDE) bilgisayarınıza indirilmesini ve kurulmasını gerektirir. Oldukça basit bir açıklama, ancak size süreç boyunca yol göstereceğim:

1. Arduino Web Sitesini Ziyaret Edin

2. İndirilenler Sayfasına gidin (Yazılım > İndirilenler)

3. İşletim Sisteminiz için İndirme Bağlantısına tıklayın

Yan Not: Program Windows, Mac ve Linux üzerinde çalışacaktır.

4. Windows'a Yükleme

  • Çalıştırmak için indirilen dosyaya çift tıklayın
  • Lisansı kabul etmek için "Kabul Et"e tıklayın
  • İstemlerin geri kalanını takip edin
  • Program şimdi yüklenmelidir!

(Kaybolursanız ekran görüntülerine bakmayı unutmayın)

5. Mac'e Yükleme

  • İndirilen dosyaya tıklayın
  • "Aç" ı seçin
  • Program otomatik olarak yüklenecek ve çalışacaktır!

(Kafanız karışırsa ekran görüntülerine bakmayı unutmayın)

6. İşte bu

Ve işin bitti! Artık Arduino IDE'yi sisteminize indirdiniz!

Adım 4: Kod

kod
kod
kod
kod
kod
kod

Bu adım tamamen kodla ilgilidir. Oldukça kısa bir program, bu yüzden sizinle birlikte bunun üzerinden geçeceğim ve nasıl çalıştığını açıklayacağım. Önce kısa bir genel bakış, ardından derinlemesine bir açıklama ve son olarak Arduino'ya nasıl aktarılacağı!

Kısa Genel Bakış

Kodun ayrıntılı açıklamasıyla ilgilenmeyenler için bir TL;DR segmenti sunuyorum! İşte temel açıklama. Arduino, her birkaç saniyede bir nem sensöründen değerler alır. Bu bilgi daha sonra belirli bir yüzü hesaplamak ve görüntülemek için kullanılır! Sonunda, kapasitif dokunmatik düğmenin ekranı açıp kapatmasını sağlayan bir miktar kod da var. Oldukça basit değil mi?

Nitty Cesur

Eğitimin bu kısmı, tüm programın satır satır nasıl çalıştığıyla çok ilgilenenler içindir. Neden bahsettiğimi anlamanıza yardımcı olması için yukarıdaki ekran görüntülerini sağlayacağım ve bu açıklamaya bazı kod satırlarını ekleyeceğim.

Bu program beş bölüme ayrılmıştır:

  1. Kitaplıkları Dahil Etme ve Değişkenler Oluşturma
  2. Kurulum İşlevi
  3. Yüz İfadeleri için İşlevler
  4. Arduino'yu Matrix Fonksiyonuna Yazma
  5. Döngü İşlevi

Kitaplıkları Dahil Etme ve Değişken Oluşturma:

Bu kodun ilk bölümü tamamen kullanacağımız değişkenler ve kütüphaneler ile ilgilidir.

#include "LedControlMS.h"

#define TouchSensor 7 LedControl lc=LedControl(12, 11, 10, 1); int sensörPin = A5; int sensörDeğeri = 0; bool başladı = yanlış; bool on = doğru; boolean basıldı = DÜŞÜK;

İlk satır, LedControlMS adlı bir kitaplık içerir. LED ekrana değer gönderebilmek için bu kütüphane gereklidir. Sonraki satır, dokunmatik sensör pinini 7'ye ayarlayan bir tanım ifadesidir. Bundan sonra, LED ekran pinlerini, nem sensörünü ve değerini tanımlayan üç değişkenimiz daha var. Son üç satırın tümü, dokunmatik düğmenin ve ekranın durumunu düzenleyen booleanlardır. Bundan sonra bayt değerlerimiz var:

bayt gülümseme[4]={B00000100, B00110010, B01100100, B01100000};bayt sürpriz[4]={B00001110, B00001010, B01101110, B10010000}; bayt meh[4]={B00000100, B00100100, B00100100, B00100000}; bayt üzgün[4]={B00000010, B01100100, B00110010, B00110000}; bayt ölü[6]={B00001010, B00100100, B00101010, B00100000, B01100000, B01101010}; bayt hatası[8]={B00111100, B01000010, B10100001, B10010001, B10001001, B10000101, B01000010, B00111100}; //Evil Faces byte esmile[4]={B00000010, B00101010, B01000100, B01000000}; bayt elaugh[4]={B00000010, B00101010, B01100100, B01100000}; bayt açık[4]={B00000010, B00101010, B00100100, B00100000}; bayt göz[4]={B00000001, B01101001, B01100010, B01100000}; bayt etalk[4]={B00000001, B00101001, B01100010, B01100000};

Bu değerler APEX'in tüm yüzlerini temsil eder. Her bayt, belirli bir satırdaki her pikselin durumunu dikte eden birden çok bit içeren bir dizidir. "1" ve "0" sırasıyla Açık/Kapalı'yı temsil eder.

Kurulum İşlevi:

Bir sonraki bölüme geçerken, kurulum fonksiyonumuz var.

void setup() { //MS Seri Çıkış Serial.begin(9600);

pinMode(TouchSensor, INPUT);

//LED Matris Kurulumu lc.shutdown(0, false); lc.setYoğunluk(0, 4); lc.clearDisplay(0); }

İsim bunu çok iyi açıklıyor. Dokunmatik sensörümüzü ve ekranımızı "ayarladığımız" yer burasıdır. İlk iki satır seri çıktımıza başlar (hata ayıklama için kullanılır). Üçüncü satır, dokunmatik sensör pimini bir girişe ayarlar ve son dört satır ekranı başlatır.

Yüz İfadeleri İçin İşlevler:

Bu muhtemelen en uzun bölümdür, ancak hepsi çok basit ve tekrarlayıcıdır.

geçersiz kırık() { lc.setRow(0, 0, hata[0]); lc.setRow(0, 1, hata[1]); lc.setRow(0, 2, hata[2]); lc.setRow(0, 3, hata[3]); lc.setRow(0, 4, hata[4]); lc.setRow(0, 5, hata[5]); lc.setRow(0, 6, hata[6]); lc.setRow(0, 7, hata[7]); }

void mutlu() {

lc.setRow(0, 0, gülümse[0]); lc.setRow(0, 1, gülümse[1]); lc.setRow(0, 2, gülümse[2]); lc.setRow(0, 3, gülümse[3]); lc.setRow(0, 4, gülümse[3]); lc.setRow(0, 5, gülümse[2]); lc.setRow(0, 6, gülümse[1]); lc.setRow(0, 7, gülümse[0]); }

boş düz() {

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 şaşırmış(){

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

boş ölmek() {

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

boş ağlama() {

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

void kötü gülümseme() {

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 kötü kahkaha() {

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 kötü düz() {

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

geçersiz şeytani() {

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

void kötü konuşma() {

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

Bu işlevler, ilk bölümdeki bayt değerlerimizi kullanarak her bir yüz ifadesini tanımlamak için kullanılır. Her satır bir x konumu ve bayt değerleri tanımlar ve ardından değerleri o sütuna uygular. Bazı işlevler, o yüzün değerlerini görüntülemek için kullanılan daha fazla satır olduğundan daha fazla satır gerektirir. Her yüz simetriktir, bu yüzden çizgileri tekrarlıyoruz.

WriteArduinoOnMatrix İşlevi:

Dördüncü bölüm, LED ekran üzerine uygun yüzleri hesaplamak ve yazmak için kullanılır. Su değerlerini kontrol eden ve ardından önceki bölümden farklı işlevleri çağırarak ekranı ayarlayan bir dizi else if ifadesinden oluşur.

void writeArduinoOnMatrix() { if(sensorValue > 0 && sensorValue 30 && sensorValue 100 && sensorValue 200 && sensorValue 400 && sensorValue 650 && sensorValue <= 800) { şaşırmış(); } başka { kırık(); } }

Sensörün çalışma aralığının dışına çıkması durumunda "kırık" yüzler eklediğimizi fark edebilirsiniz. Bu, meydana gelen bazı garip boş hataları önler ve bize kod içinde neler olup bittiğini daha iyi görsel olarak anlamamızı sağlar.

Döngü İşlevi:

Son fakat en az değil, döngü işlevidir. Bu kod tam olarak adının söylediğini yapar, döngüye girer! Bu fonksiyonda epeyce satır olmasına rağmen, aslında oldukça basittir. Kod önce düğme durumunu okur ve ekranın "Açık" olup olmadığını görür. Bunun doğru olduğunu tespit ederse, daha sonra APEX üzerinde bir yüz çizecek olan WriteArduinoOnMatrix işlevini çağıracaktır. Bu işlev döngü halinde olduğundan, ekranı istediğimiz sıklıkta güncelleyecektir. Bu gecikme, gecikme süresi değişkeni tarafından belirlenir.

void loop() { if (started == true){ delaytime = 3000; } //Oku Düğmesine basıldı = digitalRead(TouchSensor);

if (basılı) {

if (on == true) { lc.clearDisplay(0); açık = yanlış; gecikme (gecikme süresi); } başka { açık = doğru; gecikme (gecikme süresi); } } sensorValue = analogRead(sensorPin); gecikme (gecikme süresi); if (on == true) { //Çizilen Yüzler writeArduinoOnMatrix(); }

başladı = doğru;

}

Kodun tamamı bu kadar. Umarım şimdi her şeyin nasıl çalıştığını daha iyi anlamışsınızdır ve bu bilgiyi projenize göre özelleştirmeye başlamak için kullanabilirsiniz!

Kodu Arduino'ya Göndermek

Artık tüm kodu ele aldığımıza göre, onu Arduino'ya gönderme zamanı! Neyse ki, IDE bunu çok basit hale getiriyor. Tek yapmanız gereken Arduino'nuzu bir USB kablosuyla bilgisayarınıza takmak ve ardından IDE'nin sol üst köşesindeki sağ oka tıklamak. Kodun itilmesine izin verin ve doğru yaptıysanız, programın altında bir başarı mesajı görmelisiniz!

Adım 5: Devre Şeması

Devre şeması
Devre şeması

Koda benzer şekilde, devre şeması çok karmaşık değildir. Sadece üç sensörden ve Arduino'dan oluşur, bu yüzden size her birinin pin çıkışlarını söyleyeceğim ve başka bir yardıma ihtiyacınız varsa, yukarıdaki şemaya bakın.

LED Ekran:

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

Nem Sensörü:

  • Pozitif -> 5V
  • Negatif -> GRD
  • Sinyal -> A5

Kapasitif Dokunmatik Sensör:

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

Çok zor değil, değil mi? Bu pin çıkışıyla ilgili herhangi bir sorun yaşarsanız, kabloyu nasıl bağlayacağınız konusunda size yol gösterdiğim aşağıdaki videoya bakın.

Adım 6: Hepsini Bir Araya Getirmek

Hepsini bir araya koy
Hepsini bir araya koy
Hepsini bir araya koy
Hepsini bir araya koy
Hepsini bir araya koy
Hepsini bir araya koy

Nasıl bir araya geldiğini metin üzerinden açıklamak zor, bu yüzden kesinlikle bu kısım için videoya göz atmanızı öneririm. Aslında benimkini nasıl bir araya getirdiğimi tam olarak açıklamayacağım, bu çok zor. Ama belli belirsiz açıklamak için kablo bağlantılarını lehimledim ve tahtanın arkasına sardım. Sonra sensörleri yerleştirdim ve hepsini bir arada tutmak için elektrik bandı kullandım. Son olarak 9V pil ile test ettim ve çalıştığını anlayınca pili arkaya yerleştirip onu da bantladım. Daha önce de söylediğim gibi, BU ADIM İÇİN VİDEOYU İZLEYİN, hızlandırılmış ve telleri doğru şekilde sarmanıza yardımcı olacak güzel bir küçük lehimleme parçasına sahip. Kaybolursanız duraklatmaktan veya yarı hızda oynamaktan çekinmeyin.

Tebrikler! Her şey başarıyla giderse, artık tamamen işlevsel bir APEX birimine sahip olmalısınız!

Ünitenizi test etmek için sulanmış bir bitki bulun ve fişini prize takın! Bunun ya mutlu olduğunu ya da şaşırdığını görmelisiniz ve bu da çalışıyor olması gerektiği anlamına gelir!!! Projeyi tamamlamak için harika bir iş!

7. Adım: Sonuç

Çözüm
Çözüm

Ve tüm Eğitilebilirlik bu! Projeyi kontrol ettiğiniz için teşekkürler! Sorularınızı ve yorumlarınızı aşağıya bırakın ve bunun gibi daha havalı eğitimler için Urban Farming Guys'ı takip ettiğinizden emin olun! APEX kurulumunuzun nasıl gittiğini duymayı çok isteriz ve resimler çok takdir edilmektedir! Uğradığınız için tekrar teşekkürler, iyi günler!

(Bu Eğitilebilir Kitap, daha eski bir proje olan Plant Emoji'den esinlenmiştir!)

not Bu Eğitilebilir Kitap, Mikrodenetleyiciler yarışmasına katılmıştır, bu yüzden bize oy vermeyi unutmayın! Çok takdir ediyoruz:)

P. P. S. Make Magazine'de APEX'i alalım! Burada oy verin! Teşekkürler:)

Önerilen: