خواندن مقدار آنالوگ
در Arduino Uno، analogRead(A0) به طور پیشفرض خروجی ADC دهبیتی میدهد؛ یعنی عددی تقریبا بین ۰ تا ۱۰۲۳ متناسب با ولتاژ ورودی بین GND و مرجع ADC.
int raw = analogRead(A0);
Serial.println(raw);
قبل از تبدیل این عدد به دما یا فاصله باید رابطه سنسور را بدانیم. 512 به خودی خود «۵۱۲ درجه» یا «۵۱۲ ولت» نیست؛ فقط کد ADC است.
Serial Monitor را از روز اول استفاده کن
void setup() {
Serial.begin(9600);
}
Baud Rate پنجره Serial باید با کد سازگار باشد. چاپ بیش از حد سریع هم میتواند Log را شلوغ کند و روی زمانبندی اثر بگذارد؛ برای تمرین میتوان هر ۱۰۰ms یک نمونه چاپ کرد.
analogWrite و PWM
روی Uno، analogWrite(pin, value) روی پایههای PWM سیگنال پالس تولید میکند. مقدار معمول ۰ تا ۲۵۵ است:
- 0 ≈ همیشه LOW
- 127 ≈ حدود 50% Duty Cycle
- 255 ≈ همیشه HIGH
این خروجی DAC واقعی نیست. LED آن را به صورت روشنایی متوسط میبیند و Driver موتور میتواند از آن برای کنترل توان متوسط استفاده کند.
Scale کردن محدودهها
اگر سنسور ۰..۱۰۲۳ است و PWM ۰..۲۵۵، باید Scale کنیم. تابع map() برای عدد صحیح مفید است:
int pwm = map(raw, 0, 1023, 0, 255);
analogWrite(ledPin, pwm);
قبل از استفاده از map مطمئن شو محدوده واقعی سنسور چیست؛ ممکن است سنسور در عمل فقط ۲۲۰ تا ۸۰۰ تولید کند و Scale کردن آن محدوده نتیجه بهتری بدهد.
تمرین
یک پتانسیومتر را به A0 و LED را به پایه PWM وصل کن. raw و pwm را همزمان روی Serial چاپ کن. سه نقطه کم/وسط/زیاد را ثبت کن و ببین آیا روشنایی تقریبا مطابق انتظار تغییر میکند. اگر مقدار خام میپرد، قبل از فیلتر نرمافزاری اتصالات و GND را بررسی کن.