Управление светодиодом в arduino uno

Исходный код программы (скетча)

Arduino

#define A 8
#define B 9
#define C 10
#define D 11
#define PIN_CONFIG 0
#define PIN_STATE 1
#define LED_Num 12
int matrix = {
// PIN_CONFIG PIN_STATE
// A B C D A B C D
{ { OUTPUT, OUTPUT, INPUT, INPUT }, { HIGH, LOW, LOW, LOW } },
{ { OUTPUT, OUTPUT, INPUT, INPUT }, { LOW, HIGH, LOW, LOW } },
{ { INPUT, OUTPUT, OUTPUT, INPUT }, { LOW, HIGH, LOW, LOW } },
{ { INPUT, OUTPUT, OUTPUT, INPUT }, { LOW, LOW, HIGH, LOW } },
{ { OUTPUT, INPUT, OUTPUT, INPUT }, { HIGH, LOW, LOW, LOW } },
{ { OUTPUT, INPUT, OUTPUT, INPUT }, { LOW, LOW, HIGH, LOW } },
{ { OUTPUT, INPUT, INPUT, OUTPUT }, { HIGH, LOW, LOW, LOW } },
{ { OUTPUT, INPUT, INPUT, OUTPUT }, { LOW, LOW, LOW, HIGH } },
{ { INPUT, OUTPUT, INPUT, OUTPUT }, { LOW, HIGH, LOW, LOW } },
{ { INPUT, OUTPUT, INPUT, OUTPUT }, { LOW, LOW, LOW, HIGH } },
{ { INPUT, INPUT, OUTPUT, OUTPUT }, { LOW, LOW, HIGH, LOW } },
{ { INPUT, INPUT, OUTPUT, OUTPUT }, { LOW, LOW, LOW, HIGH } }
};
void lightOn( int led ) {
pinMode( A, matrix );
pinMode( B, matrix );
pinMode( C, matrix );
pinMode( D, matrix );
digitalWrite( A, matrix );
digitalWrite( B, matrix );
digitalWrite( C, matrix );
digitalWrite( D, matrix );
}
void setup() {}
void loop() {
for( int l = 0; l < LED_Num; l++ ) {
lightOn( l );
delay( 1000 / LED_Num );
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

#define A 8
#define B 9
#define C 10
#define D 11
#define PIN_CONFIG 0
#define PIN_STATE 1
#define LED_Num 12

intmatrixLED_Num24={

//           PIN_CONFIG                  PIN_STATE

//    A       B       C      D         A     B    C    D

{{OUTPUT,OUTPUT,INPUT,INPUT},{HIGH,LOW,LOW,LOW}},

{{OUTPUT,OUTPUT,INPUT,INPUT},{LOW,HIGH,LOW,LOW}},

{{INPUT,OUTPUT,OUTPUT,INPUT},{LOW,HIGH,LOW,LOW}},

{{INPUT,OUTPUT,OUTPUT,INPUT},{LOW,LOW,HIGH,LOW}},

{{OUTPUT,INPUT,OUTPUT,INPUT},{HIGH,LOW,LOW,LOW}},

{{OUTPUT,INPUT,OUTPUT,INPUT},{LOW,LOW,HIGH,LOW}},

{{OUTPUT,INPUT,INPUT,OUTPUT},{HIGH,LOW,LOW,LOW}},

{{OUTPUT,INPUT,INPUT,OUTPUT},{LOW,LOW,LOW,HIGH}},

{{INPUT,OUTPUT,INPUT,OUTPUT},{LOW,HIGH,LOW,LOW}},

{{INPUT,OUTPUT,INPUT,OUTPUT},{LOW,LOW,LOW,HIGH}},

{{INPUT,INPUT,OUTPUT,OUTPUT},{LOW,LOW,HIGH,LOW}},

{{INPUT,INPUT,OUTPUT,OUTPUT},{LOW,LOW,LOW,HIGH}}

};

voidlightOn(intled){

pinMode(A,matrixledPIN_CONFIG);

pinMode(B,matrixledPIN_CONFIG1);

pinMode(C,matrixledPIN_CONFIG2);

pinMode(D,matrixledPIN_CONFIG3);

digitalWrite(A,matrixledPIN_STATE);

digitalWrite(B,matrixledPIN_STATE1);

digitalWrite(C,matrixledPIN_STATE2);

digitalWrite(D,matrixledPIN_STATE3);

}

voidsetup(){}

voidloop(){

for(intl=;l<LED_Num;l++){

lightOn(l);

delay(1000LED_Num);

}

}

Проект “Мигалка”

Давайте попробуем сделать проект посложнее. Добавим два светодиода, которые будут мигать поочередно.

Вам понадобится:

  • Плата Arduino Uno или Nano
  • Макетная плата
  • Два резистора 220 Ом
  • Два светодиода. Если есть возможность, лучше взять синий и красный.
  • Провода для соединения.

Сложность:  простой проект.

Что мы узнаем:

  • Как подключить светодиод к ардуино.
  • Как изменить стандартную программу мигалки.
  • Повторим процедуру загрузки скетча в микроконтроллер.

Принцип  подключения при этом не меняется. Мы используем два пина платы контроллера для соединения со светодиодами – 13 и 12. Можно использовать следующую схему:


Схема подключения светодиодов проекта Мигалка

Положительные контакты светодиода соединяем с цифровыми пинами, отрицательные – с GND.

Программирование мигалки

В скетч с мигающим светодиодом нам надо будет внести определенные изменения. Алгоритм действий таков:

  • Включаем синий светодиод
  • Ждем какое-то время (1 секунду)
  • Выключаем синий светодиод и одновременно включаем красный
  • Ждем какое-то время (1 секунду)
  • Повторяем еще раз

Попробуйте написать программу самостоятельно, основываясь на опыте, полученном из предыдущего проекта. Если возникнут сложности, можно обратиться к примеру далее по тексту.

// Этот блок команд выполняется один раз
void setup() {
  pinMode(13, OUTPUT); // Эти строчки нужны для того, чтобы оба светодиода светились ярко
  pinMode(12, OUTPUT);
}

// Этот блок команд выполняется постоянно
void loop() { 
  digitalWrite(13, HIGH); // Включение синего светодиода
  digitalWrite(12, LOW);  // Выключение красного светодиода
  delay(1000);            // Задержка
  digitalWrite(13, LOW);  // Выключение синего светодиода
  digitalWrite(12, HIGH); // Включение красного светодиода
  delay(1000);            // Задержка

}

В этой программе нам опять встречается блок команд loop. В нем мы выполняем включение и выключение пинов с помощью digitalWrite. Никаких сложностей это вызвать не должно.

Давайте поговорим более подробно о блоке setup. Мы видели его и в прошлом примере. Внутри setup обычно располагаются команды инициализации, которые запускаются только один раз, в момент подключения контроллера к питанию.

В примерах с мигалками мы устанавливаем пины в нужный режим – OUTPUT. В этом режиме мы работаем с внешними устройствами, получающими питание с данного пина ардуино. Например, наш светодиод ничего не передает в плату, он использует пин 13 для того, чтобы включиться. Поэтому мы устанавливаем режим OUTPUT – “на выход”. По умолчанию все пины находятся в режиме INPUT, оптимальном для подключения датсиков. Более подробную информацию вы можете найти в описании функции pinMode.

Надеемся, процедура проверки скетча и прошивки контроллера не вызвала каких-то трудностей. Запустите программу и вы увидите, как весело перемигиваются светодиоды на плате. Поздравляем с написанием своих первых проектов на Ардуино!

Arduino define или const, что выбрать

Иногда бывает не удобно применять директиву #define для создания констант, в этом случае используют ключевое слово const. В отличие от глобальных переменных, значение const должно быть определено сразу при объявлении константы. Помните, что при использовании #define имена следует делать максимально уникальными, чтобы не было совпадений с командами из подключаемых библиотек.

const int RED = 11;  // присваиваем имя RED для пина 11
const int GRN = 12; // присваиваем имя GRN для пина 12
const int BLU = 13;  // присваиваем имя BLU для пина 13
 
void setup() {
   pinMode(RED, OUTPUT);  // используем Pin11 для вывода
   pinMode(GRN, OUTPUT); // используем Pin12 для вывода
   pinMode(BLU, OUTPUT);  // используем Pin13 для вывода
}

Если использовать константу вместо дефайн в скетче из первого примера, то результат будет одинаковый – в коде вместо переменной RED будет подставляться цифра 11. На константы в программе действуют общие правила области видимости глобальных и локальных переменных. Кроме того, использованием #define или const не дает никаких преимуществ, с точки зрения экономии объема памяти микроконтроллера.

Как подключить ИК приемник к Ардуино

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • IR приемник;
  • пульт ДУ;
  • 1 светодиод и резистор 220 Ом;
  • провода «папа-папа» и «папа-мама».

Корпуса инфракрасных приемников содержат оптический фильтр для защиты прибора от внешних электромагнитных полей, изготавливаются они специальной формы для фокусировки принимаемого излучения на фотодиоде. Для подключения IR приемника к Arduino UNO используют три ножки, которые соединяют с — GND, 5V и A0. Советуем для начала использовать 3,3 Вольта, чтобы не сжечь ИК датчик при настройке.


Схема подключения ИК приемника к аналоговому порту Ардуино

Скетч для ИК приемника Arduino со светодиодом

#include <IRremote.h> // подключаем библиотеку для IR приемника

IRrecv irrecv(A0); // указываем пин, к которому подключен IR приемник
decode_results results;

void setup() {
   irrecv.enableIRIn();  // запускаем прием инфракрасного сигнала
   Serial.begin(9600); // подключаем монитор порта

   pinMode(12, OUTPUT); // пин 12 будет выходом (англ. «output»)
   pinMode(A0, INPUT); // пин A0 будет входом (англ. «intput»)
  
}

void loop() {
   if (irrecv.decode(&results)) // если данные пришли выполняем команды
   {
      Serial.println(results.value); // отправляем полученные данные на порт
    
      // включаем и выключаем светодиод, в зависимости от полученного сигнала  
      if (results.value == 16718055) { 
      digitalWrite(12, HIGH);
   }
      if (results.value == 16724175) { 
      digitalWrite(12, LOW);
   }
      irrecv.resume(); // принимаем следующий сигнал на ИК приемнике
   }
}
  1. библиотека содержит набор команд и позволяет упростить скетч;
  2. оператор  присваивает получаемым сигналам от пульта дистанционного управления имя переменной .

ИК датчик можно применять во многих устройствах на микроконтроллере Ардуино, в том числе, можно сделать дистанционное управление сервоприводом на Ардуино от ИК приемника. При настройке следует включить монитор порта Arduino IDE и узнать какой сигнал отправляет та или иная кнопка на пульте ДУ. Полученные коды следует использовать в скетче после знака двойного равенства в условиях .

Скетч для ИК приемника Ардуино и серовомотора

#include <IRremote.h> // подключаем библиотеку для IR приемника
IRrecv irrecv(A0);         // указываем пин, к которому подключен IR приемник
decode_results results;

#include <Servo.h> // подключаем библиотеку для серво
Servo myservo;       // создаем объект для управления серво

void setup() {
   irrecv.enableIRIn();  // запускаем прием инфракрасного сигнала
   Serial.begin(9600); // подключаем монитор порта

   myservo.attach(9); // указываем пин для подключения серво
}

void loop() {
   if (irrecv.decode(&results)) // если данные пришли выполняем команды
   {
      Serial.println(results.value); // отправляем полученные данные на порт
    
      // поворачиваем серво, в зависимости от ИК сигнала
      if (results.value == 16718055) { 
      myservo.write(0);
   }
      if (results.value == 16724175) { 
      myservo.write(90);
   }
     irrecv.resume(); // принимаем следующий сигнал на ИК приемнике
  }
}

Step 6: Program Code

This is the code without the comments to reduce the space (You can find the comments in the downloadable file):int pinLeds1 = 10;
int pinLeds2 = 9;
int pinLeds3 = 7;
int pinLed4 = 8;
int buttonPin = 6;
int buttonState;
long ran;
int time = 2000;
void setup ()
{
  pinMode (pinLeds1, OUTPUT);
  pinMode (pinLeds2, OUTPUT);
  pinMode (pinLeds3, OUTPUT);
  pinMode (pinLed4, OUTPUT);
  pinMode (buttonPin, INPUT);
  randomSeed(analogRead(0));
}
void loop()
{
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH){
    ran = random(1, 7);
    if (ran == 1){
      digitalWrite (pinLed4, HIGH);
      delay (time);
    }
    if (ran == 2){
      digitalWrite (pinLeds1, HIGH);
      delay (time);
    }
    if (ran == 3){
      digitalWrite (pinLeds3, HIGH);
      digitalWrite (pinLed4, HIGH);
      delay (time);
    }
    if (ran == 4){
      digitalWrite (pinLeds1, HIGH);
      digitalWrite (pinLeds3, HIGH);
      delay (time);
    }
    if (ran == 5){
      digitalWrite (pinLeds1, HIGH);
      digitalWrite (pinLeds3, HIGH);
      digitalWrite (pinLed4, HIGH);
      delay (time);
   }
   if (ran == 6){
      digitalWrite (pinLeds1, HIGH);
      digitalWrite (pinLeds2, HIGH);
      digitalWrite (pinLeds3, HIGH);
      delay (time);
   }
  }
  digitalWrite (pinLeds1, LOW);
  digitalWrite (pinLeds2, LOW);
  digitalWrite (pinLeds3, LOW);
  digitalWrite (pinLed4, LOW);
}

Шаг 5. Код проекта

Скачать или скопировать код проекта свечки-анемометра ниже:

// Blow Out LED Ave creates an LED that you can blow out. It automatically relights after 2 seconds
//
// Copyright 2018, Paul H. Dietz

// LED Connections
#define PLUS A1               // High side of the resistor
#define MEASURE A0            // Low side of resistor and anode of LED
// Cathode of LED goes to ground

#define NUMSAMPLES 10         // Number of samples to keep
#define MINJUMP 150           // Minimum jump for blow out

long int sensedata;
int dataptr = 0;
int buffull = 0;

void setup() {
  Serial.begin(250000);                     // Initialize serial communication
  pinMode(MEASURE, INPUT);
  pinMode(PLUS, OUTPUT);
  digitalWrite(PLUS, HIGH);                 // Turn on the LED
}

void loop() {
  int cnt;
  long int sum = 0;

  // Sum 256 adc readings (to reduce adc noise)
  for (cnt = 0; cnt < 256; cnt++) {
    sum = sum + analogRead(MEASURE);
  }
  
  Serial.println(sum);                      // Output sum so we can watch with Serial Plotter

  // Compare current measurement to oldest if buffer full
  if (buffull && (sum > (sensedata + MINJUMP))) {
    // Temperature drop exceeded minimum - turn off
    digitalWrite(PLUS, LOW);
    dataptr = 0;                            // Reinitialize the buffer
    buffull = 0;
    delay(2000);                            // off time for LED
    digitalWrite(PLUS, HIGH);
  }
  else {
    sensedata = sum;               // Store the latest data in the buffer
    dataptr++;                              // Update buffer pointer
    if (dataptr == NUMSAMPLES) {            // Check if dataptr went past end
      dataptr = 0;                          // Reset the dataptr to beginning
      buffull = 1;                          // Mark that buffer is full
    }
  }
}

Скачайте/скопируйте код и откройте его в среде Arduino IDE. Затем вы можете загрузить его в саму Arduino.

Программа сначала устанавливает направления выводов и загорается светодиод. Затем она измеряет прямое падение напряжения светодиода через аналоговый сигнал на выводе A0. Чтобы повысить точность измерения, мы быстро считываем напряжение 256 раз и суммируем результат.

Это может увеличить эффективное разрешение преобразования, чтобы мы могли видеть изменения, которые меньше наименьшего шага на конвертере. Если буфер данных sensedata[] заполнен, мы сравниваем последнюю сумму с самой старой, которая хранится в буфере, чтобы увидеть, вызвало ли недавнее охлаждение напряжение светодиода не менее MINJUMP. Если это не так, мы храним сумму в буфере, обновляем указатель буфера и начинаем следующее измерение. Если есть, мы выключаем светодиод на 2 секунды, перезагружаем буфер, а затем снова запускаем процесс.

Чтобы лучше понять, что происходит, мы записываем каждую сумму в виде последовательных данных и используем последовательный плоттер Arduino IDE (в меню Tools), чтобы графически отображать напряжение светодиода, когда оно изменяется со временем. Не забудьте установить скорость передачи в бодах до 250000, чтобы соответствовать программе. Затем вы сможете увидеть, как напряжение падает, когда светодиод прогревается после включения. Это также покажет, насколько чувствительна система. После того, как светодиод погаснет, он немного охладится к тому времени, когда он снова включится, что вы увидите как скачок на графике.

Кнопка ардуино

Тактовые кнопки и кнопки-переключатели

Как обычно, начинаем раздел с простых вещей, интересных только начинающим. Если вы владеете азами  и хотите узнать о различных вариантах подключения кнопки к ардуино – можете пропустить этот параграф.

Что такое кнопка? По сути, это достаточно простое устройство, замыкающее и размыкающее электрическую сеть. Выполнять это замыкание/размыкание можно в разных режимах, при этому  фиксировать или не фиксировать свое положение. Соответственно, все кнопки можно поделить на две большие группы:

  • Кнопки переключатели с фиксацией. Они возвращаются в исходное состояние после того, как их отпустили. При в зависимости от начального состояния разделяют на нормально-замкнутые и нормально-разомкнутые кнопки.
  • Кнопки без фиксации (тактовые кнопки). Они фиксируются и остаются в том положении, в котором их оставили.

Вариантов различных кнопок великое множество, это действительно один из самых распространенных видов электронных компонентов.

Кнопки ардуино для простых проектов

В наших проектах мы будем работать с очень простыми тактовыми кнопками с 4 ножками, которые идут практически в любом наборе ардуино. Кнопка представляет собой переключатель с двумя парами контактов. Контакты в одной паре соединены между собой, поэтому больше одного выключателя в схеме реализовать не удастся, но вы можете одновременно управлять двумя параллельными сегментами, это бывает полезно.

В зависимости от ситуации, вы можете создавать как схемы с нормально замкнутыми, так и с нормально разомкнутыми контактами – для этого нужно будет только соответствующим образом выполнить соединение в схеме.

Для удобства работы в комплекте с тактовой кнопкой обычно идет пластмассовый колпачок какого-то цвета, он достаточно очевидно надевается на кнопку и придает проекту менее хакерский вид.

Схема датчика освещения на фоторезисторе и реле

Примеры скетча для работы с реле приведены в статье, посвященной программированию реле в ардуино. В данном случае, нам не нужно делать сложных телодвижений: после определения «темноты» мы просто включаем реле, подавай на его пин соответствующее значение.

#define PIN_RELAY 10
#define PIN_PHOTO_SENSOR A0

void setup() {
  pinMode(PIN_RELAY, OUTPUT);
  digitalWrite(PIN_RELAY, HIGH);
}

void loop() {
  int val = analogRead(PIN_PHOTO_SENSOR);
  if (val < 300) {
    // Светло, выключаем реле
    digitalWrite(PIN_RELAY, HIGH);
  } else {
    // Темновато, включаем лампочку
    digitalWrite(PIN_RELAY,  LOW);
  }
}

Объяснение программы для Arduino

Полный код программы и видео, демонстрирующее работу проекта, приведены в конце статьи, здесь же мы кратко рассмотрим основные фрагменты кода программы.

В самом начале программы определим (дадим осмысленные названия) всем используемым контактам. Также в этой части программы определим общее число светодиодов и состояние светодиода.

Arduino

#define A 8
#define B 9
#define C 10
#define D 11
#define PIN_CONFIG 0
#define PIN_STATE 1
#define LED_Num 12

1
2
3
4
5
6
7

#define A 8
#define B 9
#define C 10
#define D 11
#define PIN_CONFIG 0
#define PIN_STATE 1
#define LED_Num 12

После этого создадим матрицу для включения и выключения светодиодов в определенной последовательности – вы можете в программе изменить эту последовательность на ту, которая вам необходима. В соответствии с приведенной матрицей первым будет включаться 1-й светодиод, затем 2-й светодиод и т.д.

Arduino

int matrix = {
// PIN_CONFIG PIN_STATE
// A B C D A B C D
{ { OUTPUT, OUTPUT, INPUT, INPUT }, { HIGH, LOW, LOW, LOW } },
{ { OUTPUT, OUTPUT, INPUT, INPUT }, { LOW, HIGH, LOW, LOW } },
{ { INPUT, OUTPUT, OUTPUT, INPUT }, { LOW, HIGH, LOW, LOW } },
…………………………….
……………………………..

1
2
3
4
5
6
7
8

intmatrixLED_No.24={

//           PIN_CONFIG                  PIN_STATE

//            A             B              C          D                    A        B        C        D

{{OUTPUT,OUTPUT,INPUT,INPUT},{HIGH,LOW,LOW,LOW}},

{{OUTPUT,OUTPUT,INPUT,INPUT},{LOW,HIGH,LOW,LOW}},

{{INPUT,OUTPUT,OUTPUT,INPUT},{LOW,HIGH,LOW,LOW}},

…………………………….

……………………………..

Затем в функции void loop() мы будем в цикле последовательно включать светодиоды в соответствии с ранее записанной матрицей.

Arduino

void loop() {
for( int l = 0; l < LED_Num; l++ ) {
lightOn( l );
delay( 1000 / LED_Num );
}

1
2
3
4
5

voidloop(){

for(intl=;l<LED_Num;l++){

lightOn(l);

delay(1000LED_Num);

}

После сборки аппаратной части проекта и загрузки программы в плату Arduino можно приступать к тестированию работы проекта.

Применяя рассмотренный пример использования технологии чарлиплексинга, вы можете подключать к плате Arduino большое количество светодиодов, используя для этого небольшое количество ее контактов. К примеру, если вы хотите управлять 20 светодиодами, то просто измените рассмотренную в данной статье матрицу и добавьте условия для этих дополнительных светодиодов.

Подключение фоторезистора к ардуино

В проектах arduino фоторезистор используется как датчик освещения. Получая от него информацию, плата может включать или выключать реле, запускать двигатели, отсылать сообщения. Естественно, при этом мы должны правильно подключить датчик.

Схема подключения датчика освещенности к ардуино довольна проста. Если мы используем фоторезистор, то в схеме подключения датчик реализован как делитель напряжения. Одно плечо меняется от уровня освещённости, второе –  подаёт напряжение на аналоговый вход. В микросхеме контроллера это напряжение преобразуется в цифровые данные через АЦП. Т.к. сопротивление датчика при попадании на него света уменьшается, то и значение падающего на нем напряжения будет уменьшаться.

В зависимости от того, в каком плече делителя мы поставили фоторезистор, на аналоговый вход будет подаваться или повышенное или уменьшенное напряжение. В том случае, если одна нога фоторезистора подключена к земле, то максимальное значение напряжения будет соответствовать темноте (сопротивление фоторезистора максимальное, почти все напряжение падает на нем), а минимальное – хорошему освещению (сопротивление близко к нулю, напряжение минимальное). Если мы подключим плечо фоторезистора к питанию, то поведение будет противоположным.

Сам монтаж платы не должен вызывать трудностей. Так как фоторезистор не имеет полярности, подключить можно любой стороной, к плате его можно припаять, подсоединить проводами с помощью монтажной платы или использовать обычные клипсы (крокодилы) для соединения. Источником питания в схеме является сам ардуино. Фоторезистор подсоединяется одной ногой к земле, другая подключается к АЦП платы (в нашем примере – АО). К этой же ноге подключаем резистор 10 кОм. Естественно, подключать фоторезистор можно не только на аналоговый пин A0, но и на любой другой.

Несколько слов относительно дополнительного резистора на 10 К. У него в нашей схеме две функции: ограничивать ток в цепи и формировать нужное напряжение в схеме с делителем. Ограничение тока нужно в ситуации, когда полностью освещенный фоторезистор резко уменьшает свое сопротивление. А формирование напряжения – для предсказуемых значений на аналоговом порту. На самом деле для нормальной работы с нашими фоторезисторами хватит и сопротивления 1К.

Меняя значение резистора мы можем “сдвигать” уровень чувствительности в “темную” и “светлую” сторону.  Так, 10 К даст быстрое переключение наступления света. В случае 1К датчик света будет более точно определять высокий уровень освещенности.

Если вы используете готовый модуль датчика света, то подключение будет еще более простым. Соединяем выход модуля VCC с разъемом 5В на плате, GND – c землей. Оставшиеся выводы соединяем с разъемами ардуино.

Если на плате представлен цифровой выход, то отправляем его на цифровые пины. Если аналоговый – то на аналоговые. В первом случае мы получим сигнал срабатывания – превышения уровня освещенности (порог срабатывания может быть настроен с помощью резистора подстройки). С аналоговых же пинов мы сможем получать величину напряжения, пропорциональную реальному уровню освещенности.

Шаг 6. Заключение

Когда код запущен, вы сможете потушить свой светодиод, быстро подув на него. Мы обнаружили, что можно потушить светодиод с расстояния более 1 метра! В некоторых комнатах воздушные потоки могут вызывать ложные срабатывания. Если это проблема, вы можете снизить чувствительность вашей системы, увеличив значение MINJUMP. Серийный плоттер может помочь вам визуализировать то, что может быть подходящим для вашего приложения.

Вы можете заменить светодиод другим цветом. Белые светодиоды работают особенно хорошо. Поскольку они имеют более высокое падение напряжения, вам нужно будет изменить значение сопротивления, чтобы получить правильный ток. Учитывая возможности Arduino UNO, делайте ток в диапазоне 10-15 мА. Для белого светодиода 100 Ом является хорошей отправной точкой.

Поскольку UNO имеет 6 аналоговых входных контактов, вы можете легко изменить этот код для поддержки 6 независимых светодиодных анемометров! Это позволяет создавать простые интерфейсы, которые могут распознавать, когда вы дуете в разных направлениях. Это может быть невероятно полезно при создании интерфейсов для инвалидов, выразительных контроллеров для музыкантов или даже для тортов на день рождения со многими электронными свечами!

Можно ли подключить несколько LED к одному выводу

Может возникнуть необходимость подключить к любому из выводов внешний светодиод или группу LED. Нагрузочная способность одного вывода микроконтроллера, как упоминалось, невелика. К нему можно непосредственно подключить параллельно один-два светодиода с током потребления 15 мА. Испытывать живучесть вывода нагрузкой на грани возможности или превышающей ее не стоит. Лучше применить ключ на транзисторе (полевом или биполярном).

Подключение LED через транзисторный ключ на биполярном триоде.

Резистор R1 надо выбрать так, чтобы ток через него не превысил нагрузочную способность вывода. Лучше взять половину или меньше от максимума. Так, чтобы установить умеренный ток в 10 мА, сопротивление при 5 вольтах питания должно составлять 500 Ом. У каждого светодиода должен быть свой балластный резистор, заменять его одним общим нежелательно. Rбал выбирается так, чтобы установить через каждый светодиод его рабочий ток. Так, для напряжения питания 5 вольт и тока в 20 мА, сопротивление должно быть 250 Ом или ближайшее стандартное значение. Надо следить, чтобы общий ток через коллектор транзистора не превысил его максимальное значение. Так, для транзистора КТ3102 наибольший Ik должен быть ограничен на уровне 100 мА. Это означает, что к нему можно подключить не более 6 LED с током 15 мА. Если этого недостаточно, надо применить более мощный ключ. Это единственное ограничение для выбора транзистора структуры n-p-n в такую схему. Еще здесь теоретически надо учесть коэффициент усиления триода, но для данных условий (входной ток 10 мА, выходной 100) он должен быть всего лишь не меньше 10. Такой h21э может выдать любой современный транзистор.

Также для выполнения ключей можно применять MOSFET-транзисторы, но они для открытия могут потребовать напряжения выше, чем может дать выход Ардуино. В этом случае надо предусматривать дополнительные цепи и элементы. Чтобы этого избежать, надо применять так называемые «цифровые» полевые транзисторы – им достаточно 5 вольт для открытия. Но они менее распространены.

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий