Главная chevron_right Уроки chevron_right Встроенные примеры chevron_right Связь chevron_right Управление яркостью светодиода через Serial: LED Dimmer

Управление яркостью светодиода через Serial: LED Dimmer

Отправляйте байты с компьютера на Arduino через Serial-порт и управляйте яркостью светодиода в реальном времени с помощью Processing или Max/MSP.

В этом уроке мы разберём, как передавать данные с компьютера на Arduino через последовательный порт и использовать их для плавного управления яркостью светодиода. Компьютер отправляет отдельные байты со значениями от 0 до 255, а Arduino читает их и выставляет соответствующую яркость с помощью ШИМ (PWM).

Отправлять байты на плату можно из любой программы, которая умеет работать с COM-портом. В уроке показаны примеры для Processing и Max/MSP version 5.

Необходимое железо

  • Светодиод
  • Резистор 220 Ом

Необходимое программное обеспечение

Схема подключения

Подключите токоограничивающий резистор 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