Общение        24.05.2023   

Ардуино подключение светодиода и кнопки. Подключение кнопки запуска компьютера к «материнке. Подключение кнопки Ардуино

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

Это статья, которая представляет собой небольшое дополнение к некогда написанному материалу о сборке компьютера под одноименным названием “Собираем компьютер своими руками” или “Что есть что в компьютере, часть 2″ .

Речь пойдет о небольшом упущенном, но немаловажном элементе, - подключении разъемов (всяких там кнопочек, лампочек и пр.) передней панели .

Поехали.

Подключение передней панели - инструкция по подключению

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

Они выглядят примерно так (кликабельно):

Power SW - кабелек кнопки включения; Power LED + - - кабели индикатора (лампочки) питания; HDD LED – кабель индикатора загрузки (та самая лампочка которая обычно мигает); RESET SW - кабель кнопки перезагрузки.

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

На каждой материнской плате расположен так называемый блок контактов Front panel или сокращенно F-Panel . Обычно он находится в правом нижнем углу платы, но бывают и исключения. Вот так примерно он выглядит:

Подключение подключение передней панели и её пинов осуществляется вручную и для этого в сопроводительных документах к материнской плате обязательно есть подсказки.

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

В который Вы просто втыкаете, как показано выше, сами разъемы, а потом этот переходник в мат.плату и всё получается быстро и просто. Но везет так далеко не всем, да и наверняка Вы попали сюда потому, что пытаетесь подключить всё для уже бывшей (а не новой) материнсткой платы.

Что еще стоит знать

Кроме того, на передней панели системного блока иногда бывают интерфейсные разъемы USB (обычно их пара штук) и порты подключения наушников/колонок и микрофона. Выглядит это примерно так:

Кабели- пины, для подключении этих внешних USB -портов, внутри системного блока выглядят так:

Подключаются они к блокам пинов на материнской плате, которые называются F- USB1 и F-USB2 соответственно (выглядеть по цвету и расположению могут не совсем так, как на скриншоте ниже, но по форме и количеству\расположению штырьков все тоже самое):

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

Подключить их просто (в другие блоки пинов они просто не влезут). Но и для них в сопроводительных документах к мат плате тоже есть подсказки:

Собственно, всё и ничего сложного в этом нет.

Что делать, если не сохранилось документации к мат.плате

Либо возьмите лупу и внимательно изучите упомянутый выше разъем для подключения на материнской плате компьютера:

Обычно он хоть как-то, но символично подписан, раза так со второго или третьего можно угадать что там к чему и подключить всё корректно. Провода подключаются, как правило, надписью на себя:

Изредка второй ряд (дальний) смотрит надписями в другую сторону, но такое встречается достаточно редко. Так или иначе, как я писал выше, не с первого, так со второго раза - угадаете:)

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

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

Послесловие

Если есть какие-то вопросы или дополнения, - пишите в комментариях или с помощью . Буду рад помочь и просто выслушать Вас.

PS : Представленное на рисунках показано исключительно для примеров и ознакомления. Никакой рекламы.
PS2 : Статья написана человеком, обитающим в сети под ником (друга и помощника проекта). За что ему огромное спасибо .

При разработке устройств часто требуется использовать кнопку, подключённую к плате Arduino. В качестве кнопки обычно используются тактовые кнопки, которые замыкают цепь при нажатии и не пропускают ток в не нажатом состоянии. Но недостаточно просто подключить кнопку к цифровому входу микроконтроллера. В статье показаны нюансы подключения и приведены примеры.

Для примера будем использовать тактовую кнопку. Кнопка имеет 4 вывода. Но на самом деле 4 вывода нужны только для прочного монтажа кнопки на плате. Внутри у неё всего 2 контакта по бокам, каждый из которых выступает за границы корпуса слева и справа. Это хорошо видно на фотографиях кнопки в разборе:

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

Кнопка в разрезе. Видно, что крайние контакты физически соединены с одним выводом, выходящим с двух сторон. Центральный вывод устроен аналогично.

Важно не перепутать, какие контакты соединены (то есть являются единым целом), а какие должны замыкаться при нажатии. Кнопка подключается одним из контактов к любому цифровому пину Arduino, другим контактом к положительному полюсу питания. Далее нужно настроить пин Arduino, как вход, функцией pinMode() и можно считывать значение с вывода с помощью функции digitalRead() . При нажатии кнопки с вывода будет считываться значение HIGH. На этом можно было бы и закончить, если бы не одно но: в разомкнутом состоянии на ввод будут случайным образом подаваться сигналы LOW и HIGH, потому что такой вывод ни к чему не подключён и «висит в воздухе». Для правильного подключения нужно вывод, к которому подключена кнопка, «подтянуть» к одному из значений. В нашем случае при не нажатой кнопке с пина должно считываться значение LOW, поэтому подтягивать будем к земле.

Для этого необходимо подключать параллельно с кнопкой к выбранному выводу большого номинала (10 КОм и больше), через который будет протекать совсем небольшой ток. Тогда при не нажатой кнопке на пине будет чёткое значение LOW, а при нажатии кнопки наш подтягивающий резистор никак не помешает считать HIGH. Потому что через подтягивающий резистор утечёт совсем немного тока по сравнения с током короткого замыкания пина контроллера на положительный полюс питания.

После сборки схемы загрузите в плату следующую программу:

/* Переключаем светодиод при нажатии на кнопку Схема устройства: * Светодиод подключён к 13 пину (встроенный светодиод) * Тактовая кнопка подключена ко 2му пину * Резистор 10кОм используется для подтяжки 2го пина к земле */ //Задаём константы // set pin numbers: const int buttonPin = 2;// Номер пина, к которому подключена кнопка const int ledPin = 13; // Номер пина, к которому подключен светодиод //Объявляем переменные int buttonState = 0; // Переменная для хранения статуса кнопки void setup() { // Настраиваем вывод, к которому подключён светодиод, как выход pinMode(ledPin, OUTPUT); // Настраиваем вывод, к которому подключена кнопка, как вход pinMode(buttonPin, INPUT); } void loop(){ // Считываем состояние кнопки buttonState = digitalRead(buttonPin); // Проверяем, нажата ли кнопка // Если нажата, на пин с кнопкой поступит значение HIGH if (buttonState == HIGH) { // Включаем светодиод digitalWrite(ledPin, HIGH); } else { // Выключаем светодиод digitalWrite(ledPin, LOW); } }

Переключаем светодиод при нажатии на кнопку

Схема устройства:

* Светодиод подключён к 13 пину (встроенный светодиод)

* Тактовая кнопка подключена ко 2му пину

* Резистор 10кОм используется для подтяжки 2го пина к земле

//Задаём константы

// set pin numbers:

const int buttonPin = 2 ; // Номер пина, к которому подключена кнопка

const int ledPin = 13 ; // Номер пина, к которому подключен светодиод

//Объявляем переменные

int buttonState = 0 ; // Переменная для хранения статуса кнопки

void setup () {

// Настраиваем вывод, к которому подключён светодиод, как выход

pinMode (ledPin , OUTPUT ) ;

// Настраиваем вывод, к которому подключена кнопка, как вход

pinMode (buttonPin , INPUT ) ;

void loop () {

// Считываем состояние кнопки

buttonState = digitalRead (buttonPin ) ;

И Arduino здесь не является исключением, после того, как помигает светодиодом пробует подключать кнопку и управлять с ее помощью миганием этого самого светодиода. Особенно сложного здесь ничего нет, но есть один нюанс, называемый «дребезг контактов». О том как правильно подключать кнопку к Arduino , что такое «дребезг контактов», как этот эффект проявляется и методах борьбы с ним и пойдет сегодня речь.

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

Если ключ S 1 разомкнут (кнопка отпущена), то на цифровом входе D in микроконтроллера мы будем иметь напряжение 5В, соответствующее логической единице. При нажатой кнопке вход D in подключается к земле, что соответствует уровню логического нуля и все напряжение у нас упадет на резисторе R 1 , величину которого выбирают исходя из того, чтобы при нажатой кнопке через него протекал не слишком большой ток (обычно порядка 10÷100 кОм).

Если же просто подключить кнопку между цифровым входом и землей (без резистора R 1 , подключенного к +5В) или между входом и +5В, то в положении, когда кнопка не нажата на цифровом входе микроконтроллера будет присутствовать неопределенное напряжение (может соответствовать уровню 0, а может и 1) и мы бы считывали случайные состояния. Поэтому используется резистор R 1 , который, как говорят, «подтягивает» вход к +5В при отпущенной кнопке.

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

Подключение кнопки к Arduino

Микроконтроллеры Atmel AVR ATmega (на базе которых и строится Arduino ) имеют встроенные программно подключаемые нагрузочные резисторы R н величиной 20 кОм и мы можем воспользоваться ими, упростив схему подключения.

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

Пример скетча Arduino , который включает и выключает встроенный светодиод на 13 пине, в зависимости от того, нажата или отпущена кнопка, подключенная ко второму пину, используя внутренний нагрузочный резистор:

void setup() { pinMode(13, OUTPUT); //светодиод на 13 пине pinMode(2, INPUT); //2 пин - в режиме входа. Кнопка подключена к земле. digitalWrite(2, HIGH); //подключаем подтягивающий резистор } void loop() { digitalWrite(13, !digitalRead(2)); // считываем состояние кнопки и переключаем светодиод }

Здесь мы инвертируем значение, считанное с входного порта, путем использование логического НЕ , обозначаемого восклицательным знаком перед функцией digitalRead , так как при нажатой кнопке мы считываем 0, а для включения светодиода в порт нам нужно отправить 1.

Дребезг контактов

Все бы ничего, если бы мы жили в идеальном мире с идеальными кнопками. Реальные механические контакты, которые присутствуют в кнопках никогда не замыкаются и не размыкаются мгновенно. В течении непродолжительного промежутка времени происходит многократное замыкание и размыкание контактов ключа (кнопки) в результате чего на вход микроконтроллера поступает не единичный перепад напряжения, а целая пачка импульсов. Это явление носит название «дребезг контактов».

В примере выше, когда при помощи кнопки мы просто включали и выключали светодиод мы не заметили это, так как включение/выключение светодиода в момент «дребезга» происходило очень быстро и мы просто не увидели это глазом.

Эта библиотека включает следующие методы:

  • Bounce () — инициализация объекта Bounce
  • void interval (unsigned long interval) — устанавливает время антидребезга в миллисекундах
  • void attach (int pin) — устанавливает пин, к которому подключена кнопка и подключает на этом выводе встроенный подтягивающий резистор
  • int update () — поскольку Bounce не использует , вы «обновляете» объект до того, как считываете его состояние и это нужно делать постоянно (например, внутри loop ). Метод update обновляет объект и возвращает TRUE (1), если состояние пина изменилось (кнопка была нажата или же, наоборот, отпущена) и FALSE (0) в противном случае. Вызов метода update внутри loop необходимо производить только один раз.
  • int read () — возвращает обновленное состояние пина

По умолчанию, библиотека Bounce использует интервал стабилизации (stable interval ) для реализации антидребезга. Это проще для понимания и позволяет не знать длительность дребезга.

Параметр stable interval библиотеки Bounce

Определив

#define BOUNCE_LOCK-OUT

#define BOUNCE_LOCK-OUT

в файле Bounce.h можно включить альтернативный метод борьбы с дребезгом. Этот метод позволяет быстрее реагировать на изменение состояния кнопки, однако, требует установить продолжительность дребезга, а эта величина, как я отметил выше увеличивается с течением времени, а значит, потребуется вносить изменения в код, либо установить заведомо большее значение.

Приведу пример использования этой библиотеки:

#include Bounce bouncer = Bounce(); void setup() { pinMode(2 ,INPUT); // кнопка на пине 2 digitalWrite(2 ,HIGH); bouncer .attach(2); // устанавливаем кнопку bouncer .interval(5); Serial.begin(9600); //установка Serial-порта на скорость 9600 бит/сек } void loop() { if (bouncer.update()) { //если произошло событие if (bouncer.read()==0) { //если кнопка нажата Serial.println("pressed"); //вывод сообщения о нажатии } else Serial.println("released"); //вывод сообщения об отпускании } }

#include

Bounce bouncer = Bounce () ; //создаем экземпляр класса Bounce

void setup ()

pinMode (2 , INPUT ) ; // кнопка на пине 2

digitalWrite (2 , HIGH ) ; // подключаем встроенный подтягивающий резистор

bouncer . attach (2 ) ; // устанавливаем кнопку

bouncer . interval (5 ) ; // устанавливаем параметр stable interval = 5 мс

Serial . begin (9600 ) ; //установка Serial-порта на скорость 9600 бит/сек

void loop ()

if (bouncer . update () )

{ //если произошло событие

if (bouncer . read () == 0 )

{ //если кнопка нажата

Serial . println ("pressed" ) ; //вывод сообщения о нажатии

else Serial . println ("released" ) ; //вывод сообщения об отпускании

И еще один небольшой практически полезный пример. Пусть у нас есть кнопка, при длительности нажатии которой меньше 2 секунд происходит изменение переменной current_mode , в которой хранится текущий режим работы некоторого устройства. В этом примере режим будет изменяться от 0 до 5. Один раз нажали — режим имеет номер 1. Еще раз нажали — 2. И так до пяти. После пяти при очередном нажатии текущий режим становится первым и опять по кругу. Если же удерживать кнопку в нажатом состоянии более 2 секунд переменной current_mode присваивается значение 0.

#include #define pressed_long 2000 // долговременное нажатие = 2 секунды #define num_modes 5 // максимальный номер режима short int max_mode = num_modes + 1; // вспомогательная переменная Bounce bouncer = Bounce(); //создаем экземпляр класса Bounce unsigned long pressed_moment; // момент нажатия кнопки int current_mode = 0; // текущий режим void setup() { pinMode(2 ,INPUT); // кнопка на пине 2 digitalWrite(2 ,HIGH); // подключаем встроенный подтягивающий резистор bouncer .attach(2); // устанавливаем кнопку bouncer .interval(5); // устанавливаем параметр stable interval = 5 мс Serial.begin(9600); //установка Serial-порта на скорость 9600 бит/сек } void loop() { if (bouncer.update()) { //если произошло событие if (bouncer.read()==0) { //если кнопка нажата pressed_moment = millis(); // запоминаем время нажатия } else { // кнопка отпущена if((millis() - pressed_moment) < pressed_long) { // если кнопка была нажата кратковременно current_mode++; // увеличиваем счетчик текушего режима current_mode %= max_mode; // остаток от целочисленного деления if (current_mode == 0) current_mode = 1; // режим меняется от 1 до num_modes } else { // кнопка удерживалась долго current_mode = 0; pressed_moment = 0; // обнуляем момент нажатия } Serial.println("Current mode:"); Serial.println(current_mode); // выводим сообщение о текущем режиме } } }

#include

#define pressed_long 2000 // долговременное нажатие = 2 секунды

#define num_modes 5 // максимальный номер режима

short int max_mode = num_modes + 1 ; // вспомогательная переменная

Bounce bouncer = Bounce () ; //создаем экземпляр класса Bounce

unsigned long pressed_moment ; // момент нажатия кнопки

int current_mode = 0 ; // текущий режим

void setup ()

pinMode (2 , INPUT ) ; // кнопка на пине 2

digitalWrite (2 , HIGH ) ; // подключаем встроенный подтягивающий резистор

bouncer . attach (2 ) ; // устанавливаем кнопку

bouncer . interval (5 ) ; // устанавливаем параметр stable interval = 5 мс

В этом примеры мы рассмотрим подключение кнопки к контроллеру Arduino. При нажатие кнопки мы будем зажигать встроенный светодиод. Большинство плат Arduino имеют встроенный SMT светодиод, подключенный к выходу 13 (pin 13).

Необходимые компоненты

  • контроллер Arduino
  • тактовая кнопка
  • 10кОм резистор
  • контактная макетная плата
  • соединительные провода

Подключение

Подключаем выход питания (5V) и землю (Gnd), красным и черным проводом соответственно к макетной плате. Обычно на макетных платах для питания и земли используют крайние ряды контактов, как показано на рисунке. Третьим синим проводом мы соединяем цифровой пин 2 контроллера Arduino к контакту тактовой кнопки. К этому же контакту, либо к контакту, постоянно соединенному с ней в 4х штырковом исполнении, подключаем подтягивающий резистор 10 кОм, который в свою очередь соединяем с землей. Другой выход кнопки соединяем с питанием 5 В.

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

Замечание: Чаще всего тактовые кнопки имеют по два контакта с каждой стороны так, как это показано на рисунке подключение. При этом по форме кнопка почти квадратная. ВАЖНО не перепутать при подключении какие контакты соединены, а какие замыкаются при нажатие. Лучше всего прозвонить кнопку если не уверены.

Можно также подключить кнопку наоборот — через подтягивающий резистор к питанию и через кнопку к земле. Тогда с входа будет считваться HIGH, а при нажатие кнопки LOW.

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

Схема

Код

/* Кнопка Включаем и выключаем светодиод нажатием кнопки. created 2005 by DojoDave modified 28 Oct 2010 by Tom Igoe This example code is in the public domain. */ // задаем константы const int buttonPin = 2; // номер входа, подключенный к кнопке const int ledPin = 13; // номер выхода светодиода // переменные int buttonState = 0; // переменная для хранения состояния кнопки void setup() { // инициализируем пин, подключенный к светодиоду, как выход pinMode(ledPin, OUTPUT); // инициализируем пин, подключенный к кнопке, как вход pinMode(buttonPin, INPUT); } void loop(){ // считываем значения с входа кнопки buttonState = digitalRead(buttonPin); // проверяем нажата ли кнопка // если нажата, то buttonState будет HIGH: if (buttonState == HIGH) { // включаем светодиод digitalWrite(ledPin, HIGH); } else { // выключаем светодиод digitalWrite(ledPin, LOW); } }


Смотрите также

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

Подготовка к подключению

Предлагаем Вам ознакомиться с перечнем основных подготовительных этапов, которые значительно упростят процедуру подсоединения клавиш запуска и перезагрузки компьютера к его основной плате:

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


Подключение интерфейса передней панели

Если Вы внимательно изучили компоновку материнской платы своего компьютера, а также нашли все необходимые соединители и порты, то настало время сопоставить их между собой. Начать эту процедуру следует с коннекторов, которые отвечают за включение и перезагрузку системы. На их корпусах нанесены надписи «POWERSW» и «RESTARTSW» соответственно. Соединяем данные коннекторы со штырьками, возле которых присутствуют следующие обозначения: «PWRBTN»и «RESET».

Индикатор, отображающий работу HDD, имеет разъем с подписью «HDDLED». Его необходимо воткнуть в штепсель «HDLED –».

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

Особенности подключения на платах Asus и Gigabyte (видео)

В предоставленном видеоролике очень наглядно показан процесс подключения к материнской плате кнопок питания и перезагрузки системы (на примере плат от таких производителей, как ASUS и GIGABYTE).


Нет ничего сложного в подключении передней панели к основной плате ПК. Самое главное – это детально ознакомиться с документацией и внимательно осмотреть все надписи на материнской плате. Также не забывайте соблюдать полярность при подключении коннекторов к пинам порта, иначе светодиодные сигнализаторы работать не будут.