Что можно подарить дорогому человеку, увлекающемуся электроникой на день рождения или Новый год? И чтоб не просто игрушку, а что-нибудь интересное и развивающее. Обычно в голову приходят различные наборы и конструкторы, которых у RobotClass тоже хватает (набор продвинутый, робот-манипулятор, виброид, электрофонарь и пр.). Но все эти наборы обычно рассчитаны на новичков, а как быть с продвинутым энтузиастом хайтек-DIY?
Специально для любителей роботов и электроники мы разработали особый подарочный сертификат. И это не просто бесполезная карточка — это целое устройство, которое будет радовать глаз и после использования сертификата!
Печатная плата
Во-первых, подарочный сертификат RobotClass — это настоящая печатная плата, которая выглядит здорово сама по себе. Существует четыре номинала сертификата, каждый из которых имеет свой цвет. Вот так выглядят 3 номинала на 1024, 2048 и 4096 рублей. А есть ещё номинал 8192 рубля, он имеет чёрный цвет.
Почему такие странные номиналы? Они не странные! Наоборот, эти числа являются степенями двойки, которые должен знать любой программист и разработчик электроники.
Плата имеет размер обычной банковской карты и толщину 1,6 мм. К каждому сертификату прилагается уникальный код, с помощью которого сертификат активируется в нашем интернет-магазине.
Cимплекс маяк
Во-вторых, на плате сертификата версии 2.0 можно собрать любопытное устройство — Симплекс маяк. Этот маяк представляет собой светодиодную матрицу с разрешением 5×5, которая управляется микроконтроллером CH552G. С помощью популярной среды разработки Arduino IDE можно использовать эту матрицу для разных целей, например:
- изобразить какой-нибудь статичный символ или демосцену; использовать маяк в качестве кулона на кибервечеринке;
- запрограммировать игру Змейка или Тетрис; играть в неё при помощи дополнительных кнопок;
- использовать маяк как учебный стенд для изучения основ программирования.
Сборка
Симплекс маяк состоит исключительно из SMD деталей, так что для их пайки необходимо иметь хотя бы начальный уровень навыка в этой области. Особую сложность может вызвать монтаж микросхем. Потренироваться паять SMD детали лучше на более простых наборах, например, на наборе Гексалайт.
Для сборки устройства понадобится паяльник, немного припоя и флюс, жидкий или гелевый. Если чего-то не хватает, это можно легко приобрести это у нас в магазине RobotClass:
Что такое SMD?
В переводе с английского, SMD — это surface mounted device, то есть «устройство, монтируемое на поверхность». В отличие от технологий недавнего прошлого, SMD элементы занимают гораздо меньше места. SMD позволяет нам сделать устройство очень компактным. Достаточно посмотреть на материнскую плату любого смартфона, чтобы понять о чем идет речь.
SMD бывают разных размеров. Элементы прямоугольной формы такие как светодиоды или резисторы измеряются по длинам сторон. Например, на популярной плате Arduino Uno установлены светодиоды 0805. В переводе с дюймовой системы в метрическую это соответствует размеру 2 x 1,25 мм. А большинство керамических конденсаторов на той же плате имеют уже размер 0603 = 1,6 x 0,8 мм.
В данном наборе мы будем учиться работать с достаточно крупными элементами типоразмера 1206.
Монтажная схема
Для сборки Симплекс маяка понадобится монтажная схема, на которой все посадочные места отмечены специальным метками и надписями. По факту, вся схема уже нанесена на обратную сторону сертификата, там, куда устанавливаются детали устройства.
Примечание для версии 2.0.1: резистор R5 находится над микросхемой U3.
Припаиваем элементы согласно монтажной схеме и таблице элементов.
Компонент | Маркер | Количество |
Резистор 1 кОм | R6,R7,R8,R9,R10 | 5 |
Резистор 10 кОм | R1,R2,R3,R11 | 4 |
Конденсатор керамический 0,1 мкФ | C2,C3,C4,C5,C6 | 5 |
Держатель CR2032 | B1 | 1 |
Тактовая кнопка | SW2,SW3,SW4,SW5,SW6 | 5 |
Переключатель | SW1 | 1 |
Светодиод | LED1-LED25 | 25 |
Микроконтроллер CH552G | U1 | 1 |
Микросхема 74HC595 | U2,U3 | 2 |
Полезные советы и справка:
- катод на посадочном месте светодиода на плате обозначен полоской; катод у самого светодиода обозначается небольшой зеленой меткой; таким образом, все светодиоды должны смотреть зеленой меткой в сторону полоски;
- у резисторов и керамических конденсаторов нет полярности, можно припаивать их какой угодно стороной;
- чтобы правильно припаять микросхему, следует разместить её так, чтобы метка на ней совпала с меткой на её посадочном месте; обычно метка — это небольшой кружочек на верхней поверхности корпуса или выемка на одной стороне микросхемы.
Программирование
Как уже говорилось, программировать маяк будем в среде Arduino IDE. Для начала, следует разобраться с тем, как настроить среду для работы с микроконтроллером CH552G. Об этом у нас есть отдельная инструкция — программирование CH552G.
Также следует разобраться с тем, что такое сдвиговый регистр. Именно с помощью этого устройства реализовано управление матрицей светодиодов в Симплекс маяке.
Первые 5 бит первого регистра отвечают за аноды матрицы, первые же 5 бит второго регистра — за катоды. Полную схему маяка можно найти в конце инструкции.
Итак, что куда подключено:
Arduino IDE | Симплекс маяк |
32 | Data — регистр: данные |
14 | Latch — регистр: защёлка |
15 | Clock — регистр: синхроимпульс |
16 | Reset — регистр: сброс |
34 | ШИМ сигнал для управления яркостью матрицы |
17 | SW2 — кнопка |
31 | SW3 — кнопка |
30 | SW4 — кнопка |
Первая программа будет мигать верхним левым светодиодом.
#define R_DATA 32
#define R_LATCH 14
#define R_CLOCK 15
#define R_RESET 16
#define R_PWM 34
// настраиваем контакты регистров
void initReg(){
pinMode( R_DATA, OUTPUT );
pinMode( R_LATCH, OUTPUT );
pinMode( R_CLOCK, OUTPUT );
pinMode( R_RESET, OUTPUT );
pinMode( R_PWM, OUTPUT );
digitalWrite( R_RESET, HIGH );
digitalWrite( R_PWM, LOW );
}
// открываем защёлку и передаем данные регистров на его выход
void latch(){
digitalWrite(R_LATCH, HIGH);
digitalWrite(R_LATCH, LOW);
}
// записываем восемь бит в регистры
void setByte( byte b ){
for(int i=0; i<8; i++){
digitalWrite(R_CLOCK, LOW);
digitalWrite(R_DATA, b & (1 << i ));
digitalWrite(R_CLOCK, HIGH);
}
}
// очистка матрицы
void clear(){
setByte( 0x00 );
setByte( 0xFF );
latch();
}
// вывод точки с координатами x, y
void setPoint(byte x, byte y){
setByte( 1<<(7-x) );
setByte( ~(1<<(7-y)) );
latch();
}
void setup() {
initReg();
}
void loop() {
setPoint( 0, 0 );
delay(500);
clear();
delay(500);
}
В этом примере описаны три полезные функции для работы с регистрами: initReg, setByte и latch. А также две функции для работы с графикой: clear и setPoint. Эти функции пригодятся и в других программах для маяка.
Важно. Перед загрузкой программы на плату следует передвинуть рычажок переключателя SW1 в нижнее положение. Чтобы плата работала автономно от батарейки, рычажок SW1 должен быть в верхнем положении.
Загружаем программу на устройство и проверяем результат. Левый верхний светодиод должен мигать раз в секунду.
В следующей программе по матрице будет пробегаться сначала горизонтальная линия, потом вертикальная. Своего рода сканер.
#define R_DATA 32
#define R_LATCH 14
#define R_CLOCK 15
#define R_RESET 16
#define R_PWM 34
void initReg(){
pinMode( R_DATA, OUTPUT );
pinMode( R_LATCH, OUTPUT );
pinMode( R_CLOCK, OUTPUT );
pinMode( R_RESET, OUTPUT );
pinMode( R_PWM, OUTPUT );
digitalWrite( R_RESET, HIGH );
digitalWrite( R_PWM, LOW );
}
void latch(){
digitalWrite(R_LATCH, HIGH);
digitalWrite(R_LATCH, LOW);
}
void setByte( byte b ){
for(int i=0; i<8; i++){
digitalWrite(R_CLOCK, LOW);
digitalWrite(R_DATA, b & (1 << i ));
digitalWrite(R_CLOCK, HIGH);
}
}
void setXLine(byte y){
setByte( 0xFF ); // включаем все аноды
setByte( ~(1<<(7-y)) ); // включаем катод y
latch();
}
void setYLine(byte x){
setByte( 1<<(7-x) ); // включаем анод x
setByte( 0x0 ); // включаем все катоды
latch();
}
void setup() {
initReg();
}
void loop() {
for( byte y=0; y<5; y++ ){
setXLine(y);
delay(100);
}
for( byte x=0; x<5; x++ ){
setYLine(x);
delay(100);
}
}
Здесь мы описали две дополнительные функции setXLine и setYLine, которые как раз и реализуют вывод линии на матрицу. Загружаем программу на устройство и проверяем результат.
Напишем третью программу, которая будет отображать на матрице статичный рисунок — глиф. Чтобы это сделать, придётся реализовать динамическую индикацию.
#define R_DATA 32
#define R_LATCH 14
#define R_CLOCK 15
#define R_RESET 16
#define R_PWM 34
byte glyph[25] = {
0,1,1,1,0,
1,0,1,0,1,
1,1,0,1,1,
0,1,1,1,0,
0,1,1,1,0
};
void initReg(){
pinMode( R_DATA, OUTPUT );
pinMode( R_LATCH, OUTPUT );
pinMode( R_CLOCK, OUTPUT );
pinMode( R_RESET, OUTPUT );
pinMode( R_PWM, OUTPUT );
digitalWrite( R_RESET, HIGH );
digitalWrite( R_PWM, LOW );
}
void latch(){
digitalWrite(R_LATCH, HIGH);
digitalWrite(R_LATCH, LOW);
}
void setByte( byte b ){
for(int i=0; i<8; i++){
digitalWrite(R_CLOCK, LOW);
digitalWrite(R_DATA, b & (1 << i ));
digitalWrite(R_CLOCK, HIGH);
}
}
void setup() {
initReg();
}
void loop() {
for(byte y=0; y<5; y++){
byte row = 0;
for(byte x=0; x<5; x++){
if( glyph[y*5+x] == 1 ){
row |= 1<<(7-x);
}
}
setByte( row );
setByte( ~(1<<(7-y)) );
latch();
}
}
Готово! Загружаем программу на маяк и наблюдаем на матрице черепок.
Использование сертификата
Для активации подарочного сертификата следует:
- Зарегистрироваться на сайте магазина shop.robotclass.ru
- Зайти в личный кабинет с помощью ссылки «Мой профиль»
- Перейти в раздел «Баллы и сертификаты»
- В поле «применить сертификат» ввести уникальный код сертификата и нажать кнопку «применить»
5. после активации сертификата вам будут начислены баллы магазина, эквивалентные сумме сертификата! Например, после активации сертификата на 2048 рублей в личном кабинете появится 20480 баллов.