Удаленное включение компьютера ардуино
Подскажите, как включить ПК с помощью Arduino, аналогично нажатию на кнопку Power системного блока. То есть моя Arduino Uno, запитанная по USB от этого же системника, должна, как я подозреваю, подать на материнку сигнал на один из контактов материнки "power on". Интересуют как раз подробности про материнку - как на ней реализован механизм срабатывания замыкания этих двух контактов PowerOn.
А вообще хочу к Ардуине подключить клавиатуру и дисплей, чтобы киндер, перед тем, как поиграть на ПК, должен был бы для включения компа пройти экспресс-тест из нескольких заданий на таблицу умножения на время, ибо хромает у него математика. ps Материнка Gigabyte Z68AP-D3.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
>можно розетку размыкать
Тогда, наверное, уже проще релюхой само нажатие кнопки power имитировать.
Или прозвонить ее, какие там вольтажи и какой ток идет через кнопку при нажатии. Возможно там, опять-таки, банальные 5v подтянутые к питанию, которые кнопкой "роняются" на землю. И тогда можно вообще тупо в цифровой пин завести (если ток, при нажатой кнопке идет 20-40ma), либо через транс какой-нить.
Второй вариант конечно грамотней и красивше, а первый "дубовый и громоздкий", зато безопасней при малых знаниях.
Ну и нужно, естественно, перед все-ми этими играми
а. Сделать бекап всех ценных данных.
б. посмотреть сколько будет стоит "купить новую материнку" и решить "а оно нужно?".
Так как вероятность "что-то спалить" - всегда имеется. Даже у "супер-гуру" :( А уж тем более у новичка. Так что если комп. это "рабочий инструмент", то подумайте 10-ть раз. Возможно купите какой-нить старый "гробик" (многие их вообще бесплатно отдают), и, вначале на нем потренируйтесь.
P.S. Ну и, по моему опыту, никакие ухищрения родителей в ограничении доступа к компу - никогда не сработают. Эффект будет в точности "наоборот". Разве что ваша совесть будет "более спокойна". И не стоит обольщатся что "у него знаний не хватит". Часто нужны не знания, а "нестандартность мышления". И хорошо если ее проявления закончатся без существенных потерь.
Так что лучше ищите способ как "математику интерестной сделать", чем "ограничивать доступ к прянику" :)
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
дернуть с помощью internet shield.
ethernet shield'а нет у меня.
А можно розетку размыкать.
До таких жестких методов с 220В пока не дошел. Всё-же хочу попытаться на материнку на джампер сигнал подать. Наверняка ведь там на одном контакте power-sw что-то типа подтяжки к +5в, на другом контакте GND, и при нажатии кнопки питания системника проскакивает сигнал LOW на ноге с +5В.
UPD. пока писал, ответ leshak'а подоспел. Насчет "спалить материнку", у меня их просто завались :). А по поводу запретов и пряников - это больше пряник, я считаю, пусть покопается, как обойти, и т.п.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
>Насчет "спалить материнку", у меня их просто завались :)
Ну сюда же относится "блок питания", "винчестер". и т.п. если что-то коротнуть, то можно поймать что угодно, от выбрыка питания.
Если "не боитесь этого" (хотя кто боится - в электронику не лезет ;), то я бы, на вашем месте начал с
Замера напряжения на контактах кнопки и замера какой ток идет через нее при нажатии.
Вообщем вначале детально выяснить "что имитировать нужно". Ну или "погуглить". Вот например http://www.blake-foster.com/project.php?p=44, тут Eternet-шилдом принимается команда "включить", а само включение делается именно имитацией нажатия Power-кнопки.
>А по поводу запретов и пряников - это больше пряник, я считаю, пусть покопается, как обойти
Ну, как воспитывать своего ребенка - вам виднее. Тут вы априори правы.
Главное что-бы этот "обойти" оказалось в рамках того что вы себе представляете. А не "два провода в розетку и тыкнуть ими в плату", а потом сказать "папа твоя штука спалила комп, чини". Или приглашение домой (без вашего ведома), авторитетного ломастера на пару лет старше. Стащить где-то "собственный ноут" и т.п. страшилок много можно насочинять, все равно угадать не возможно. Что удумает ребенок - трудно сказать. И это скорее "ассоциативный путь решения проблемы", а не привычный нам "логическо-рациональный" (мы надеемся что он тоже пойдет им. разобраться, обучится и .п.) умноженный на отсуствие навыков прогнозировать результат.
Но я-бы искал "что-то другое". Какую-то инетересную, для него, задачу. Где знание таблицы умножение потребуется "естественным путем", а не возведением "искуственной преграды".
P.S. Черт. Аж самому интерестно стало. Что бы я на его месте делал. Но одно точно знаю - таблицу я бы не учил :) Если придумает како-то "обход", раскажете? ;)
У меня стоит 2 домашних сервера, собранных из всякого древнего хлама, но тем не менее довольно важных для меня, и серверы должны быть включены постоянно. Но у меня довольно нестабильное электричество, которое бывает отключают. К серверам подключен бесперебойник, что спасает от кратковременного отключения, но если свет отключают больше чем на 5-10 минут, то бесперебойник разряжается, и выключает компьютеры. После чего несмотря на то, что в BIOS включен параметр, включать компьютер всегда, включаются они далеко не всегда. Функции Wake on Lan в этих компах нет. В общем, задолбался я постоянно бегать включать эти мои недосерверы, стоят они в довольно труднодоступном месте и к кнопкам включения подобраться проблематично, короче вспомнил что у меня уже довольно давно валяется плата ардуино, а значит можно процедуру включения автоматизировать, и кроме того, захотелось чего-то, что бы можно было удаленно включать, выключать и мониторить состояние компьютеров. Сегодня покажу как я собирал устройство для автоматического включения компьютеров, с возможностью удаленного управления через сеть, а также что у меня из этого получилось. Вот уж действительно – лень – двигатель прогресса =)
Вот как я вижу работу будущего устройства:
Подключаем Arduino к компьютерам, за место штатной кнопки включения, собственно, чтобы включать и выключать компьютеры. К MOLEX выходам для того, чтобы понимать включен ли компьютер (если на разъеме есть напряжение – значит компьютер включен, если нет – выключен). У нас должна быть возможность управления компьютерами даже при выключенной или сгоревшей ардуинке, поэтому провода от разъемов включения на материнке вешаем на реле, и параллельно на 2 кнопки, для 1го и второго компьютера соответственно. Третья же кнопка будет управлять автоматическим включением компьютеров. Например, если не нужно будет автоматически включать компьютеры в принципе, или же только один из них, на время обслуживания, то должна быть возможность — это настроить. Красными светодиодами будем показывать состояние компьютеров – горит – включен, нет – выключен. Третьим красным показываем состояние автовключения в целом в система. Синими – для каждого из компьютеров.
При нажатии на третью кнопку будем выключать автовключение для обоих компьютеров. При нажатии на нее более трех секунд – выбираем для какого из компьютеров выключаем или включаем автовключение.
Так же у меня рядом с компами висит роутер MikroTik, чем можно воспользоваться для удаленного управления ардуинкой, т.к. он не только может подключаться к Serial Console через USB, но также умеет эту консоль пробрасывать в сеть, что позволяет к консоли подключиться любым Telnet клиентом с любого устройства. У меня, китайская плата Arduino Nano с чипом ATmega168, с ней микротик заработал вообще без каких-либо проблем, про остальные ничего не могу сказать, не проверял. Ну что ж, приступим к реализации задуманного.
Для самоделки понадобятся следующие компоненты:
Arduino, в моём случае Nano.
Модуль реле, на два реле.
5 резисторов на 330 Ом.
3 резистора на 10 кОм.
2 резистора на 100кОм.
3 красных светодиода.
2 синих светодиода.
3 кнопки. Кстати, я нашел кнопки, которые совмещены со светодиодами.
Макетная палата для моделирования (breadboard).
Макетная печатная плата, для сборки девайса.
Коннекторы (MOLEX и не знаю, как называются вторые, в общем для подключения к материнки с двумя отверстиями).
Распределительная коробка для корпуса
Провода, инструменты, припой и прочие подобные прелести.
Вот так выглядит схема подключения:
Как видим, со входов компьютера на 5В я поставил делители напряжения из двух резисторов, они в принципе не обязательные, т.к. ардуино прекрасно работает с напряжением 5В, но для верности – лишними не будут. С таким делителем можно подключать нагрузку в 50 Вольт, но всё же лучше не больше 30 Вольт. Так что, если перепутаете 5 вольт и 12 Вольт на MOLEX разъеме – ни чего страшного не произойдет.
Вот как это выглядит на макетной плате:
При работе с терминалом было реализовано простое меню, например при вводе help или ? – выведется справка, при вводе status – текущее состояние системы, off1 – выключить первый компьютер, on1 – включить первый компьютер и так далее.
Проверяем работу – наличие напряжение определяется, реле щелкают, светодиоды горят, режимы выбираются.
Через терминал управление так же работает.
Можно собирать наш макет. Начнем с того, что прикрепим светодиоды и кнопки к крышке распределительной коробки. Кнопки закручиваются гайкой, светодиоды я залил термоклеем.
Далее собираем всё согласно схеме на макетной печатной плате. Если вы вдруг перепутаете какие-то пины на ардуине – ни чего страшного, их можно будет поменять в скетче. Главное не перепутать digital и analog пины. Если вы обратили внимание, плата у меня на половину загажена/залужена – это связано с тем, что я всё собрал, но у меня ничего не заработало. Точнее определял напряжение только один пин, второй на прочь отказывался работать. Я долго думал на то, где я мог ошибиться, всё выпаивал и впаивал по 10 раз, пока не додумался заменить ардуинку. Да, я совершил ошибку и впаивал не ту плату, на которой тестировал, а другую, предварительно не проверив. Не делайте так =).
Припаиваем провода от крышки к плате.
Делаем отверстия в корпусе для ввода проводов. Прилепляем провод, который пойдет к компьютеру, на горячий клей, что бы не болтался. Кстати, я для этих целей использовал обычную витую пару.
Припаиваем оставшиеся провода, заливаем дополнительно все места, где провода могут болтаться и оторваться теми же горячими соплями. И прикручиваем крышку.
Осталось только прикрепить разъемы на другом конце витой пары. Позже выковырял лишние штырьки из MOLEX разъемов, чтобы не коротнули об корпус компьютеров.
Вот и всё. Подключаем и проверяем работу.
После подключения столкнулся одной неприятной особенностью – микротик вырубает напряжение на порте, если на нем нет активности, то есть в нашем случае, если не открыта консоль на USB порт. Поразмыслив, создал подключение pppoe через порт usb, который постоянно пытается подключиться тем самым, не давая устройству выключиться. Решение топорное, но тем не менее рабочее. Правда из-за этого, кажется, что терминал тупит, т.к. становится занят командами от микротика. Пользоваться, конечно, не так комфортно, как во время теста, но всё же возможно. Дискомфорт заключается в том, что команды обрабатываются не всегда. Иногда нужно быстро их вводить по несколько раз. В будущем, если появится желание, сделаю какой-нибудь скрипт, который будет периодически открывать подключение к устройству, без отправки команд, чтобы не занимать терминал. Но пока, лично для меня, и так сойдет.
Вот как-то так. Понимаю, что штука у меня получилась довольно специфическая, но тем не менее возможно кого-то эта самоделка натолкнет на какие-то идеи по использованию Arduino. Так же прошу строго не судить, это первое что я сделал на ардуинке, после моргания встроенным светодиодом.
Купить компоненты и инструменты можно по ссылкам (часть показанного покупалось в местных магазинах, на нашел аналоги на AliExpress):
У меня стоит 2 домашних сервера, собранных из всякого древнего хлама, но тем не менее довольно важных для меня, и серверы должны быть включены постоянно. Но у меня довольно нестабильное электричество, которое бывает отключают. К серверам подключен бесперебойник, что спасает от кратковременного отключения, но если свет отключают больше чем на 5-10 минут, то бесперебойник разряжается, и выключает компьютеры. После чего несмотря на то, что в BIOS включен параметр, включать компьютер всегда, включаются они далеко не всегда. Функции Wake on Lan в этих компах нет. В общем, задолбался я постоянно бегать включать эти мои недосерверы, стоят они в довольно труднодоступном месте и к кнопкам включения подобраться проблематично, короче вспомнил что у меня уже довольно давно валяется плата ардуино, а значит можно процедуру включения автоматизировать, и кроме того, захотелось чего-то, что бы можно было удаленно включать, выключать и мониторить состояние компьютеров. Сегодня покажу как я собирал устройство для автоматического включения компьютеров, с возможностью удаленного управления через сеть, а также что у меня из этого получилось. Вот уж действительно – лень – двигатель прогресса =)
Вот как я вижу работу будущего устройства:
Подключаем Arduino к компьютерам, за место штатной кнопки включения, собственно, чтобы включать и выключать компьютеры. К MOLEX выходам для того, чтобы понимать включен ли компьютер (если на разъеме есть напряжение – значит компьютер включен, если нет – выключен). У нас должна быть возможность управления компьютерами даже при выключенной или сгоревшей ардуинке, поэтому провода от разъемов включения на материнке вешаем на реле, и параллельно на 2 кнопки, для 1го и второго компьютера соответственно. Третья же кнопка будет управлять автоматическим включением компьютеров. Например, если не нужно будет автоматически включать компьютеры в принципе, или же только один из них, на время обслуживания, то должна быть возможность — это настроить. Красными светодиодами будем показывать состояние компьютеров – горит – включен, нет – выключен. Третьим красным показываем состояние автовключения в целом в система. Синими – для каждого из компьютеров.
При нажатии на третью кнопку будем выключать автовключение для обоих компьютеров. При нажатии на нее более трех секунд – выбираем для какого из компьютеров выключаем или включаем автовключение.
Так же у меня рядом с компами висит роутер MikroTik, чем можно воспользоваться для удаленного управления ардуинкой, т.к. он не только может подключаться к Serial Console через USB, но также умеет эту консоль пробрасывать в сеть, что позволяет к консоли подключиться любым Telnet клиентом с любого устройства. У меня, китайская плата Arduino Nano с чипом ATmega168, с ней микротик заработал вообще без каких-либо проблем, про остальные ничего не могу сказать, не проверял. Ну что ж, приступим к реализации задуманного.
Для самоделки понадобятся следующие компоненты:
Arduino, в моём случае Nano.
Модуль реле, на два реле.
5 резисторов на 330 Ом.
3 резистора на 10 кОм.
2 резистора на 100кОм.
3 красных светодиода.
2 синих светодиода.
3 кнопки. Кстати, я нашел кнопки, которые совмещены со светодиодами.
Макетная палата для моделирования (breadboard).
Макетная печатная плата, для сборки девайса.
Коннекторы (MOLEX и не знаю, как называются вторые, в общем для подключения к материнки с двумя отверстиями).
Распределительная коробка для корпуса
Провода, инструменты, припой и прочие подобные прелести.
Вот так выглядит схема подключения:
Как видим, со входов компьютера на 5В я поставил делители напряжения из двух резисторов, они в принципе не обязательные, т.к. ардуино прекрасно работает с напряжением 5В, но для верности – лишними не будут. С таким делителем можно подключать нагрузку в 50 Вольт, но всё же лучше не больше 30 Вольт. Так что, если перепутаете 5 вольт и 12 Вольт на MOLEX разъеме – ни чего страшного не произойдет.
Вот как это выглядит на макетной плате:
При работе с терминалом было реализовано простое меню, например при вводе help или ? – выведется справка, при вводе status – текущее состояние системы, off1 – выключить первый компьютер, on1 – включить первый компьютер и так далее.
Проверяем работу – наличие напряжение определяется, реле щелкают, светодиоды горят, режимы выбираются.
Через терминал управление так же работает.
Можно собирать наш макет. Начнем с того, что прикрепим светодиоды и кнопки к крышке распределительной коробки. Кнопки закручиваются гайкой, светодиоды я залил термоклеем.
Далее собираем всё согласно схеме на макетной печатной плате. Если вы вдруг перепутаете какие-то пины на ардуине – ни чего страшного, их можно будет поменять в скетче. Главное не перепутать digital и analog пины. Если вы обратили внимание, плата у меня на половину загажена/залужена – это связано с тем, что я всё собрал, но у меня ничего не заработало. Точнее определял напряжение только один пин, второй на прочь отказывался работать. Я долго думал на то, где я мог ошибиться, всё выпаивал и впаивал по 10 раз, пока не додумался заменить ардуинку. Да, я совершил ошибку и впаивал не ту плату, на которой тестировал, а другую, предварительно не проверив. Не делайте так =).
Припаиваем провода от крышки к плате.
Делаем отверстия в корпусе для ввода проводов. Прилепляем провод, который пойдет к компьютеру, на горячий клей, что бы не болтался. Кстати, я для этих целей использовал обычную витую пару.
Припаиваем оставшиеся провода, заливаем дополнительно все места, где провода могут болтаться и оторваться теми же горячими соплями. И прикручиваем крышку.
Осталось только прикрепить разъемы на другом конце витой пары. Позже выковырял лишние штырьки из MOLEX разъемов, чтобы не коротнули об корпус компьютеров.
Вот и всё. Подключаем и проверяем работу.
После подключения столкнулся одной неприятной особенностью – микротик вырубает напряжение на порте, если на нем нет активности, то есть в нашем случае, если не открыта консоль на USB порт. Поразмыслив, создал подключение pppoe через порт usb, который постоянно пытается подключиться тем самым, не давая устройству выключиться. Решение топорное, но тем не менее рабочее. Правда из-за этого, кажется, что терминал тупит, т.к. становится занят командами от микротика. Пользоваться, конечно, не так комфортно, как во время теста, но всё же возможно. Дискомфорт заключается в том, что команды обрабатываются не всегда. Иногда нужно быстро их вводить по несколько раз. В будущем, если появится желание, сделаю какой-нибудь скрипт, который будет периодически открывать подключение к устройству, без отправки команд, чтобы не занимать терминал. Но пока, лично для меня, и так сойдет.
Вот как-то так. Понимаю, что штука у меня получилась довольно специфическая, но тем не менее возможно кого-то эта самоделка натолкнет на какие-то идеи по использованию Arduino. Так же прошу строго не судить, это первое что я сделал на ардуинке, после моргания встроенным светодиодом.
Купить компоненты и инструменты можно по ссылкам (часть показанного покупалось в местных магазинах, на нашел аналоги на AliExpress):
В свое время насмотревшись видео о том, как люди мастерят различные устройства вроде хексопадов, испытывал уважения к тем людям, кто это мастерил, с желанием научиться делать что-то подобное. Для себя лично по какой-то неведомой мне причине мог ощущать большую разницу в эмоциях от запрограммированного контроллера с банальным миганием светодиода в сравнении со сложным алгоритмом в софтовом продукте, причем выигрывал первый. Решив, что единственный доступный для меня способ достичь того состояния, когда из под моих рук сможет выйдет что-то подобное хексопаду — это начать программирование элементарных вещей. Выбор пал на Arduino в силу доступности самой платформы и избытка информации по ней.
С чего начать?
Наверное, самый частый вопрос, когда начинаешь новое дело — это «с чего начать?» Делать что-то ненужное не хотелось, а что-то очень сложное могло привести к тому, что не разобравшись в деталях мог охладеть к проекту, не осилив его. Тут я вспомнил про одну особенность своего PC, которая доставляла мне достаточно неудобств. В силу определенных обстоятельств мне частенько приходится подключаться к домашнему компьютеру. Естественно, для того чтобы подключиться по RDP, компьютер должен быть включен. Исходя из этого было два варианта: 1) оставлять PC включенным (что по меньшей мере неудобно); 2) пробуждать его перед подключением.
Очевидно, что второе решение более лаконичное как экономически так и практически. Любые попытки заставить стабильно работать wake-on-lan заканчивались тем, что компьютер становился недоступным, так как не выходил из сна. А если быть точнее, он мог был быть пробужден в пределах какого-то ограниченного времени (около 15-30 минут) после отправления в сон. За рамками этого временного интервала разбудить не удавалось. Пробовались разные платы и разные пляски с бубном вокруг биоса. Результат был всегда одинаков. Я допускаю мысль, что все же это возможно при данных условиях на данном железе, но временные затраты на решение задачи были слишком большими. В итоге при очередной «командировке» приходилось оставлять включенный компьютер без присмотра на несколько дней. Я думаю, большинству понятно, что нельзя сказать, что задача удаленного доступа была решена. Учитывая, что все, что требуется при физическом контакте для пробуждения — это короткое нажатие на кнопку (простое замыкание контактов), я решил, что это достаточно простой проект, да и весьма полезный для меня.
Сказано — сделано
Первое, с чего я начал, было определение того, как все будет работать и минимально необходимый набор для решения данной задачи. По функциональной части решение было следующим. Arduino работает как веб-сервер и ждет сигнала. При получении сигнала о включении/выключении проверяет состояние PC (не является ли он уже работающим/выключенным) и, убедившись, что условия выполняются ненадолго, замыкает контакты кнопки включения. Все довольно просто.
Набор так же достаточно простой: Arduino nano, ethernet MINI ENC28J60, провода для подключения контактов и 1 транзистор (изначально думал обойдусь без транзистора, просто подав такое же напряжение как на первом контакте на второй контакт, но эмпирически установил, что плата ждет не появления эквивалентного напряжения на втором контакте, а просто замыкание на землю первого).
Питание берется с USB, а проверка на включение снимается со свободного пина для кулера на материнской плате.
Выбор на ethernet MINI ENC28J60 пал в силу небольших размеров и того, что умельцы уже написали библиотеку для работы Arduino с данной платой.
По подключения все так же не сложно. Рисовать схему смысла не вижу. Так как по сути подключаются между собой 3 платы (Arduino nano, ENC28J60, материнская плата) и 1 транзистор. Я решил, что для тех, кто не силен в схемотехнике, нагляднее будет представить просто таблицу на пересечении колонок, в которой будет подключение.
Arduino nano | ENC28J60 | материнская плата | транзистор |
+5 | +5USB | ||
D13 | SCR | ||
3v3 | VIN | ||
GND | GND | ||
D2 | INT | ||
D12 | SO | ||
D11 | ST | ||
D10 | CS | ||
D8 | CPU_fan | ||
D6 | база | ||
GND | эмиттер | ||
Power SW | коллектор | ||
GND | GND |
Для удобства все провода были стянуты термоусадками, а плата была ENC28J60 подпилена, чтобы её можно было закрепить на задней панели. Донором для крепежа послужила какая-то древняя сетевая плата, дрова к которой уже нигде не находятся.
При работе после получения запроса на включение/выключение программа смотрит, есть ли напряжение на «CPU_fan», исходя из этого решает, нужно ли подавать питание на транзистор. Если нужно — подает на базу транзистора ток и через время отключает обратно. Ток на базе транзистора позволяет ему открыться и замкнуть контакты «Power SW» и «GND».
Цель достигнута. Более того, получил возможность вывести PC после BSOD'а, так как можем послать сигнал, который будет эмулировать 4 секундное нажатие на кнопку питания.
Заключение
Это далеко не самое сложное из того, что делалось. Были и свои, более сложные проекты, и написание кода «в помощь» другим людям, но, во-первых, для первой статьи хотелось выбрать не сложный «проект» (слишком громкое слово для вышеописанного), отвечающий «песочнице», во-вторых, первый проект — он как первая любовь. Западает в душу. Тем самым хотелось бы попытаться замотивировать, показать, что первый шаг может быть проще, чем кажется. И если хотя бы один человек после прочтения попробует, буду считать, что статья удалась. Самым «маленьким» советую начать с видео от Jeremy Blum.
P.S.: Ждем с коллегой посылки для сборки квадрокоптера и уже подумываем собрать хексопад. А стоило-то лишь попробовать…
В детстве, смотря многие американские фильмы, был в восторге от того, как актеры выключали свет в помещении «хлопнув в ладоши», всегда хотелось такую же штуку у себя дома. В последние годы ПК стал неотъемлемой частью моей жизни: приходя домой и разувшись, первым делом идешь включать своего «железного коня» и ждать его загрузки. Конечно в последние годы с появлением SSD это ожидание свелось к минимуму, но тем не менее вместе с самим подходом к компьютеру все же какое-то время теряется. Да и собственно зачем вообще идти в комнату, бить с ноги по кнопке, если можно сделать какой-то дистанционный способ включения «моей прелести».
Собственно так со временем и слились две «мечты»: включать ПК по хлопку. На данный момент я учусь в университете и как раз пришло время делать курсовой по схемотехнике, причем преподаватель заявил о том, что можно сделать его в железе, а не на бумаге, что на мой взгляд интереснее. Таким образом подвернулся шанс «убить сразу двух зайцев» — реализовать старую идею и сдать курсовой проект. Первоначальной идеей было сделать некое устройство, которое можно будет разместить на корпусе, запитать его от блока питания, подключить через реле к кнопке и по хлопку замыкать цепь. Как итог решили немного отойти от этой идеи немного расширив ее: система теперь будет состоять из двух блоков, соединенных посредством Bluetooth. Один блок будет улавливать хлопок и посылать специальный сигнал на второй блок, второй же блок будет принимать этот сигнал и замыкать реле.
С чего начать
Первым делом надо было решить на каком железе реализовать мою затею. Выбор пал на платформу Arduino. Почему именно Arduino? В этой статье я не буду перечислять технические характеристики данной платформы как минимум потому что речь идет не об этом. Собственно ответ на этот вопрос кроется в трёх причинах:
- Дешевизна — в Китае микроконтроллеры с этой платформой можно найти за 5$, а то и меньше
- Простота использования — в интернете множество гайдов по данной платформе и разобраться в них не составляет труда
- Огромное количество всевозможных датчиков
- 2x Arduino Uno R3 — по одной на каждый блок
- 2x Bluetooth HC-05 — Опять же по одной на каждый блок, и главное именно HC-05, потому что только они поддерживают режимы Master и Slave
- Микрофон — простой электретный микрофон, стоит он вообще копейки
- Реле
- 2x светодиода — красный и зеленый
- Всякие проводки, резисторы и т.п.
- И конечно же паяльник
Начинаем
Рассмотрим наш микроконтроллер
Как видим он имеет аналоговые пины, подписанные с буквой А (например А0), входы для внешнего питания, выходы для питания +5В и +3.3В, цифровые пины, выходы на землю и др.
Подключить ее к компьютеру можно по USB, благо в комплекте имеется кабель. А даже если у вас и не будет, то купить его можно в любом магазине электроники. Для работы непосредственно c Arduino имеется их собственная очень удобная IDE, которую можно взять с официального сайта.
Для того, чтобы далее работать с Ардуино, надо все же хоть чуть-чуть про нее рассказать
Микроконтроллеры для Arduino отличаются наличием предварительно прошитого в них загрузчика (bootloader). С помощью этого загрузчика пользователь загружает свою программу в микроконтроллер без использования традиционных отдельных аппаратных программаторов. Загрузчик соединяется с компьютером через интерфейс USB (если он есть на плате) или с помощью отдельного переходника UART-USB. Поддержка загрузчика встроена в Arduino IDE и выполняется в один щелчок мыши.
На случай затирания загрузчика или покупки микроконтроллера без загрузчика разработчики предоставляют возможность прошить загрузчик в микроконтроллер самостоятельно. Для этого в Arduino IDE встроена поддержка нескольких популярных дешевых программаторов, а большинство плат Arduino имеет штыревой разъем для внутрисхемного программирования (ICSP для AVR, JTAG для ARM).
Язык программирования Ардуино является стандартным C++ (используется компилятор AVR-GCC) с некоторыми особенностями.
Программы, написанные программистом Ардуино называются наброски (или иногда скетчи — варваризм от англ. sketch) и сохраняются в файлах с расширением ino. Эти файлы перед компиляцией обрабатываются препроцессором Ардуино. Также существует возможность создавать и подключать к проекту стандартные файлы C++.
Итак, скачав Arduino IDE с официального сайта и установив, открываем его и видим это:
Наш скетч разделен как бы на 2 блока — setup() и loop(). В первый блок пишется то, что должно быть изначально проинициализировано при включении контроллера в сеть. Во второй — собственно сам исполняемый код, который будет выполняться постоянно. Собственно все это следует и из названий данных блоков.
Первый блок
Первым делом надо было собрать и подключить микрофон. По сути электретный микрофон, который мы купили, является своего рода конденсатором с двумя ножками:
Ножка с характерными тремя полосочками, как на изображении выше, — это «минус» микрофона, соответственно вторая ножка — «плюс», главное не перепутать, а иначе микрофон не будет работать. Собственно хорошенько погуглив, выяснилось, что во-первых микрофон так просто не подключишь, а во-вторых сигнал будет очень слабым, то есть скорее всего понадобится операционный усилитель. На сайте продавца, где покупался микрофон, была вот такая схема:
Без усилителей, просто RC-цепь, подумал была не была, соберу и посмотрю, работает или нет. Благо дома валялись нужные резисторы и конденсатор. Также для надежности соединения, чтобы это не болталось на проводах в воздухе, возьмем текстолит, который также продается в любом магазине радиодеталей. Получилось что-то вроде этого:
Может быть не очень аккуратно, но главное чтобы работало, остается проверить. У нашего микрофона теперь 3 ноги: +5В, GND(земля) и аналоговый выход. Подключим эти ноги соответственно на 5В, GND и вход A0 контроллера. Иии после множества проб и ошибок все получилось! Микрофон действительно работает. АЦП Arduino выдает значения от 0 до 1024. Осталось подключить два светодиода для хоть какого-то визуального взаимодействия с системой. Подключать светодиод к питанию напрямую светодиод нельзя, иначе спалим его. Чтобы этого избежать вешаем на "+" светодиода резистор 220 ОМ.Обычно короткая ножка это минус, а длинная — плюс. Итак "-" светодиода подсоединяем к выходу GND на плате, а "+" на цифровой выход. Так как у нас 2 светодиода, то землю для них сделаем общую, красный подключим к 13 пину, а зеленый к 12ому. При регистрации хоть какого-то звука будет загораться красный светодиод. Если же сначала регистрируем звук, затем в течение некоторого времени тишину, а потом снова звук — то зажигаем зеленый светодиод. На деле все просто. И на практике оказалось тоже.Собственно скетч получился таким:
Итак отлавливать нужный сигнал мы научились, осталось при наличии хлопка как-то сообщить об этом второму блоку. Для этого нам нужны Bluetooth-модули. Я взял Bluetooth hc-05 shield, который выглядит следующим образом:
Просто присоединяем его к нашей Uno пин к пину, таким образом подключаем сам модуль и дублируем выходы нашей платы. Должно получится примерно так(Shieldы могут быть в несколько разных вариациях, суть та же):
Так же на Bluetooth Shield можете увидеть рычажок, имеющий два положения: H и L. H-режим Ведущего(Master), L-режим Ведомого(Slave). В данном случае выставим рычажок на Master. Итак, подключив модуль блютуз, можем сверху подсоединить к тем же пинам наши светодиоды и микрофон. Вообщем с этим блоком закончили, переходим к следующему.
Второй блок
Во втором блоке нам понадобится электромагнитное реле, двойная розетка внешней установки, провод для подключения к электрической сети 220 В и еще один Bluetooth Shield HC-05.
Shield подключаем к плате точно таким же образом, единственное отличие будет в том, что рычажок надо выставить на L — режим SLave.
Одна розетка будет постоянно под напряжением для питания блока, вторая будет замкнута на реле, таким образом можно будет, то подавать на нее напряжение электрической сети, то снимать.
Итак подключим реле. Принцип действия его прост и заключается в следующем: 2 из ножек реле заведены на катушку индуктивности, подавая на нее напряжение создается электромагнитное поле, которое притягивает так называемый якорь внутри реле, тем самым замыкая цепь. Убрав напряжение с катушки якорь возвращается в свое первоначальное состояние, размыкая цепь. Таким образом реле — своего рода ключ.
Итак нам нужно реле, которое при подаче на катушку 5В, будет замыкать нам цепь. При этом нужна выбрать такое реле, которое сможет пропускать токи, необходимые для включения ПК. Учитывая, что большинство современных ПК потребляют от 450 Вт до 1000 Вт, нам с лихвой хватит реле пропускающее через себя ток силой в 6 Ампер. В ближайшем магазине радиоэлектроники был приобретен этот китаец tianbo hjr-3ff-s-z:
Как видим у него имеется 5 ног, 2 из которых заведены на катушку, осталось только узнать какие. Для этого гуглим и находим вот такую схему:
Подключим 2ую ногу на GND платы, а 5ую на 13 цифровой выход. Саму розетку подключим к 1ой и 3ей ноге электромагнитного реле, чтобы первоначальное состояние розетки было выключенным. Блок готов, осталось только загрузить скетч. Код для данного блока:
Так же модернизируем код для первого блока, добавив сопряжение блютузов между собой:
Результат
Итак блютузы подключены, микрофон работает, светодиоды работают, хлопок идентифицируется, сигнал на второй блок передается, осталось только все это аккуратно собрать в корпуса и настроить BIOS на включение по подаче питания.
Вот что получилось:
1-ый блок (питание выведено сбоку корпуса, на верху видны зеленый и красный светодиоды и микрофон).
2-ой блок (питание также выведено сбоку корпуса, сверху 2 розетки, одна постоянно запитана, чтобы питать микроконтроллер через адаптер для телефона, вторая собственно для подключения ПК).
Читайте также: