DIY набор для пайки — Светлое Сердце SMD

Техно-кулон Светлое Сердце SMD — это программируемый гаджет, который может стать отличным украшением или подарком для близкого человека. В отличие от базовой версии кулона (Светлое Сердце), модификация SMD представляет собой серьёзное устройство с микроконтроллером. Этот кулон можно программировать через Arduino IDE.

Программируемый кулон Светлое Сердце SMD RobotClass

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

Набор предназначен для тех, кто уже работал с SMD компонентами и хочет развить свой новык.

Что такое SMD?

В переводе с английского, SMD — это surface mounted device, то есть «устройство, монтируемое на поверхность». В отличие от технологий недавнего прошлого, SMD элементы занимают гораздо меньше места. SMD позволяет нам сделать устройство очень компактным. Достаточно посмотреть на материнскую плату любого смартфона, чтобы понять о чем идет речь.

SMD бывают разных размеров. Элементы прямоугольной формы такие как светодиоды или резисторы измеряются по длинам сторон. Например, на популярной плате Ардуино установлены светодиоды 0805. В переводе с дюймовой системы в метрическую это соответствует размеру 2 x 1,25 мм. А большинство керамических конденсаторов на той же плате имеют уже размер 0603 = 1,6 x 0,8 мм.

В данном наборе мы будем учиться работать с элементами типоразмера 0805.

Подготовка к работе

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

В корзину
В корзину
В корзину
В корзину
В корзину
В корзину

Состав набора

  • C1,C2 — 0,1 мкФ;
  • R1..R7 — резистор 200 Ом;
  • R9,R11,R12,R13 — резистор 10 кОм;
  • R10 — датчик вибрации;
  • Q1 — полевой N-канальный транзистор;
  • SW2,SW3 — кнопки;
  • SW1 — выключатель;
  • U1 — микроконтроллер CH552G;
  • D1…D7 — светодиоды;
  • USB1 — разъём microUSB;
  • B1 — держатель батарейки CR2032.

Сборка устройства

Программируемый кулон Светлое Сердце SMD RobotClass

1. Начинаем монтаж с установки двух конденсаторов C1 и C2 номиналом 0,1 мкФ. У них нет полярности, припаиваем их любой стороной.

Программируемый кулон Светлое Сердце SMD RobotClass

2. Следом припаиваем семь одинаковых резисторов R1..R7 номиналом 200 Ом, а также четыре резистора R9,R11,R12 и R13 номиналом 10 кОм. У резисторов нет полярности, устанавливаем их любой стороной.

Программируемый кулон Светлое Сердце SMD RobotClass

3. Припаиваем датчик R10. Он тоже неполярный.

Программируемый кулон Светлое Сердце SMD RobotClass

4. Теперь очередь транзистора Q1.

Программируемый кулон Светлое Сердце SMD RobotClass

5. Припаиваем две тактовые кнопки SW2 и SW3 и выключатель SW1.

Программируемый кулон Светлое Сердце SMD RobotClass

6. Пришло время микроконтроллера. Размещаем его на плате так, чтобы ключ на корпусе МК совпадал с ключом-точкой на посадочном месте.

Программируемый кулон Светлое Сердце SMD RobotClass

Существуют разные подходы к пайке SMD микросхем. Если нет опыта, то лучше использовать самый простой из них:

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

8. Самыми последними элементами на лицевой стороне платы установим светодиоды D1..D7. У светодиодов есть полярность, поэтому сначала следует их правильно расположить.

На плате кулона отрицательный контакт (катод) светодиода отмечен стрелочкой. У самого же светодиода катод отмечен зелёной черточкой.

9. Переворачиваем плату и припаиваем один из самых сложных компонентов — разъём Micro-USB. Лучше использовать тот же подход, что и при установке микросхемы: сначала прихватываем одну ножку, затем пропаиваем всё остальное.

10. Там же, припаиваем держатель батарейки CR2032. Его следует разместить так, чтобы батарейка заходила в разъём снизу кулона.

Для пайки контактов держателя рекомендуем поднять температуру паяльника до 400 градусов.

Программируемый кулон Светлое Сердце SMD RobotClass

Готово!

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

Для своей работы кулон использует микроконтроллер CH552G. О том, как программировать данный микроконтроллер мы подробно рассказали в соответствующем уроке: Работа с CH552G

В конце урока имеется принципиальная схема кулона, их которой нам будут важны следующие моменты:

  • светодиоды подключены к контактам микроконтроллера: 32, 14, 15, 17, 31, 34, 16;
  • ток на катодах светодиодов контролируется транзистором Q1; чтобы светодиоды работали, этот транзистор должен быть открыт;
  • датчик подключен к контакту 11; используем его в следующей программе;
  • кнопки SW2 и SW3 соединены с контактами микроконтроллера 36 и 33, соответственно.

Внимание! Для программирования кулона следует перевести выключатель питания в нижнее положение.

Мигаем всеми светодиодами

Напишем программу, которая будет одновременно мигать всеми светодиодами кулона.

// контакт управления катодами светодиодов
#define LED_K 30

// контакты управления отдельными светодиодами
byte ledPins[7] = {32,14,15,17,31,34,16};

void setup() {
  // настраиваем режим контакта на Вывод
  pinMode(LED_K, OUTPUT);
  for(byte i=0; i<7; i++){
    pinMode(ledPins[i], OUTPUT);
  }

  // открываем транзистор Q1
  digitalWrite(LED_K, HIGH);
}

void loop() {
  for(byte i=0; i<7; i++){
    digitalWrite(ledPins[i], HIGH); // зажигаем светодиод с индексом i
    delay(100); // пауза 100 мс 
    digitalWrite(ledPins[i], LOW); // гасим светодиод с индексом i
    delay(100); // пауза 100 мс
  }
}

Загружаем программу на кулон и смотрим на результат. Все светодиоды должны одновременно выключаться и выключаться с периодом 200мс.

Циклон

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

#define LED_K 30

byte ledPins[7] = {32,14,15,17,31,34,16};
byte idx = 0;

void setup() {
  pinMode(LED_K, OUTPUT);
  for(byte i=0; i<7; i++){
    pinMode(ledPins[i], OUTPUT);
  }

  digitalWrite(LED_K, HIGH);
}

void loop() {
  // в цикле зажигаем светодиод с индексом idx, а остальные гасим
  for(byte i=0; i<7; i++){
    if( i == idx )
      digitalWrite(ledPins[i], HIGH);
    else
      digitalWrite(ledPins[i], LOW);
  }
  idx++;
  if( idx == 7 ){ // если индекс дорос до 7, сбрасываем его в 0
    idx = 0;
  }
  delay(50); // пауза 50мс
}

Биение сердца

Следующая программа будет имитировать биение сердца.

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

void setLeds(byte state){
  for(byte i=0; i<7; i++){
    digitalWrite(ledPins[i], state);
  }
}

А код функции loop заменим на следующий:

void loop() {
  setLeds(1);
  delay(50);
  setLeds(0);
  delay(100);
  setLeds(1);
  delay(150);
  setLeds(0);
  delay(500);
}

Загружаем программу и наблюдаем, как светодиоды вспыхивают в такт сердцу (конечно, очень приближённо).

Реакция на датчик

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

#define LED_A_PIN 30
#define SENS_PIN 11
#define VIBRO_COUNT 50 // количество срабатываний датчика до пробуждения
#define BLINK_COUNT 5 // количество биений после пробуждения
#define RESET_TO 1000 // время, после которого сбрасывается счетчик датчика

byte ledPins[7] = {32,14,15,17,31,34,16};

unsigned long time_reset;

byte vibro_count = 0;
byte vibro_state = 0;
byte blink_count = 0;

void setLeds(byte state){
  for(byte i=0; i<7; i++){
    digitalWrite(ledPins[i], state);
  }
}

void setup() {
  pinMode(SENS_PIN, INPUT);
  
  pinMode(LED_A_PIN, OUTPUT);
  for(byte i=0; i<7; i++){
    pinMode(ledPins[i], OUTPUT);
    digitalWrite(ledPins[i], LOW);
  }

  digitalWrite(LED_A_PIN, HIGH);
}

void loop() {
  if( !blink_count ){
    byte v = digitalRead(SENS_PIN);
    if( vibro_state != v ){
      delay(20);
      vibro_state = v;
      unsigned long t = millis();

      if( t > time_reset ){
        vibro_count = 0;
      } else {
        vibro_count++;
      }
      
      time_reset = t + RESET_TO;

      if( vibro_count > VIBRO_COUNT ){
        //USBSerial_println(vibro_count);
        vibro_count = 0;
        blink_count = BLINK_COUNT;
      }
    }
    return;
  }

  setLeds(1);
  delay(50);
  setLeds(0);
  delay(100);
  setLeds(1);
  delay(150);
  setLeds(0);
  delay(500);

  blink_count--;
}

Загружаем программу, и смотрим на результат:


Изменено:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.