EsploraLightCalibrator

Bu çizimde Esplora'nın ışık sensörünün nasıl okunacağı ve kalibre edileceği gösterilmektedir. Işık seviyeleri bir konumdan diğerine değiştiği için, sensörü her konum için kalibre etmeniz gerekir. Bunu yapmak için sensörü birkaç saniye okursunuz ve en yüksek ve en düşük değerleri maksimum ve minimum olarak kaydedersiniz.

Kalibrasyonda elde ettiğiniz minimum ve maksimum değerleri kullanarak değerleri daha küçük bir aralığa eşleyerek LED'in parlaklığını ayarlamak için sensörün okumasını kullanırsınız.

Gerekli Donanım

  • Arduino Esplora

Devre

Bu örnek için yalnızca Arduino Esplora'nız gereklidir. Esplora'yı bir USB kablosuyla bilgisayarınıza bağlayın ve Arduino'nun Seri Monitörünü açın.

Esplora üzerinde ışık sensörü ve RGB led

Kod

Işık sensörü için maksimum ve minimum değerlerinizi tutmak için bazı değişkenler ve Esplora'ya sensörün kalibre edilip edilmediğini bildirmek için başka bir değişken oluşturun.

Bilgisayarınıza veri göndermek için bir seri bağlantı açmanız gerekir. Esplora'daki 9600 baud'da seri bağlantı noktası açmak için Serial.begin () kullanın.

Düğmeye 1 basılıp basılmadığını görmek için Esplora.readButton () öğesini kullanın. Öyleyse, aşağıda yazacağınız calibrate() işlevini çağırın.

Işık sensörünü okumak için Esplora.readLightSensor () kullanın. Bu size 0 ile 1023 arasında bir değer verir ve bu değer bir değişkende saklanır.

Sensörden gelen değeri maksimum ve minimum aralığınızı kullanarak LED için uygun bir aralığa eşlemek istersiniz. Map () işlevi 5 argüman alır, orijinal değer, sensörün minimum değeri, sensörün maksimum değeri, LED'in (0) minimum değeri ve LED'in (255) maksimum değeri. Bu değeri brightness adlı yeni bir değişkende brightness .

Map () işlevi değerleri 0 ve 255 ile sınırlamaz. Sensör okumalarını maksimum ve minimum değerlerinizin dışına çıkarırsanız, map () 0'dan küçük veya 255'ten yüksek değerler döndürür. bu aralık, call constrain ().

LED'in rengini 0 ile 255 arasında yeni değerinizle değiştirmek için Esplora.writeBlue () öğesini arayın.

Işık kalibre edildikten sonra, Serial.print () öğesini çağırarak değerleri Seri Monitöre gönderin. Bu şekilde bildirilen değerleri görmeye başlamalısınız:
light sensor level: 256 blue brightness: 10

Bu değerler, sensörü kalibre edene ve calibrated değişken true değerine ayarlanana kadar Seri Monitöre yazdırılmaz.

calibrate denilen kendi işlevinizi oluşturmak için. Bunu yapmak için loop() dışında şunu yazın

void calibrate (){

}
[Kodu Al]

Bu, calibrate adlı bir işlev oluşturur. Köşeli ayraçlar arasında yazdığınız tüm kod artık çiziminizde calibrate() çağırdığınızda yürütülecektir.

calibrate() öğesinde, düğmeye basıldığı sürece kodu çalıştırmak için while () öğesini kullanın.

Sensörün değerini okuyun ve bir değişkene kaydedin. Başlangıçta, minimum değeri yüksek olarak ayarlamıştınız. Işık sensörü değerini bundan daha düşük bir değerle karşılaştırın ve yeni minimum değer olarak kaydedin. Aynı şekilde, maksimum düşük değerini ayarlar ve yeni maksimumdan daha yüksek herhangi bir şey için okursunuz.

Kalibrasyon yaparken kalibrasyon değişkenini true ayarlayın.

Düğmeyi bıraktığınızda, calibrate() çalışmayı durdurur ve loop() geri döner.

/ *
Esplora Led kalibrasyonu

Bu çizimde ışık sensörünün nasıl okunacağı ve kalibre edileceği gösterilmektedir.
Işık seviyeleri bir konumdan diğerine değiştiği için,
Her konum için sensör. Bunu yapmak için sensörü birkaç saniye okursunuz,
ve en yüksek ve en düşük değerleri maksimum ve minimum olarak kaydedin.
Ardından, sensörün okumasını kullanırken (örneğin, parlaklığı ayarlamak için)
LED), sensörün okumasını minimum ile
ve maksimum.

22 Aralık 2012 tarihinde oluşturuldu
tarafından Tom Igoe

Bu örnek kamu malıdır.
* /


#include <Esplora.h>

// değişkenler:
int lightMin = 1023 ; // minimum sensör değeri
int lightMax = 0 ; // maksimum sensör değeri
kalibre bool = yanlış ; // sensörün henüz kalibre edilip edilmediği

void setup ( ) {
// seri iletişimi başlat:
Seri . başlar ( 9600 ) ;

// açık bir mesaj yazdır
Seri . println ( "Işık sensörünü kalibre etmek için Anahtar 1'i basılı tutun" ) ;
}

void loop ( ) {
// anahtara 1 basılırsa, kalibrasyon işlevine tekrar gidin:
eğer ( Esplora. readButton ( 1 ) == DÜŞÜK ) {
calibrate ( ) ;
}
// sensörü bir değişkene okuyun:
int ışık = Esplora. readLightSensor ( ) ;

// LED için ışık seviyesini bir parlaklık seviyesiyle eşleştirin
// min ve maks kalibrasyonunu kullanarak:
int parlaklık = harita ( ışık , lightMin , lightMax , 0 , 255 ) ;
// parlaklığı 0 ile 255 arasında bir aralıkla sınırlayın:
parlaklık = kısıtlama ( parlaklık , 0 , 255 ) ;
// parlaklığı mavi LED'e yazın.
Esplora. writeBlue ( parlaklık ) ;

// kalibrasyon yapılmışsa sensörü ve parlaklığı gösterin
// seri monitördeki seviyeler:
if ( calibrated == true ) {
// ışık sensörü seviyelerini ve LED seviyelerini yazdırın (neler olduğunu görmek için):
Seri . baskı ( "ışık sensörü seviyesi:" ) ;
Seri . baskı ( açık ) ;
Seri . baskı ( "mavi parlaklık:" ) ;
Seri . println ( parlaklık ) ;
}
// LED'in titremesini önlemek için bir gecikme ekleyin:
gecikme ( 10 ) ;
}

void calibrate ( ) {
// kullanıcıya seri monitörü kullanarak ne yapacağını söyleyin:
Seri . println ( "Anahtar 1'i basılı tutarken ışık sensörünün üzerine bir ışık tutun, sonra örtün." ) ;

// anahtara 1 basılıyken kalibre edin:
while ( Esplora. readButton ( 1 ) == DÜŞÜK ) {
// sensör değerini okuyun:
int ışık = Esplora. readLightSensor ( ) ;

// maksimum sensör değerini kaydedin:
if ( light > lightMax ) {
lightMax = ışık ;
}

// minimum sensör değerini kaydedin:
if ( light < lightMin ) {
lightMin = ışık ;
}
// ileride başvurmak üzere kalibre edildiğinizi unutmayın:
kalibre edilmiş = doğru ;
}
}

See Also