Ders 14/31-5: Arduino kodlama map() örneği 2
Bu eğitim, Arduino map() fonksiyonunu kullanarak bir LED'in parlaklığını, analogWrite() tarafından gereken ham 0–255 aralığı yerine bir yüzde değeriyle (0–100%) nasıl kontrol edeceğinizi gösterir. Bu, kodunuzu basitleştiren ve keyfi bayt değerleri yerine yüzdelerle düşünebildiğiniz için çok daha sezgisel hale getiren temel bir tekniktir.
Bu beceri, sensör okumalarını ölçeklemeniz veya kontrol sinyallerini dönüştürmeniz gereken her proje için gereklidir. Örneğin, şunları yapmak için kullanabilirsiniz:
- Bir potansiyometrenin okumasına dayalı olarak bir LED'in parlaklığını veya bir motorun hızını kontrol etmek.
- Bir sıcaklık sensörünün çıkışını (örneğin, 0–1023) Celsius veya Fahrenheit aralığına dönüştürmek.
- Bir joystick'in analog girişini bir servo motorun konumunu kontrol etmek için eşlemek.
- Bir cihazın güç seviyesini ayarlamak için yüzde değerinin kullanıldığı basit bir kullanıcı arayüzü oluşturmak.
Bu dersin sonunda, okunması ve ayarlanması daha kolay olan daha temiz, daha sürdürülebilir kod yazabileceksiniz.
Donanım/Bileşenler
Bu proje, yeni başlayanlar için mükemmel olan minimum bir bileşen seti kullanır. İhtiyacınız olacaklar:
- Bir Arduino kartı (örneğin, Uno).
- Bir LED.
- 220 ohm'luk bir direnç.
- Jumper kablolar.
- Bir breadboard (isteğe bağlı ancak önerilir).
Bağlantı Kılavuzu
Bu projenin bağlantısı, videoda gösterildiği gibi (videoda 20:47'de) çok basittir. LED, Arduino'nun 3 numaralı pinine 220 ohm'luk akım sınırlama direnci üzerinden bağlanır.
LED'in anotunu (uzun bacak) direnç üzerinden 3 numaralı pine bağlayın. LED'in katodunu (kısa bacak) Arduino'daki toprak (GND) pinine bağlayın.
Kod Açıklaması
Bu örnek, LED'in parlaklığını kontrol etmeyi basitleştiren kullanıcı tanımlı bir fonksiyona odaklanır. Kod, kodu sezgisel yapan anahtar olan pwmValue() adlı özel bir fonksiyon etrafında inşa edilmiştir.
Kodun yapılandırılabilir kısımlarını inceleyelim:
int LEDpin = 3; //LED için pini tanımla
Bu satır, LED'in bağlı olduğu Arduino pinini tanımlar. 3 sayısını Arduino kartınızdaki PWM destekli herhangi bir başka pinle değiştirebilirsiniz.
Projenin çekirdeği, özel fonksiyon pwmValue()'dir. Bu fonksiyon, girdi olarak bir yüzde değeri alır ve bunu analogWrite() tarafından kullanılan 0–255 aralığına dönüştürür. map() fonksiyonunun sihrini yaptığı yer burasıdır.
int pwmValue(int percent)
{
if(percent >=0 && percent <=100)
{
return map(percent, 0,100, 0,255);
}else
{
return 0;
}
}
Bu fonksiyonu kullanmak için, istediğiniz parlaklık yüzdesiyle çağırmanız yeterlidir. Fonksiyon, analogWrite() için doğru değeri döndürecektir. Örneğin, pwmValue(60) 153 değerini döndürür, bu da 255'in %60'ına karşılık gelir. Fonksiyon ayrıca, girdi yüzdesinin 0 ile 100 arasında olduğundan emin olmak için bir güvenlik kontrolü içerir ve bu aralığın dışındaysa 0 döndürür.
setup() fonksiyonunda, bunun nasıl kullanıldığını görebilirsiniz:
int b=5;//%60 parlaklık
Serial.println( pwmValue(b) );//seri monitöre yazdır
analogWrite(LEDpin, pwmValue(b));// LED'i %60 parlaklıkla yak
Burada, b değişkeni istediğiniz parlaklık yüzdesine ayarlanır. pwmValue(b) fonksiyonu daha sonra hem eşlenen değeri Seri Monitöre yazdırmak hem de LED'in parlaklığını ayarlamak için kullanılır. LED'in parlaklığını değiştirmek için yalnızca b değerini değiştirmeniz gerekir. map() fonksiyonu sizin için gerekli tüm hesaplamaları yapar.
Canlı Proje/Gösterim
Videoda sunucu, b değişkeninin değerini değiştirerek ve kodu Arduino'ya yükleyerek projeyi gösterir. b 60 olarak ayarlandığında, kod bunu 153'e eşler ve LED %60 parlaklıkta yanar. b'yi 90 olarak değiştirmek 229'a eşler ve LED'i belirgin şekilde daha parlak yapar. 100 olarak ayarlamak 255'e eşler, bu da maksimum parlaklıktır. Gösterim, map() fonksiyonunun sezgisel bir yüzde değeri kullanarak LED'i kontrol etmenize nasıl izin verdiğini açıkça gösterirken, Seri Monitör pine gönderilen tam 0–255 değerini doğrular (videoda 21:29'da).
Bu videodan ilgili projeler
- Ders 14/31-1: Arduino Millis (delay'siz) ve map fonksiyonları | SunFounder Robojax
- Ders 14/31-2: Arduino kodlama millis() örnek 2 olay ile
- Ders 14/31-3: Arduino kodlama millis() örnek 3 buton ile
- Ders 14/31-4: Arduino kodlama map() örnek 1
Bölümler
- [00:00] Millis ve map fonksiyonlarına giriş
- [01:19] Millis nedir ve neden kullanılır
- [05:46] Eylem yapmak için Millis'i bir olayla kullanma
- [08:35] Millis örnek 2 buton ile
- [12:14] Millis örnek 3 iki buton basışını kontrol etme
- [17:20] map() fonksiyonuna giriş
- [19:47] Yüzdeyi LED parlaklığına eşleme için kod örneği
- [20:47] map() fonksiyonunun canlı gösterimi
- [22:41] Eşlemeyi işlemek için özel bir fonksiyon oluşturma
/*
Lesson 14/31-5: Arduino coding map( ) example-2
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
int LEDpin = 3; //defind pin for LED
void setup() {
Serial.begin(9600);//initialzie serial monitor with 9600 baud
pinMode(LEDpin, OUTPUT);//set pin as output
int b=5;//60% brightness
Serial.println( pwmValue(b) );//print it on serial monitor
analogWrite(LEDpin, pwmValue(b));// turn the LED on with 60% brightness
}
void loop() {
}
/*
* pwmValue(int percent)
* @param precent is value between 0 to 100
* @return it returns the mapped value from 0 to 255
* written by Ahmad Shamshiri on Dec 9, 2022
*
*/
int pwmValue(int percent)
{
if(percent >=0 && percent <=100)
{
return map(percent, 0,100, 0,255);
}else
{
return 0;
}
} //pwmValue end
İhtiyacın olabileceğini düşünüyor
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
-
Diğer
Kaynaklar ve referanslar
-
DışPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Dosyalar📁
Kullanım Kılavuzu
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB