Arduino ile uzun süreli Zamanlayıcı Uygulaması Yapma

Arduino Başlangıç ​​Seti: Proje 8

Proje adı: DİJİTAL HOURGLASS

Keşfedin: Uzun veri türü, zamanlayıcı oluşturma

Kod:

// declare constant
const int switchPin = 8;

// declare variables
int switchState = 0;
int prevSwitchState = 0;
unsigned long previousTime = 0;// positive variable 32 bit,  can count up to 4,294,967,295. will hold the time the LED was last changed
int led =2 ;// will be used to count which LED is the next one to be turned on. start out with pin 2
long interval = 1000;// interval between each LED turning on
//*************************************************************************
void setup() {
  Serial.begin(9600);// open serial port, 9600 bits per second
  for (int x = 2; x < 8; x++) {// LEDs connected to digital 2 - 7 
    pinMode(x, OUTPUT);// declare LED pins as OUTPUT
  }
  pinMode(switchPin, INPUT);// declare Switch pin as an INPUT
}//************************************************************************
void loop() {
  unsigned long currentTime = millis();// get the amount of time the Arduino has been running and store it in a local variable 
  if (currentTime - previousTime > interval) {
    previousTime = currentTime;
    digitalWrite(led, HIGH);
    led++; 
    if (led == 7) {// to check if the LED on pin 7 is turned on
    }
  }
  switchState = digitalRead(switchPin);// read the switch value into the switchState variable
  Serial.println(switchState);// print the switchState variable
  if (switchState != prevSwitchState) {//  checks to see if switchState does not equal prevSwitchState
    for (int x = 2; x < 8; x++) {
      digitalWrite(x, LOW);// if they are different, turn the all LEDs off
    }
    led = 2;// return the led variable to the first pin
    previousTime = currentTime;// reset the timer for the LEDs by seting previousTime to currentTime
  }
  prevSwitchState = switchState;// save the switch state in prevSwitchState , so you can compare it to the value you get for switchState in the next loop()
}

sketch

Bu projede, şu parçalara ihtiyacınız var:

1.Aruduino Uno R3 (Arduino’nun diğer sürümünü de kullanabilirsiniz)

2. atlama kabloları

3. Direnç 7 adet (6 adet 220 Ohm, 1 adet 10 KOhm)

4. Breadboard yarım boy 

5. Arduino IDE (siz indirebilirsiniz burada  )

6. Eğim anahtarı 1 adet

7. LED 6 adet (kırmızı)

GENEL

Arduino ile belirli bir zaman aralığında bir şey olmasını istediğinizde, delay () yöntemini kullandınız . Arduino delay () işlevini çağırdığında, gecikme süresi boyunca mevcut durumunu dondurur. Bu, beklerken başka bir girdi veya çıktı olamayacağı anlamına gelir. Gecikmeler ayrıca zamanı takip etmek için çok da yardımcı değildir. Her 10 saniyede bir şeyler yapmak isteseydiniz, 10 saniyelik bir gecikmeye sahip olmak oldukça hantal olurdu. Millis () fonksiyonu bu sorunları çözmek için yardımcı olur. Arduino’nuzun milisaniye cinsinden çalıştığı süreyi izler. Daha önce kalibrasyon için bir zamanlayıcı oluşturduğunuzda Arduino Başlangıç ​​Kiti Proje 6’da kullandınız. Şimdiye kadar değişkenleri int olarak bildirdiniz . Bir int (tam sayı)16 bit bir sayıdır, değerleri -32,768 ve 32,767 arasında tutar. Bunlar çok büyük sayılar olabilir, ancak Arduino millis () ile saniyede 1000 kez sayıyorsa , bir dakikadan daha az bir sürede alanınız tükenir . Uzun veri türü 32 bitlik bir sayı tutar (-2,147,483,648 ve 2,147,483,647 arasında). Negatif sayıları almak için geriye doğru zaman çalıştıramadığınız için, millis () zamanını saklamak için değişkene imzasız bir uzun denir . Bir veri türü işaretsiz olarak adlandırıldığında , yalnızca pozitif olur. Bu, daha da yüksek saymanıza izin verir. Bir imzasız uzun 4,294,967,295 kadar sayabilir. Milislerin () neredeyse 50 gün boyunca zaman depolaması için yeterli alan . Mevcut millis () ‘i karşılaştırarakbelirli bir değere belli bir süre geçip geçmediğini görebilirsiniz. Kum saatinizi ters çevirdiğinizde, bir tilt düğmesi durumunu değiştirecek ve bu da LED’lerin yanmasını sağlayacak. Eğme anahtarı, açık / kapalı bir sensör olması gibi normal bir anahtar gibi çalışır. Burada dijital giriş olarak kullanacaksınız. Eğim anahtarlarını benzersiz yapan şey, yönlendirmeyi algılamalarıdır. Tipik olarak, içinde metal bilyeli olan mahfazanın içinde küçük bir boşluk bulunur. Doğru şekilde yatırıldığında, top boşluğun bir tarafına yuvarlanır ve breadboard’unuzdaki iki kabloyu birleştirerek düğmeyi kapatır. Altı LED ile kum saatiniz adından da anlaşılacağı gibi bir saat boyunca çalışır.

DEVRE

Breadboard’unuza güç ve toprak bağlayın. Altı LED’in anotunu (uzun bacak) 2-7 numaralı dijital pinlere bağlayın. LED’leri toprağa 220-ohm dirençlerle bağlayın. Eğim anahtarının bir kablosunu 5V’a bağlayın. Diğerini 10 kilometrelik bir direnç ile toprağa bağlayın. Buluştukları kavşağı dijital pim 8’e bağlayın. Bunun çalışması için Arduino’nuzu bilgisayara bağlamanıza gerek yoktur. Karton veya strafor içeren bir stand inşa etmeyi deneyin ve taşınabilir bir sürüm elde etmek için Arduino’yu bir batarya ile güçlendirin. Işıkların yanında bazı sayısal göstergelerle bir kapak oluşturabilirsiniz. Eğim anahtarları, bir şeyin yönünü belirlemek için harika, ucuz araçlardır. Akselerometreler başka tür bir eğim sensörüdür, ancak daha fazla bilgi verirler. Ayrıca çok daha pahalıdırlar.

KOD

Her şeyin çalışabilmesi için eskizinizde çok sayıda global değişkene ihtiyacınız var. Başlamak için, switchPin adlı bir sabit oluşturun . Bu, eğim anahtarınızın açık olduğu pimin adı olacaktır. İmzasız uzun tip bir değişken oluşturun , Bu, bir LED’in en son değiştirildiği süreyi koruyacaktır. Anahtar durumu için bir değişken ve önceki anahtar durumunu tutmak için başka bir değişken oluşturun. Bu ikisini, anahtarın konumunu bir döngüden diğerine karşılaştırmak için kullanırsınız. Led adlı bir değişken oluşturun. Bu, bir sonraki açılacak LED’in hangisi olduğunu saymak için kullanılacaktır. Pim 2 ile başlayın. Oluşturduğunuz son değişken, her bir LED’in açılması arasındaki aralıktır. Bu uzun sürecekveri tipi. 10 dakika içinde (her bir LED’in yanması arasındaki süre) 600.000 milisaniye geçer. Işıklar arasındaki gecikmenin daha uzun veya daha kısa olmasını istiyorsanız, değiştirdiğiniz sayı budur. Kurulumunuzda (), LED pinlerini 2-7 çıkış olarak bildirmeniz gerekir. Bir for () döngüsü, altı tanesinin tümünü yalnızca 3 satırlık bir kod satırı ile OUTPUT olarak bildirir. Ayrıca switchPin’i bir INPUT (GİRİŞ) olarak bildirmeniz gerekir. Ne zaman döngü () başlar, sen Arduino ile çalışmakta olduğu süreyi alacağız milisaniye () ve CurrentTime adında yerel bir değişkende saklayın. Bir if () ifadesi kullanarak , bir LED’i açmak için yeterli zamanın geçtiğini kontrol etmiş olursunuz. Çıkar CurrentTime gelen previousTimeve aralık değişkeninden daha büyük olup olmadığını kontrol edin. 600.000 milisaniye geçtiğinde (10 dakika), öncekiTime değişkenini currentTime değerine ayarlarsınız. priorTime bir LED’in en son ne zaman açıldığını gösterir. Eğer belirledikten sonra previousTime , LED açın ve led şekilde arttıracaktır. Zaman aralığını bir sonraki geçiinizde bir sonraki LED yanacaktır. Pim 7’deki LED’in açık olup olmadığını kontrol etmek için programdaki ifadeyi bir tane daha ekleyin. Bununla henüz bir şey yapma. Bir saat sonra ne olacağına siz karar verin. Şimdi saati kontrol ettikten sonra, anahtarın durumunu değiştirip değiştirmediğini görmek istersiniz. Switch değerini, switchState değişkenine okuyun . Bir if () ileAnahtarın daha önce olduğundan farklı bir konumda olup olmadığını kontrol edin. ! = SwitchState eşit prevSwitchState yapar değilse değerlendirme denetler. Farklıysa, LED’leri turn çevirin, led değişkenini ilk pime getirin ve LED’lerin zamanlayıcısını, öncekiTime’yi currentTime olarak ayarlayarak sıfırlayın. Döngünün sonunda () , anahtar durumunu prevSwitchState konumuna kaydedin , böylece bir sonraki döngüde () switchState için aldığınız değerle karşılaştırabilirsiniz .

BAŞLANGIÇ

Tahtayı programladıktan sonra, bir saatteki zamanı kontrol edin. 10 dakika geçtikten sonra, ilk LED açık olmalıdır. Bundan sonra her 10 dakikada bir, yeni bir ışık yanacaktır. Bir saatin sonunda, altı ışığın tümü açık olmalıdır. Devreyi çevirdiğinizde ve yatırma anahtarının durumunu değiştirmesine neden olduğunuzda, ışıklar sönecek ve zamanlayıcı tekrar başlayacaktır. Saat bir saate ulaştığında ve altı ışığın hepsi yandığında, sadece yanarlar. Sesler veya ışıkların yakılması, saat dolduğunda dikkatinizi çekmenin iyi bir göstergesidir. Tüm değişkenlerin açık olup olmadığını görmek için led değişkeni kontrol edilebilir, bu birinin dikkatini çekmeyi kontrol etmek için iyi bir yer. Kumla doldurulmuş bir kum saatinden farklı olarak, ışıklar anahtarın yönüne bağlı olarak yukarı ya da aşağı gider. SwitchState’i kullanabilirsiniz Bunu yapmak için değişken.

ÖZET

Olaylar arasındaki süreyi ölçmek için millis () işlevini kullanın. Ürettiği sayılar bir int içinde saklayabildiğinizden daha büyük olduğundan, değerlerini saklamak için uzun süre işaretsiz veri türünü kullanmanız gerekir.

Youtube’daki filmlerden birini görmek için buraya tıklayın .

Posted in Makaleler.