21.01.2013

Используем HNYDuino R2

Новогодние праздники давно окончились, а после крещения многие уже избавились от своих новогодних деревьев. Конечно, если только это не HNYDuino R2 - с ней можно развлекаться хоть круглый год. Рассмотрим более подробно, как именно это делается ;)





Первым делом, подключим HNYDuino R2 к компьютеру через прилагающийся к ней mini-USB кабель. Следите, чтобы движок переключателя питания (слева) был установлен в нижнее положение (USB). В ArduinoIDE надо выбрать плату Arduino Leonardo:



Если все ОК, в системе появится новое устройство на шине USB, а после нажатия на сброс центральный светодиод начнет плавно переливаться красным. Установите драйверы - бутлоадера (отсюда) и Leonardo (из папки ArduinoIDE). Откройте скетч-пример Blink (Примеры -> 01. Basics -> Blink) и загрузите его в по Ctrl-U в устройство. После загрузки центральный светодиод начнет мигать красным (уже без плавного переливания).

Все получилось? Тогда двигаемся дальше!

Елка снабжена шестнадцатью одноцветными светодиодами и одним - трехцветным, а также датчиком звука:



Расположенный в центре трехцветный светодиод подключен к пинам с аппаратной поддержкой ШИМ, поэтому есть возможность плавно мигать и переливаться каждым из трех цветов через analogWrite():
  • красный - пин D13
  • зеленый - пин D10
  • синий - пин D5
Через гребенку на подставку дополнительно выведены:
  • VCC - напряжение питания MCU, в нашем случае +5В. Переключатель питания коммутирует туда напряжение питания с USB или выход микросхемы-стабилизатора 7805;
  • VIN - входное напряжение от разъема питания на подставке (плюс в центре). Рекомендуется подавать +7..+12В, от переполюсовки спасет расположенный на той же подставке диод 1N4007;
  • A4 - аналоговый вход, и он же - цифровой пин D22;
  • A5 - аналоговый вход, и он же - цифровой пин D23;
  • D17 - цифровой пин, аппаратно это PB0 - сигнал SS или PCINT0;
  • D7 - цифровой пин, аппаратно это PE6 - сигнал INT6/AIN0.
Светодиоды R1..R8 и G1..G8 подключены к двум закаскадированным микросхемам 74HC595, принцип работы с которыми я уже подробно разбирал в статье Удвоение пинов Arduino, а также в аналогичной статье про HNYDuino R1 (только подключены они к другим пинам). В общем случае всё сводится к выполнению двух последовательных команд shiftOut с использованием известных пинов (LATCH = 12, CLK = 8 и DATA = 16).

Вывод осуществляется при помощи функции setState(byte greenDataOut, byte redDataOut), где надо указать два байта, для G1..G8 и R1..R8 соответственно. Если мысленно выстроить образуемый ими контур в линию, могло бы получиться следующее:




Чтобы отобразить произвольный орнамент, надо сформировать два байта в двоичном виде и передать их функции setState. Например, чтобы зажечь линейку из четырех самых нижних светодиодов (G1R1G8 и R8), подставим на их места единицы, получится:

1 0 0 0 0 0 0 1
  1 0 0 0 0 0 0 1

Теперь можно отдавать команду setState(B10000001,B10000001) - префикс 'B' предваряет число в двоичной записи. Если кому-то по душе шестнадцатеричная запись, тоже самое   будет по setState(0x81,0x81). 

Если и после этого останутся вопросы, загрузите пример, который прилагается к  библиотеке - зацикленное случайное переключение простейших эффектов (обычно прошито в елку по умолчанию).


Датчик звука собран в виде узла с электретным микрофоном (такие обычно можно встретить в телефонных аппаратах) и операционного усилителя LM386, выход которого подключен к аналоговому пину A0:


Усиленное звуковое колебание с выхода усилителя попадает на RC-цепочку C10 и R25, причем резистор - переменный, что дает возможность регулировки чувствительности (резистор расположен с противоположной стороны):


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

#define BLUE   5

const int thresholdvalue=400;//The threshold to turn the led on

void setup() {
  pinMode(BLUE,OUTPUT);
}
 
void loop() {
  int sensorValue = analogRead(A0);//use A0 to read the electrical signal
  if(sensorValue>thresholdvalue) {
    digitalWrite(BLUE,HIGH);//if the value read from A0 is larger than 400,then light the LED
    delay(200);
    digitalWrite(BLUE,LOW);
  }
}

В цикле постоянно проверяется значение, считываемое с A0, и если оно превысило константу thresholdvalue, трехцветный светодиод вспыхивает на 0,2 секунды синим цветом. Если после загрузки вы уже отбили себе хлопками все руки, а реакции все нет - не забудьте покрутить переменный резистор.

Более подробную информацию можно найти в нашем wiki.

Комментариев нет:

Отправить комментарий