Küresel ısınma iklimimizi gün geçtikçe daha da kötü etkliyor. Bu yüzden ülkeler küresel ısınmanın etkisini azaltmak için birtakım önlemler almakta ve bazı anlaşmalara imza atmaktadır. Küresel ısınmanın etkisini azaltmak için yenilenebilir enerji kaynaklarının kullanımı ve enerjinin verimli kullanılması da dikkat edilmesi konulardan bazılarıdır. Örneğin şehirlerdeki sokak aydınlatmalarının hata sebebiyle açık kalması, yüksek enerji tüketen aydınlatma sistemlerinin kullanılması gibi birçok neden enerjinin verimli kullanılmasını engellemektedir. Bu hataların önüne geçmek için enerjinin yalnızca ihtiyaç duyulduğu zamanlarda kullanılmasını sağlamak için birçok elektronik ve dijital sistemler mühendisler tarafından geliştirilmektedir.
Bu projemizde PicoBricks’teki ışık sensörünü kullanarak gün ışığına göre çalışan bir alarm yapacağız.
Detaylar ve Algoritma
Bu projemizde gün ışığına göre çalışacak bir alarm yapacağımızdan söz ettik. Tasarlayacağımız bu alarm sistemi sabahları otomatik olarak ses verecek şekilde ayarlanacak. Bunun için bir LDR sensör kullanacağız. Ayrıca kullanıcıya bazı mesajlar göstermek için bir OLED ekran, alarm için bir buzzer, ışıklı geri bildirim için bir LED, alarmı kapatmak için kullanıcının basması gereken bir buton kullanacağız.
Bileşenler
1x PicoBricks
Devre Şeması
PicoBricks modülleri kablolar olmadan kodlanabilir ve çalıştırılabilir. Ancak modülleri panodan ayırarak kullanmak isterseniz bağlantılar için kablo kullanmanız gerekecektir.
MicroBlocks Kodları
Microblocks kodlarına yukarıdaki resmi Run sekmesine sürükleyerek ulaşabilirsiniz.
MicroPython Kodları
from machine import Pin,I2C,ADC,PWM #to access the hardware on the pico
from picobricks importSSD1306_I2C #OLED Screen Library
import utime
from picobricks importWS2812 #ws8212 library
#OLED Screen Settings
WIDTH=128HEIGHT=64
sda=machine.Pin(4)
scl=machine.Pin(5)
#initialize digital pin 4 and 5as an OUTPUTforOLED Communication
i2c=machine.I2C(0,sda=sda, scl=scl, freq=1000000)
neo =WS2812(pin_num=6, num_leds=1, brightness=0.3)#initialize digital pin 6as an OUTPUTfor NeoPixel
oled =SSD1306_I2C(128,64, i2c)
ldr =ADC(Pin(27))#initialize digital pin 6as an OUTPUTfor NeoPixel
button =Pin(10,Pin.IN,Pin.PULL_DOWN)#initialize digital pin 10as an INPUTfor button
buzzer =PWM(Pin(20, Pin.OUT))#initialize digital pin 20as an OUTPUTfor buzzer
buzzer.freq(1000)BLACK=(0,0,0)WHITE=(255,255,255)
#RGB black and white color code
oled.fill(0)
oled.show()
neo.pixels_fill(BLACK)
neo.pixels_show()if ldr.read_u16()<4000:
wakeup = True
else:
wakeup = False
while True:while wakeup==False:
oled.fill(0)
oled.show()
oled.text("Good night",25,32)
oled.show()
#Show on OLED and print "Good night"
utime.sleep(1)if ldr.read_u16()40000:
wakeup= False
utime.sleep(1)
#wait for one second
Arduino C Kodları
#include
#ifdef __AVR__
#include
#endif
#define PIN6
#define NUMPIXELS1
Adafruit_NeoPixel pixels(NUMPIXELS,PIN,NEO_GRB+NEO_KHZ800);
#include
#include "ACROBOTIC_SSD1306.h"
int button;voidsetup(){// put your setup code here, to run once:
Wire.begin();
oled.init();
oled.clearDisplay();
#ifdefined(__AVR_ATtiny85__)&&(F_CPU==16000000)clock_prescale_set(clock_div_1);
#endif
pinMode(10,INPUT);pinMode(27,INPUT);pinMode(20,OUTPUT);
pixels.begin();
pixels.setPixelColor(0, pixels.Color(0,0,0));
pixels.show();}voidloop(){// put your main code here, to run repeatedly:
oled.setTextXY(4,3);
oled.putString("Good night");if(analogRead(27)<200){while(!(button ==1)){
button=digitalRead(10);
oled.setTextXY(4,2);
oled.putString("Good morning");
pixels.setPixelColor(0, pixels.Color(255,255,255));
pixels.show();tone(20,494);}
oled.clearDisplay();
oled.setTextXY(4,1);
oled.putString("Have a nice day");noTone(20);
pixels.setPixelColor(0, pixels.Color(0,0,0));
pixels.show();delay(10000);}}