Управление яркостью светодиода через Serial: LED Dimmer
Отправляйте байты с компьютера на Arduino через Serial-порт и управляйте яркостью светодиода в реальном времени с помощью Processing или Max/MSP.
В этом уроке мы разберём, как передавать данные с компьютера на Arduino через последовательный порт и использовать их для плавного управления яркостью светодиода. Компьютер отправляет отдельные байты со значениями от 0 до 255, а Arduino читает их и выставляет соответствующую яркость с помощью ШИМ (PWM).
Отправлять байты на плату можно из любой программы, которая умеет работать с COM-портом. В уроке показаны примеры для Processing и Max/MSP version 5.
Необходимое железо
- Светодиод
- Резистор 220 Ом
Необходимое программное обеспечение
- Processing или
Схема подключения
Подключите токоограничивающий резистор 220 Ом к цифровому пину 9, а к нему последовательно — светодиод. Длинная ножка светодиода (анод, «+») должна соединяться с выходом резистора, а короткая (катод, «−») — уходить в GND.
Обратите внимание: пин 9 на Arduino UNO поддерживает ШИМ (обозначен символом ~), что принципиально важно для плавной регулировки яркости.

Схема подключения: Arduino UNO соединён с макетной платой, на которой установлены светодиод и резистор.
Принципиальная схема

Принципиальная схема: Arduino UNO, резистор 220 Ом и светодиод, подключённые к пину ~9.
Как это работает
Ардуино ждёт байт из последовательного порта. Как только байт приходит, функция analogWrite() записывает его значение (0–255) на ШИМ-пин, изменяя скважность импульсов и тем самым управляя средней мощностью, поступающей на светодиод. При значении 0 светодиод гаснет, при 255 — светит на полную яркость.
Код для Arduino
/*
Dimmer
Демонстрирует отправку данных с компьютера на плату Arduino для управления
яркостью светодиода. Данные передаются отдельными байтами,
каждый из которых принимает значение от 0 до 255. Arduino считывает эти байты
и использует их для установки яркости светодиода.
Схема:
- Светодиод подключён от цифрового пина 9 к GND.
- Serial-соединение с Processing, Max/MSP или другим serial-приложением.
создано в 2006 году
автор David A. Mellis
изменено 30 Aug 2011
авторы Tom Igoe и Scott Fitzgerald
Этот пример кода находится в общественном достоянии.
https://www.arduino.cc/en/Tutorial/Dimmer
*/
const int ledPin = 9; // пин, к которому подключён светодиод
void setup() {
// инициализация Serial-соединения:
Serial.begin(9600);
// настройка ledPin как выхода:
pinMode(ledPin, OUTPUT);
}
void loop() {
byte brightness;
// проверка наличия данных, отправленных с компьютера:
if (Serial.available()) {
// чтение последнего полученного байта (значение от 0 до 255):
brightness = Serial.read();
// установка яркости светодиода:
analogWrite(ledPin, brightness);
}
}
/* Код Processing для этого примера
// Dimmer - sends bytes over a serial port
// by David A. Mellis
// This example code is in the public domain.
import processing.serial.*;
Serial port;
void setup() {
size(256, 150);
println("Available serial ports:");
// if using Processing 2.1 or later, use Serial.printArray()
println(Serial.list());
// Uses the first port in this list (number 0). Change this to select the port
// corresponding to your Arduino board. The last parameter (e.g. 9600) is the
// speed of the communication. It has to correspond to the value passed to
// Serial.begin() in your Arduino sketch.
port = new Serial(this, Serial.list()[0], 9600);
// If you know the name of the port used by the Arduino board, you can specify
// it directly like this.
//port = new Serial(this, "COM1", 9600);
}
void draw() {
// draw a gradient from black to white
for (int i = 0; i < 256; i++) {
stroke(i);
line(i, 0, i, 150);
}
// write the current X-position of the mouse to the serial port as
// a single byte
port.write(mouseX);
}
*/
/* Патч Max/MSP v5 для этого примера
----------begin_max5_patcher----------
1008.3ocuXszaiaCD9r8uhA5rqAeHIa0aAMaAVf1S6hdoYQAsDiL6JQZHQ2M
YWr+2KeX4vjnjXKKkKhhiGQ9MeyCNz+X9rnMp63sQvuB+MLa1OlOalSjUvrC
ymEUytKuh05TKJWUWyk5nE9eSyuS6jesvHu4F4MxOuUzB6X57sPKWVzBLXiP
xZtGj6q2vafaaT0.BzJfjj.p8ZPukazsQvpfcpFs8mXR3plh8BoBxURIOWyK
rxspZ0YI.eTCEh5Vqp+wGtFXZMKe6CZc3yWZwTdCmYW.BBkdiby8v0r+ST.W
sD9SdUkn8FYspPbqvnBNFtZWiUyLmleJWo0vuKzeuj2vpJLaWA7YiE7wREui
FpDFDp1KcbAFcP5sJoVxp4NB5Jq40ougIDxJt1wo3GDZHiNocKhiIExx+owv
AdOEAksDs.RRrOoww1Arc.9RvN2J9tamwjkcqknvAE0l+8WnjHqreNet8whK
z6mukIK4d+Xknv3jstvJs8EirMMhxsZIusET25jXbX8xczIl5xPVxhPcTGFu
xNDu9rXtUCg37g9Q8Yc+EuofIYmg8QdkPCrOnXsaHwYs3rWx9PGsO+pqueG2
uNQBqWFh1X7qQG+3.VHcHrfO1nyR2TlqpTM9MDsLKNCQVz6KO.+Sfc5j1Ykj
jzkn2jwNDRP7LVb3d9LtoWBAOnvB92Le6yRmZ4UF7YpQhiFi7A5Ka8zXhKdA
4r9TRGG7V4COiSbAJKdXrWNhhF0hNUh7uBa4Mba0l7JUK+omjDMwkSn95Izr
TOwkdp7W.oPRmNRQsiKeu4j3CkfVgt.NYPEYqMGvvJ48vIlPiyzrIuZskWIS
xGJPcmPiWOfLodybH3wjPbMYwlbFIMNHPHFOtLBNaLSa9sGk1TxMzCX5KTa6
WIH2ocxSdngM0QPqFRxyPHFsprrhGc9Gy9xoBjz0NWdR2yW9DUa2F85jG2v9
FgTO4Q8qiC7fzzQNpmNpsY3BrYPVJBMJQ1uVmoItRhw9NrVGO3NMNzYZ+zS7
3WTvTOnUydG5kHMKLqAOjTe7fN2bGSxOZDkMrBrGQ9J1gONBEy0k4gVo8qHc
cxmfxVihWz6a3yqY9NazzUYkua9UnynadOtogW.JfsVGRVNEbWF8I+eHtcwJ
+wLXqZeSdWLo+FQF6731Tva0BISKTx.cLwmgJsUTTvkg1YsnXmxDge.CDR7x
D6YmX6fMznaF7kdczmJXwm.XSOOrdoHhNA7GMiZYLZZR.+4lconMaJP6JOZ8
ftCs1YWHZI3o.sIXezX5ihMSuXzZtk3ai1mXRSczoCS32hAydeyXNEu5SHyS
xqZqbd3ZLdera1iPqYxOm++v7SUSz
-----------end_max5_patcher-----------
*/
Код для Processing
Приведённый выше Processing-скетч отправляет байты через последовательный порт компьютера на плату, регулируя яркость светодиода. Переместите мышь по горизонтали — значение X-координаты будет масштабироваться в диапазон 0–255 и отправляться на Arduino.
Практическое замечание: перед запуском Processing-скетча убедитесь, что Arduino IDE не держит Serial-порт открытым — два приложения не могут одновременно использовать один и тот же порт.
Код для Max/MSP
Патч Max/MSP выглядит так, как показано на изображении ниже. Скопируйте его текст и вставьте в новое окно патча.

Скриншот патча Max/MSP «Dimmer»: ползунок управляет яркостью светодиода через последовательный порт.
Патч отправляет двоичное число от 0 до 255 через последовательный порт на Arduino, подключённый к порту. Переместите ползунок, чтобы изменить яркость светодиода. Нажмите кнопку запуска, выберите нужный порт из списка и откройте соединение.
Типичные ошибки
- Светодиод не реагирует — проверьте, что используете именно ШИМ-пин (на UNO это
~3,~5,~6,~9,~10,~11). Обычные цифровые пины не поддерживаютanalogWrite(). - Неверная полярность светодиода — если перепутать анод и катод, светодиод просто не загорится. Длинная ножка всегда идёт к «+».
- Порт занят — если Arduino IDE и Processing запущены одновременно, один из них не сможет открыть порт. Закройте Serial Monitor в IDE перед запуском внешнего приложения.
- Скорость порта не совпадает — убедитесь, что в скетче Arduino и в коде Processing/Max скорость
baudRateодинакова (обычно9600).
Как проверить результат
После загрузки скетча на плату запустите Processing-скетч или Max-патч и медленно перемещайте ползунок (или мышь). Яркость светодиода должна плавно меняться от полного выключения до максимального свечения. Если изменение резкое или светодиод мигает — проверьте стабильность USB-соединения и правильность выбранного порта.
Где пригодится
Такая схема — хорошая основа для любых проектов, где нужно управлять устройством с компьютера в реальном времени: диммеры освещения, управление скоростью мотора, регулировка громкости звукового сигнала через транзистор и многое другое.
Дополнительные материалы
Больше базовых примеров можно найти в разделе built-in examples.
Также доступен language reference — подробный справочник по языку программирования Arduino.
Последнее обновление: 29.07.2015, SM