UA RU
Мобільна версія Гарантійні умови Співпраця
Зворотний зв'язок Мапа сайту
0 0
Графік роботи магазину:
Пн-Пт: 8.00 - 19.00
Сб: 10.00 - 19.00
Нд: вихідний
Каталог
Напиши статтю і отримай знижку!

Используем старую технику для Arduino-проектов

2019-07-04

Всі статті →

Наверняка дома у многих найдется старый DVD-плеер или какой-нибудь тюнер (спутниковый или эфирный). Возможно даже нерабочий. Такое оборудование и выкинуть жалко, и лежит оно, собирая пыль, никому не нужное. Но если для Ваших проектов на базе Ардуино не хватает стильного корпуса, или же Вы хотите сэкономить на покупке большого количеств шилдов, то тогда эта статья именно для Вас. Лично у меня завалялся старый нерабочий спутниковый тюнер, вот его и будем «дружить» с Arduino UNO. Данная статья хоть и расчитана на начинающих, но предполагает наличие таких знаний:

  • Что такое Ардуино, какие порты у него есть
  • Что такое шилд, скетч, ИК-приемник, светодиод, семисегментный индикатор, ток и напряжение
  • Что нужно для написания программы для Ардуино
  • Как запрограммировать Ардуино
  • Что такое системы счисления

Для начала разберем, что вообще нам может пригодиться, кроме корпуса. Разбираем прибор, снимаем крышку и видим там 3 платы:

  • блок питания
  • основная плата
  • плата передней панели (с кнопочками, ИК-приемником, светодиодами и четырехразрядным семисегментным светодиодным индикатором).

Начинка конечно же может отличаться от моей, но не существенно. У кого-то блок питания может оказаться на одной плате с основной. Бывает так, что и индикаторы и кнопки управления с передней панели тоже расположены на основной плате, но даже если и так, они все равно как правило на плате выделены в отдельный блок. Если у Вас блок питания от спутникового тюнера, как у меня, то с него выходят такие напряжения:

  • +3,3 В
  • +5 В
  • +12 В
  • +22 В

Иногда еще попадаются блоки питания с напряжениями –12В, +7В и +30В, но это редкость. +3,3В и +5В можно использовать для питания Ардуино и различных датчиков и индикаторов. +12В не рассчитано на большие токи, но для управления парочкой релюшек вполне подойдет. +22В можно использовать для запитки 24-хвольтных устройств, причем с током до 500 мА.

Основная же плата для меня была неинтересна, к тому же она нерабочая. Поэтому я ее выкинул, а на ее место в будущем встанет наш микроконтроллер. А вот плата передней панели меня заинтересовала больше всего. Как оказалось, все платы на разных устройствах имеют схожую схемотехнику. Первая же попавшаяся мне схема в интернете, практически полностью совпала со схемой моей платы (у меня 7 кнопок из 8-ми максимально возможных при такой схеме):

Ссыла на большое изображение

Не обошлось и без опечаток. Все кнопки подключены одним контактом к линии FA, FB, FC или FD, а другим контактом к линии К0 или к К1 (на некоторых схемах KIN1 и KIN2 либо К1 и К2 соответственно). Все эти линии подтянуты резисторами к +5В. Таким образом получается классическая матрица 2х4 из кнопок. Светодиоды имеют свои собственные линии управления. На линии Err подключен зеленый светодиод, а на STB – красный (я бы сделал наоборот, но уже как есть). Контакты GND и 5V используются для подачи питания на плату. Контакт IR – это выход сигналов ИК-приемника от пульта дистанционного управления. Контакты CLK и Data подключены к микросхеме сдвигового регистра 74HC164 (иногда вместо нее стоит 74HC595), которая вместе с контактами FA, FB, FC и FD используется для вывода информации на семисегментный дисплей.

Если Вы только начинаете изучать платформу Arduino, то такая плата может заменить Вам сразу несколько стандартных шилдов. Так, например, чтобы поморгать светодиодиком, достаточно подключить контакты GND и Err (или STB) к Ардуино, для подключения кнопки нужны контакты FA, K0 и 5V, для подключения ИК-приемника – GND, 5V и IR (примеры работы есть в интернете в большом количестве, поэтому я не буду их здесь повторять). Я же сейчас подключу все сразу, чтобы максимально задействовать все возможности платы. Для этого нам понадобятся:

  • Микроконтроллер (я использую Arduino UNO)
  • Плата передней панели
  • Соединительные провода (папа – папа)

Еще нужен источник питания +5В, но так как плата потребляет небольшой ток, то можно обойтись и без него, если подключить Ардуино к компьютеру по USB. Вместо Arduino UNO можно использовать любую другую плату из семейства Arduino или аналогичную. Монтажная плата здесь не нужна, так как плата передней панели имеет шлейф проводов с разъемом, к которому очень хорошо подключаются соединительные провода. 5V и GND платы соединяем с соответствующими контактами Arduino. Остальные контакты на Ваше усмотрение, я выбрал так:

Data – 2 пин Ардуино

CLK – 3 пин Ардуино

Err – 4 пин Ардуино (зеленый светодиод)

STB – 5 пин Ардуино (красный светодиод)

К0 – 7 пин Ардуино (кнопки первой группы)

К1 – 8 пин Ардуино (кнопки второй группы)

IR – 12 пин Ардуино (ИК-приемник)

FA – 6 пин Ардуино

FB – 9 пин Ардуино

FC – 10 пин Ардуино

FD – 11 пин Ардуино

Я хотел, чтобы яркостью семисегментных индикаторов и красного светодиода можно было бы управлять, поэтому и подключил их к PWM-портам Ардуино. Остальное подключал наобум. Из библиотек нам понадобится только IRremote (для ИК-приемника). Скачать ее можно здесь: http://github.com/shirriff/Arduino-IRremote. Зеленым светодиодом будем моргать (включать/выключать), яркость красного светодиода будем изменять от минимальной к максимальной, на индикатор будем выводить порядковый номер текущего цикла программы в различных системах счисления, кнопками будем переключать режим вывода (систему счисления), а принятые команды с ИК-приемника будем отправлять на терминал (в COM-порт).

Вот мой пример программы (скетч) с подробным описанием что и для чего:

/*=================================================================

/* Подключение платы передней панели от ТВ-приставки (тюнера) к Arduino UNO */

 

#include <IRremote.h> // Подключим библиотеку для работы с ИК-приемником

#define IR_PORT 12 // - Пин IR на плате

IRrecv irrecv(IR_PORT); // Создаем переменную типа IRrecv

decode_results results; // Создаем переменную, хранящую результат

 

// Будем мигать зеленым светодиодом

// Подключим его на любой порт Ардуино, пусть это будет 4-ый

#define LED_GREEN 4 // - Пин Err на плате

// Будем менять яркость красного светодиода

// Подключим его на PWM-порт Ардуино, пусть это будет 5-ый

#define LED_RED 5 //PWM - Пин STB на плате

// Создадим переменные для хранения состояния светодиодов

int LED_RED_STATUS = 0; // для красного

int LED_GREEN_STATUS = 0; // для зеленого

 

// Теперь подключим пины, необходимые для работы семисегментного индикатора

// Чтобы была возможность регулировать яркость индикаторов, подключим их на PWM-порты Ардуино

// При работе с этими портами нужно учесть, что максимальное значение будет соответствовать минимальной яркости индикатора, и наоборот минимальное значение - максимальной яркости

#define LED_FA 6 //PWM - Пин FA на плате: первый символ (разряд единиц)

#define LED_FB 9 //PWM - Пин FB на плате: второй символ (разряд десятков)

#define LED_FC 10 //PWM - Пин FC на плате: третий символ (разряд сотен)

#define LED_FD 11 //PWM - Пин FD на плате: четвертый символ (разряд тысяч)

// Для управления микросхемой 74HC164 (отдельными сегментами 7-сегментных индикаторов), нужно задействовать еще 2 пина

#define LED_DATA 2 // - Пин DA на плате

#define LED_CLCK 3 //PWM - Пин CK на плате

// Зададим яркость в виде константы

#define LED_BRIGHT 0

 

// На семисегментный индикатор будем выводить количество циклов программы

unsigned int COUNTER = 0; // счетчик циклов (от 0 до 65535)

// Выводить будем в различных системах счисления (2-, 8-, 10- и 16-ричная)

int System = 5; // В этой переменной будем хранить текущую систему счисления, а переключаться между ними будем при помощи кнопок на плате

// создадим массив, в котором будем хранить комбинации для всех цифр от 0 до A (для 74HC164) с учетом схемы платы

byte digits[16] = {

0b11000000, // 0

0b11111001, // 1

0b10100100, // 2

0b10110000, // 3

0b10011001, // 4

0b10010010, // 5

0b10000010, // 6

0b11111000, // 7

0b10000000, // 8

0b10010000, // 9

0b10001000, // A

0b10000011, // B

0b11000110, // C

0b10100001, // D

0b10000110, // E

0b10001110 // F

};

#define LED_DELAY 5 // Время показа каждого разряда (при увеличении будет заметно мерцание)

#define PROG_DELAY 500 // Примерное время одного полного цикла программы

// Определим, куда подключены линии считывания кнопок (К0 и К1 на плате)

#define BUTTON_K0 7 // - Пин K0 на плате

#define BUTTON_K1 8 // - Пин K1 на плате


 

void setup() {

// В COM-порт будем записывать

Serial.begin(9600); // Скорость работы COM-порта

irrecv.enableIRIn(); // Начинаем прием

// Установим нужные порты на выход

pinMode(LED_GREEN, OUTPUT); // для зеленого светодиода

pinMode(LED_RED, OUTPUT); // для красного светодиода

// для четырехразрядного семисегментного индикатора

pinMode(LED_FA, OUTPUT); // для первого разряда

pinMode(LED_FB, OUTPUT); // для второго разряда

pinMode(LED_FC, OUTPUT); // для третего разряда

pinMode(LED_FD, OUTPUT); // для четвертого разряда

pinMode(LED_DATA, OUTPUT); // для данных

pinMode(LED_CLCK, OUTPUT); // для тактовых импульсов

// Установим нужные порты на вход

pinMode(BUTTON_K0, INPUT); // для считывания кнопок на линии К0

pinMode(BUTTON_K1, INPUT); // для считывания кнопок на линии К1

// pinMode(IR_PORT, INPUT); // для считывания комманд с ИК-пульта

// Для линий FA, FB, FC и FD установим начальные значения (описание см. дальше)

analogWrite(LED_FA,255);

analogWrite(LED_FB,255);

analogWrite(LED_FC,255);

analogWrite(LED_FD,255);

}

 

void loop() {

// Яркость красного светодиода будем задавать по формуле: наша переменная в квадрате - 1

// Так как яркость можно задавать от 0 до 255, то наша переменная может принимать значения от 1 до 16

// При LED_RED_STATUS = 1 яркость будет равна 0, а при LED_RED_STATUS = 16 яркость будет равна 255

LED_RED_STATUS = LED_RED_STATUS + 1; // Увеличим яркость красного светодиода

analogWrite(LED_RED,(LED_RED_STATUS*LED_RED_STATUS)-1); // включим красный светодиод на новую яркость

if( LED_RED_STATUS == 16 ) { // если яркость максимальная, то

LED_RED_STATUS = 0; // уменьшим ее до минимума

};

if( LED_GREEN_STATUS == 1 ) { // Проверим состояние зеленого светодиода

/*=================================================================

Скетч:

Ваша оцінка статті:

Відмінно
Добре
Задовільно
Погано
Дуже погано

Загальна оцінка:

Оцінка "Используем старую технику для Arduino-проектов"
5 з 5
зроблена на основі 3 оцінок 3 клієнтських відгуків.

Дякуємо Вам за звернення! Ваш відгук з'явиться після модерації адміністратором.
Забор
16.03.2023 22:30:24
Дуже цiкаво.
Сергей
29.01.2021 23:02:58
Заработало все и сразу. Правдв только у меня оч сильное мерцание на сегментнике.
Амоним
03.12.2020 13:10:21
Неплохо, нужно тоже что-нибудь разобрать
оплата картами Visa і MasterCard