İçeriğe Geç

Kendi Akıllı Saksınızı Yapın

18 Jan 2024
Make DIY Smart Flower Plant Pot

Çok yoğun çalışan veya her gün okula giden insanlarız. Çok sevdiğimiz orkidemizi zamanında sulamayı unutabiliyoruz. 

Bu nedenle bu projeyi geliştirmeye karar verdim. Bu projede adım adım Raspberry Pi kiti PicoBricks kullanarak IoT destekli, akıllı bitki pot'umuzu yapmayı sizlere göstereceğim. Hadi başlayalım.

Öncelikle akıllı çiçek saksınızı yapmaya başlamadan önce bitkinizin hangi sıklıkla sulanması gerektiğini öğrenmelisiniz. Bitkinizi az sulayıp kurutmak veya çok sulayıp öldürmek istemezsiniz değil mi? :) Ben de öyle düşünmüştüm.

Akıllı saksının özellikleri

  1. Anlık olarak toprağın nem ve sıcaklık ölçümünü gerçekleştiriyor.
  2. Ölçülen nem bilgileri OLED ekrana yazdırılıyor.
  3. 12x adressable led'de topraktaki nem seviyesine göre ışık yanıyor. 
  4. Topraktaki nem miktarı ayarladığınız seviyenin altına düşerse akıllı saksı otomatik olarak sulama yapıyor.

Wiring Diagram

Gerekli Compoponentler

  • Bir plat pot
  • Raspberry Pi
  • Pompa
  • Su borusu
  • Sıcaklık ve Nem Sensörü
  • 12x Adressable Led
  • OLED Screen

Hepsi bu kadar. Üstelik eğer PicoBricks IoT kitine sahipseniz sıcaklık ve nem sensörüne ve OLED screen'e, Raspberry Pi Pico W'ya ve pompa'ya sahipsiniz demektir. Tek yapmanız gereken bir saksı ve led almanız.

Adım adım Smart Bitki Saksısı Nasıl Yapılır?

 Şimdi sizlere adım adım tüm işlemleri anlatacağım merak etmeyin.

Adım 1: Tüm Malzemeleri Hazırlayın

Yukarıda yazdığımız malzemelerin hepsini aldıktan sonra bitkinize uygun toprağı saksınıza dökün ve toprağa bitkinizi yerleştirin. Nasıl yapacağınızı bilmiyorsanız şu rehber size yardımcı olabilir:

How to Plant Flowers?

Halka LED'inizi saksınızın ortasına saksınızı yerleştirin. 

Toprağa sıcaklık ve nem sensörünü daldırın.

Sıcaklık ve nem sensörünü Raspberry Pi'ınıza kablo ile bağlayın.

Nasıl yapılacağını bilmiyorsanız şu rehberi inceleyebilirsiniz:

How to connect Temperature sensor to Raspberry Pi?

Eğer PicoBricks'e sahipseniz kablo ve lehim ile uğraşmanıza gerek yok. :)

Adım 2: Kodları Raspberry Pi'a Yükleyin

Aşağıda bu proje için gerekli kodları bulabilirsiniz. 

Thonny IDE ve Arduino C'ya uygun kodları verdik. Hangisi sizin için daha uygunsa onu kullanabilirsiniz. 

Eğer bir PicoBricks'e sahipseniz ve PicoBricks'inize nasıl kod yüklenir bilmiyorsanız şu sayfamızı ziyaret edebilirsiniz:

How to Use PicoBricks?

BricksIDE Kodları

Python Kodları


from time import sleep
from machine import PWM
from machine import Pin
from machine import ADC
from picobricks import WS2812
from machine import I2C
from picobricks import SSD1306_I2C
import math
import machine
import time

motor_1 = PWM(Pin(21))
motor_1.freq(50)
motor_1.duty_u16(0)
i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=200000)
oled = SSD1306_I2C(128, 64, i2c, addr=0x3c)
import math
adc_28 = machine.ADC(28)

while True:
    motor_1.duty_u16(0 * 650)
    ws2812 = WS2812((12), brightness = 1)
    ws2812.pixels_fill(((0), (0), (0)))
    ws2812.pixels_show()
    oled.fill(0)
    oled.text("{}".format("Soil Moisture "), 10, 0)
    oled.text("{}".format("Value"), 45, 10)
    soilMoistureValue = round(round( adc_28.read_u16() - 0 ) * ( 100 - 0 ) / ( 65535 - 0 ) + 0)
    ledState = round(round( soilMoistureValue - 0 ) * ( 12 - 0 ) / ( 100 - 0 ) + 0)
    print(ledState)
    oled.text("{}".format(soilMoistureValue), 55, 30)
    oled.show()
    if ledState == (0):
        ws2812 = WS2812((1), brightness = 1)
        ws2812.pixels_fill(((255), (0), (0)))
        ws2812.pixels_show()
        motor_1.duty_u16(100 * 650)
        time.sleep((1))
    if ledState <= (4):
        ws2812 = WS2812(ledState, brightness = 1)
        ws2812.pixels_fill(((255), (0), (0)))
        ws2812.pixels_show()
        motor_1.duty_u16(100 * 650)
        time.sleep((1))
    if ledState > (4) and ledState <= (8):
        ws2812 = WS2812(ledState, brightness = 1)
        ws2812.pixels_fill(((0), (0), (255)))
        ws2812.pixels_show()
        motor_1.duty_u16(100 * 650)
        time.sleep((0.5))
    if ledState > (10) and ledState <= (16):
        ws2812 = WS2812(ledState, brightness = 1)
        ws2812.pixels_fill(((0), (255), (0)))
        ws2812.pixels_show()
        motor_1.duty_u16(0 * 650)
    if ledState > (8) and ledState <= (12):
        ws2812 = WS2812(ledState, brightness = 1)
        ws2812.pixels_fill(((255), (0), (0)))
        ws2812.pixels_show()
        motor_1.duty_u16(0 * 650)
    time.sleep((1))

Arduino C Kodları


#include 
#include "ACROBOTIC_SSD1306.h"
#include 

#define PIN        6
#define NUMPIXELS 25

#define SMO_SENSOR 28
#define PUMP_MOTOR 21
Adafruit_NeoPixel ring(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int ledState;
int soilMoistureValue;

void setup() {
  Wire.begin();
  oled.init();
  oled.clearDisplay();
  ring.begin();
  ring.show();
  ring.setBrightness(50);
  pinMode(SMO_SENSOR,INPUT);
  pinMode(PUMP_MOTOR, OUTPUT);

}

void loop() {
  digitalWrite(PUMP_MOTOR, LOW);
  oled.setTextXY(0, 1);
  oled.putString("Soil Moisture");
  oled.setTextXY(1, 4);
  oled.putString("Value");
  soilMoistureValue = round(map(analogRead(SMO_SENSOR), 0, 1023, 0, 100));
  ledState = round(map(soilMoistureValue, 0, 100, 0, 25));
  Serial.println(ledState);
  oled.setTextXY(3,5);
  oled.putString(String(soilMoistureValue));

  if (ledState == 0) {
    ring.setPixelColor(1, 255, 0, 0, 0);
    ring.show();
    digitalWrite(PUMP_MOTOR, HIGH);
    delay(1000);
  }
  if (ledState <= 5) {
    ring.setPixelColor(ledState, 255, 0, 0, 0);
    ring.show();
    digitalWrite(PUMP_MOTOR, HIGH);
    delay(1000);
  }
  if (ledState > 5 && ledState <= 10) {
    ring.setPixelColor(ledState, 0, 0, 255, 0);
    ring.show();
    digitalWrite(PUMP_MOTOR, HIGH);
    delay(500);
  }
  if (ledState > 10 && ledState <= 16) {
    ring.setPixelColor(ledState, 0, 255, 0, 0);
    ring.show();
    digitalWrite(PUMP_MOTOR, LOW);
  }
  if (ledState > 16 && ledState <= 25) {
    ring.setPixelColor(ledState, 255, 0, 0, 0);
    ring.show();
    digitalWrite(PUMP_MOTOR, LOW);
  }
  delay(300);
}

MicroBlocks Kodları

Önceki Gönderi
Sıradaki Gönderi

Abone olduğun için teşekkürler!

Bu e-posta kaydedildi!

Görünümü satın alın
Seçenekleri Seçin

Seçeneği Düzenle

Stok Bildirimi

Karşılaştır

Ürün Stok KoduDeğerlendirmeAçıklama Kategori Uygunluk Ürün Tipi Diğer Detaylar
this is just a warning
Giriş Yap
Alışveriş Sepeti
0 Ürünler
Same Day Shipping No Extra Costs
Easy Returns Guarantee Return with Ease
Secure Checkout Secure Payment