Электроника для начинающих (2-е издание)

Платт Чарльз

Глава 5

ЭКСПЕРИМЕНТЫ ПРОДОЛЖАЮТСЯ

 

 

С этого момента мы можем продвигаться в различных направлениях. Вот некоторые возможности.

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

• Электромагнетизм — тема, о которой я пока не упоминал, однако у нее есть интереснейшие способы применения.

• Радиочастотные устройства — все, что получает или передает радиоволны, начиная с простого радиоприемника.

• Программируемые микроконтроллеры — это крошечные компьютеры на одной микросхеме. Вы пишете небольшую программу на стационарном компьютере и загружаете ее в микросхему. Эта программа передает микросхеме команды на выполнение определенной последовательности процедур, например, получение входного сигнала от датчика, ожидание в течение определенного периода времени и отправка выходного сигнала на электродвигатель. В число популярных микроконтроллеров входят Arduino, PICAXE, BASIC Stamp и многие другие.

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

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

 

Инструменты, оборудование, компоненты и расходные материалы

Для заключительной главы книги нам не понадобятся никакие дополнительные инструменты или оборудование. Общий перечень всех компонентов представлен в табл. 6.8. Смотрите раздел «Расходные материалы» главы 6, где вы найдете список дополнительных расходных материалов (преимущественно это провод для катушек в экспериментах 25, 26, 28, 29 и 31).

 

Оборудование вашего рабочего пространства

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

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

Главное, чтобы инструменты и детали были легкодоступными, независимо от того, что это: крошечные транзисторы или большие катушки с проводом. Также я не хочу копаться на полках, поскольку для этого нужно каждый раз вставать и подходить к ним.

Это привело меня к двум выводам:

• Нужно разместить все необходимое вокруг рабочего стола.

• Необходимо задействовать пространство под рабочим столом.

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

Из всех рабочих столов, которыми я пользовался, один мне нравился больше всего — старый стальной офисный стол-монстр, родом из 50-х годов. Такие столы трудно сдвинуть (потому что они очень тяжелые), они неказисты на вид, зато их можно недорого купить у продавцов подержанной офисной мебели. Эта мебель очень внушительных размеров, выдерживает неправильное обращение и служит долго. Ящики у них глубокие и обычно выдвигаются и задвигаются плавно, как ящики у хорошей тумбы для документов. Но замечательнее всего то, что стальная столешница столь массивна, что прекрасно подходит в качестве заземления, если вы собираетесь работать с компонентами, чувствительными к статическому электричеству. Если вы используете антистатический браслет, то можно просто прикрепить его шурупом для листового металла в одном из углов столешницы.

Что вы будете класть в глубокие ящики стола или тумб? Некоторые бумаги могут оказаться полезными, например, такие документы:

• Технические паспорта

• Каталоги компонентов

• Нарисованные вами наброски и планы

Оставшееся пространство ящиков можно заполнить пластиковыми контейнерами для хранения. В них можно поместить инструменты, которые вы используете редко (термофен или мощный паяльник), а также крупные компоненты (динамики, сетевые адаптеры, корпуса для устройств и монтажные платы). Следует подыскать контейнеры длиной около 28 см, шириной 20 см и глубиной 13 см, с прямыми стенками. Контейнеры, которые вы можете купить в супермаркетах, будут дешевле, но они часто имеют сужающиеся стенки, что снижает вместительность.

Контейнеры, которые мне нравятся больше всего (бренд Akro-Grids, производитель Àkro-Mills), показаны на рис. 5.1 и 5.2. Они очень прочные и иногда снабжены прозрачными защелкивающимися крышками. На этих фотографиях может показаться, что контейнеры сужаются книзу, но это не так. Полный каталог продукции Akro-Mills доступен онлайн, там же вы сможете отыскать поставщиков. Вы обнаружите также, что эта компания продает разнообразные коробочки для деталей, но я не люблю открытые коробки, потому что на их содержимом может оседать пыль и грязь.

Рис. 5.1. Контейнеры Akro-Grid содержат канавки, позволяющие разделять их на многочисленные ячейки для удобного хранения деталей. Высота этого контейнера такова, что в обычном ящике для документов можно поставить друг на друга три таких контейнера

Рис. 5.2. Крышки продаются отдельно, они позволяют защитить содержимое от попадания пыли. Этот контейнер чуть выше, и поэтому в ящике стола можно поставить в стопку лишь два таких контейнера

Компоненты среднего размера, такие как потенциометры, разъемы питания, кнопки управления и тумблеры, я люблю хранить в контейнерах размерами около 28 см в длину, 20 см в ширину и 5 см в глубину, разделенных на четыре или шесть секций. Их можно купить в торговой сети Michaels, однако я предпочитаю бренд Plano, поскольку эта продукция выглядит изготовленной более добротно. Контейнеры Plano, которые лучше всего подходят для радиодеталей средних размеров, отнесены к аксессуарам для рыболовов.

Среди плоских коробок без разделителей на секции модель Prolatch 23600-00 идеально вписывается в ящик стола, а ее защелки достаточно надежны для того, чтобы расположить несколько таких коробок боком, вдоль длинной стороны (рис. 5.3).

Среди продукции Plano есть также очень практичные ящики для инструментов, один из которых можно поставить на рабочий стол. Он должен иметь маленькие отсеки для легкого доступа к отверткам, кусачкам и другим основным инструментам. Поскольку для большинства проектов, связанных с электроникой, вам хватит пространства в один квадратный метр, то вы не сильно стесните себя, отведя часть поверхности стола под ящик для инструментов.

Рис. 5.3. Эта коробка Plano без секций очень удобна для хранения катушек с проводом или инструментов среднего размера. Три такие коробки, поставленные боком, прекрасно умещаются в ящике стола

Если у вас металлический стол с довольно неглубокими ящиками, то один из них можно отвести под каталоги. Не стоит преуменьшать достоинства печатных изданий просто потому, что можно все покупать онлайн. Например, каталог компании Mouser снабжен алфавитным указателем, который более информативен, чем функция поиска на сайте производителя; к тому же этот каталог разделен на удобные категории. Много раз я находил необходимые компоненты, о существовании которых даже не подозревал, просто бегло просмотрев указатель, что гораздо быстрее, чем листание PDF-страниц даже при высокоскоростном интернет-подключении. Даже сейчас компания Mouser по-прежнему великодушно рассылает свои каталоги, которые содержат более 2000 страниц. Компания McMaster-Carr также пришлет вам каталог, но только после того, как вы закажете его, и только раз в год. Наверное, это самый содержательный и замечательный каталог инструментов и деталей.

Рис. 5.4. Мини-контейнеры Darice идеально подходят для хранения мелких радиодеталей. Коробки можно ставить друг на друга, размещать на полках или складывать в большие ящики. Этикетку производителя легко удалить после прогревания термофеном

А теперь главный вопрос: как хранить всевозможные мелкие детали, такие как резисторы, конденсаторы и микросхемы? Я пробовал решить эту проблему различными способами. Самый очевидный — купить кейс с небольшими вынимаемыми ящичками, которые можно поставить перед собой на стол, чтобы достать компоненты. Но мне не нравится такая система по двум причинам. Во-первых, для очень маленьких компонентов вам придется разделить ящики на секции, а перегородки не вполне надежны. Во-вторых, вынимаемые ящики создают риск случайного падения компонентов на пол. Возможно, вы очень аккуратны и не позволите такому случиться, но я не таков. Однажды я опрокинул на пол весь кейс с ящичками.

Мое личное предпочтение — мини-контейнеры Darice, показанные на рис. 5.4. В розницу их можно приобрести в сети Michaels, или же купить дешевле и оптом онлайн, просто введите поисковый запрос:

darice mini storage box

Голубые коробки разделены на 5 секций и подходят по размеру и форме для резисторов. Желтые коробки имеют 10 отделений, которые идеальны для полупроводниковых приборов. Фиолетовые коробки совсем без перегородок, а у красных секции разного размера. Номер для заказа всех этих контейнеров одинаков: 2505-12.

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

После долгих поисков я нашел недорогие пластиковые контейнеры с крышкой, размерами около 20x32,5 см и глубиной 12,5 см. В каждом таком контейнере умещается девять коробок Darice. Подобные контейнеры можно поместить и хранить на полках.

 

Маркировка компонентов

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

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

Рис. 5.5. Чтобы убедиться в том, что резистор не будет помещен в неправильное отделение, нанесите на каждую наклейку цветовой код

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

 

Что разместить на рабочем столе

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

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

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

Вы можете сэкономить на осциллографе, купив устройство, которое подключается к USB-порту вашего компьютера и отображает сигнал на компьютерном мониторе. Я испробовал один такой прибор и не был полностью доволен результатами. Устройство работало, но недостаточно точно и надежно для низкочастотных сигналов. Возможно, мне не повезло, но я решил не испытывать продукцию других производителей.

На поверхности вашего стола или верстака, несомненно, появятся случайные царапины, следы от разрезания и капли расплавленного припоя. Я использую квадратный кусок фанеры толщиной около 1 см и стороной примерно 0,5 м, чтобы защитить основную рабочую область. Его край прижат миниатюрными тисками. Ранее я накрывал фанеру квадратом из проводящего пеноматериала, чтобы уменьшить риск статического разряда на чувствительные компоненты. Однако со временем я понял, что сочетание ковра, стула и обуви в моей мастерской не является источником статического электричества. Этот момент вам необходимо выяснить самостоятельно. Если вы иногда видите крошечные искорки, когда касаетесь металлического предмета, и ощущаете легкий электрический разряд, вам следует предусмотреть способ заземлить себя, а также, возможно, положить на рабочую поверхность антистатический материал (или лист металла).

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

Рис. 5.6. Рабочее место с металлическим офисным столом

Рис. 5.7. Стеллажи вокруг стола максимально эффективно организуют рабочее пространство

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

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

Пример организации рабочего стола со стальной столешницей показан на рис. 5.6. Планировка с более эффективным использованием пространства изображена на рис. 5.7.

 

Справочные материалы из онлайн-источников

Когда меня просят порекомендовать сайт, предлагающий основную информацию на начальном уровне, я советую ресурс Doctronics ().

Мне нравится их вариант рисования схем, а также обилие иллюстраций с компоновкой макетных плат, подобных тем, какие делаю я. Они также продают наборы компонентов, если вы готовы оплатить их и дождаться доставки из Великобритании.

Мой следующий любимый сайт также английский: это Electronics Club (). Он не такой исчерпывающий как Doctronics, но очень удобный и доступный для понимания.

Сайт ElectronicsTutorials () содержит больше теоретических сведений. Там вы найдете гораздо больше информации, чем в моих разделах по теории.

Своеобразная подборка тем, связанных с электроникой, представлена на сайте Дона Ланкастера (Don Lancaster) Guru’s Lair ().

Ланкастер написал книгу The TTL Cookbook более чем 30 лет назад, и она открыла мир электроники как минимум двум поколениям любителей и экспериментаторов. Он знает, о чем говорит, и не боится углубляться в такие достаточно сложные области, как написание собственных драйверов для принтера PostScript и создание портов последовательного ввода-вывода. Там вы найдете много интересных идей.

 

Книги

Да, книги вам также понадобятся. Некоторые из книг, к которым я постоянно обращаюсь, показаны на рис. 5.8.

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

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

Make: More Electronics — это продолжение данной книги, включающее все темы (например, операционные усилители), для которых не нашлось места здесь. Там рассматриваются некоторые более сложные схемы. Если вы прочтете эту книгу и ее продолжение, то вы будете знакомы с большинством аспектов электроники, доступных любителям с умеренным бюджетом.

Рис. 5.8. Выгоревший на солнце экземпляр классического руководства Дона Ланкастера по ТТЛ-микросхемам остается на вершине моей стопки справочников

Encyclopedia of Electronics Components — это проект, который я начал, прежде чем осознал, сколько требований он может предъявить. Цель этого трехтомника — стать идеальным источником оперативной справочной информации. В отличие от упомянутых справочных изданий книга, которую вы держите в руках, — это обучающее руководство, наполненное практическими заданиями, в которых я стараюсь не сильно вдаваться в детали.

Теперь позвольте мне представить наиболее важные книги, написанные другими авторами.

Книга Practical Electronics for Inventors Пола Шерца (Paul Scherz) и Саймона Монка (Simon Monk) (издательство McGraw-Hill, 4-е издание в 2016 году). Это внушительная, исчерпывающая книга, которая вполне оправдывает свою стоимость в 40 долларов. Несмотря на ее название, вам не придется что-либо изобретать, чтобы оценить ее полезность. Это мой основной справочник, охватывающий широкий ряд вопросов, начиная от основных свойств резисторов и конденсаторов и заканчивая элементами высшей математики.

Книга Getting Started with Arduino («Приступая к работе с Arduino») Массимо Банзи (Massimo Banzi) и Майкла Шилоу (Michael Shiloh) (издательство Make, 2014 год). Это самое простое вводное пособие, оно поможет вам познакомиться с языком программирования, используемом в среде Arduino (который похож на язык С, если вы что-либо знаете о нем).

Книга Making Things Talk, ее автор Том Иго (Тот Igoe) (издательство Make: Books, 2011 год). Это масштабное и всеохватывающее издание рассказывает о возможностях контроллера Arduino для взаимодействия с окружающей средой и даже для получения доступа к веб-сайтам.

Книга TTL Cookbook («ТТЛ-рецепты») Дона Ланкастера (Don Lancaster) (издательство Howard W. Sams & Со, 1974 год). Дата выхода 1974 год — это не опечатка. Возможно, вы встретите и более поздние издания, но что бы вы ни купили — это книги, которые являются переизданиями. Ланкастер написал свое руководство до того, как принципы работы микросхем серии 74хх были воспроизведены в КМОП- микросхемах с аналогичным расположением выводов (например, в серии 74НСхх), но это по-прежнему хороший справочник, поскольку принципы и маркировка микросхем не поменялись. Написан он очень точно и лаконично.

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

Книга CMOS Sourcebook («Основные КМОП- микросхемы») Ньютона К. Браги (Newton С. Braga) (издательство Sams Technical Publishing, 2001 год). Эта книга полностью посвящена КМОП-микросхемам серии 4000, а не серии 74НСхх, с которой мы в основном имели дело. Серия 4000 более ранняя и требует аккуратного обращения, поскольку она сильнее подвержена воздействию статического электричества, чем последующие поколения. Тем не менее, эти микросхемы по-прежнему широко доступны, а их главное преимущество — способность работы в широком диапазоне напряжений, как правило, от 5 до 15 В. Это означает, например, что вы можете создать 12-вольтовую схему на таймере 555 и соединить выход таймера напрямую с КМОП- микросхемой. Книга хорошо структурирована и содержит три раздела: основы КМОП-логики, функциональные диаграммы (показывающие расположение выводов всех основных микросхем) и простые схемы, демонстрирующие, как заставить микросхемы выполнять основные функции.

Encyclopedia of Electronic Circuits («Энциклопедия электронных схем») Рудольфа Ф. Графа (Rudolf F. Graf) (издательство Tab Books, 1985 год). Разносторонняя коллекция схем с минимальными пояснениями. Эта книга пригодится, если у вас есть идея и вы хотите узнать, каким образом кто-либо другой подошел к ее решению. Примеры часто предоставляют более ценную информацию, чем общие объяснения, а эта книга является большим сборником примеров. В этой серии было опубликовано много дополнительных томов, но начните с этого, и вы найдете в нем все необходимое.

Книга The Circuit Designer’s Companion («Компаньон проектировщика схем») Тима Уильямса (Tim Williams) (издательство Newnes, второе издание, 2005 год). Много полезной информации о создании устройств для практического применения, но стиль изложения сухой и довольно технический. Может оказаться полезной, если вы заинтересованы воплотить ваши электронные проекты в реальном мире.

Книга The Art of Electronics («Искусство электроники») Пола Хоровитца (Paul Horowitz) и Уинфилда Хилла (Winfield Hill) (издательство Cambridge University Press, 2-е издание, 1989 год). Тот факт, что эта книга переиздавалась 20 раз, говорит о следующем: 1) многие считают ее фундаментальным справочником; 2) должны быть широко доступны подержанные экземпляры, что является важным фактором, поскольку розничная стоимость книги составляет 100$. Она написана двумя академиками и имеет более технический подход, чем «Практическая электроника для изобретателей», но я нахожу ее полезной для поиска вспомогательной информации.

Книга Getting Started in Electronics («Первые шаги в электронике») Форреста М. Мимса-третьего (Forrest М. Mims III) (издательство Master Publishing, 4-е издание, 2007 год). Хотя первое издание вышло в 1983 году, эта книга по-прежнему увлекательна. Я думаю, что изложил здесь многие темы из нее, но вы можете извлечь дополнительную пользу, если почитаете объяснения и советы в совсем другом источнике. К тому же эта книга чуть дальше заглядывает в теорию электричества, написана на доступном для понимания языке и снабжена прекрасными иллюстрациями. Предупреждаю — это книга небольшого объема с разнородной подачей материала. Не стоит ожидать, что она ответит на все ваши вопросы.

 

Эксперимент 25. Электромагнитные явления

 

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

 

Двусторонняя взаимосвязь

Электрическое поле может создавать магнитное. Магнитное поле может приводить к появлению электрического.

Два принципа лежат в основе электромагнитного взаимодействия:

• Когда ток течет по проводу, вокруг провода образуется магнитное поле. Этот принцип используется почти в каждом электродвигателе.

• Когда провод перемещается в магнитном поле, в проводе возникает электрический ток. На этом принципе основаны генераторы электроэнергии.

Дизельный двигатель, гидротурбина, ветряк или какой-либо другой источник энергии может вращать проволочную обмотку в мощном магнитном поле. В витках обмотки индуцируется электрический ток. За исключением солнечных батарей, все другие промышленные источники электрической энергии используют магниты и проволочные обмотки.

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

 

Что вам понадобится

• Большая отвертка (1 шт.)

• Провод 22-го калибра (диаметр 0,64 мм) или тоньше (не более 1,8 метра)

• Батарея на 9 В (1 шт.)

• Скрепка (1 шт.)

 

Несложный опыт

Все очень просто. Намотайте провод на стержень отвертки возле ее наконечника. Витки должны быть аккуратными, плотными, расположенными близко друг к другу, вам необходимо сделать 100 витков, которые умещаются на расстоянии не более 5 см. Чтобы уместить их на таком пространстве, вам потребуется наматывать витки поверх предыдущих. Для надежности последний виток закрепите изолентой.

Теперь подключите к концам провода 9-вольтовую батарею. На первый взгляд, может показаться, что так делать нельзя, поскольку вы замкнете батарею накоротко, как это было в эксперименте 2. Но когда вы пропускаете ток через провод, который образует витки, а не является прямым, электрический ток действует иначе и способен выполнить определенную работу (например, он может двигать скрепку). Поместите небольшую скрепку рядом с наконечником отвертки, как показано на рис. 5.9.

Рис. 5.9. Этот простейший электромагнит способен притянуть скрепку

Рис. 5.10. Самая простая схема

Рис. 5.11. Когда электрический ток протекает слева направо по этому проводнику, он индуцирует магнитное поле, показанное стрелками

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

 

Индуктивность

Когда электрический ток течет по проводу, он создает вокруг него магнитное поле (рис. 5.11). Поскольку электричество «индуцирует» этот эффект, он называется индуктивностью.

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

Рис. 5.12. Когда проводник согнут в виде кольца, результирующее магнитное поле концентрируется внутри, как показано большой стрелкой

 Рис. 5.13. Графики зависимости индуктивности от размеров обмотки и числа витков в ней и приближенная расчетная формула

На рис. 5.13 это показано в виде графиков, наряду с формулой, известной как «приближение Уилера», которая позволяет приблизительно вычислить индуктивность катушки, если вы знаете внутренний и внешний радиусы, ширину и число витков обмотки. (Значения должны быть в дюймах, а не в метрической системе.) Основная единица индуктивности — генри, названная в честь американского первопроходца в изучении электричества Джозефа Генри. Поскольку это очень крупная единица (подобно фараду), формула выражает индуктивность в микрогенри.

Как видно из графиков, если оставить основной размер обмотки без изменений, но удвоить число витков (используя более тонкий провод или провод с более тонкой изоляцией), то реактивное сопротивление катушки вырастет в 4 раза. Это вызвано тем, что числитель формулы содержит множитель NxN.

Ключевые моменты:

• При увеличении диаметра обмотки растет и индуктивность.

• Индуктивность увеличивается приблизительно пропорционально квадрату числа витков. Другими словами, если число витков будет в три раза больше, то индуктивность возрастет в девять раз.

• При одинаковом числе витков индуктивность окажется меньше, если обмотка тонкая и широкая, и больше, если обмотка толстая и узкая.

 

Обозначения катушки индуктивности и термины

На рис. 5.14 приведены обозначения катушки индуктивности. Если смотреть слева направо, то первыми двумя символами обозначают катушку с воздушным сердечником (первый символ более старый, чем второй). Третий и четвертый символы указывают на то, то обмотка намотана вокруг твердого железного сердечника или вокруг сердечника, содержащего частички железа или феррита, соответственно. Железный сердечник будет увеличивать индуктивность катушки, поскольку он усиливает магнитный эффект.

Рис. 5.14. Обозначение катушек индуктивности на схемах

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

Возможно, самое распространенное применение катушек индуктивности — в трансформаторах, где переменный ток в одной катушке индуцирует переменный ток в другой, при этом железный сердечник для двух обмоток обычно общий. Если число витков первичной (входной) обмотки вдвое меньше, чем вторичной (выходной), то напряжение удвоится, а сила тока уменьшится вдвое (при гипотетическом условии, что КПД трансформатора составляет 100%).

 

Первопроходцы: Джозеф Генри

Джозеф Генри, родившийся в 1797 году, стал первым, кто разработал и продемонстрировал мощные электромагниты. Он также придумал понятие «самоиндукция», обозначающее «электрическую инерцию», которая свойственна проволочной обмотке.

Генри был сыном поденного рабочего в Олбани, штат Нью-Йорк. Прежде чем пойти учиться на часовщика, он работал в универсальном магазине и собирался стать актером. Друзья уговорили его поступить в Академию в Олбани, где он проявил склонность к наукам. В 1826 году его назначили профессором математики и естествознания, несмотря на то, что он не окончил колледж и считал себя «принципиальным самоучкой». Майкл Фарадей занимался аналогичными исследованиями в Англии, но Генри об этом не знал.

В 1832 году Генри был переведен в Принстон, где получал 1000 долларов в год и пользовался бесплатным жильем. Когда Морзе пытался запатентовать телеграф, Генри заявил, что он уже знаком с таким устройством, — действительно, он уже построил систему с аналогичным принципом работы, чтобы передавать сообщения своей жене домой, когда он работает в лаборатории Холла Философии (Philosophical Hall).

Помимо физики, Д. Генри преподавал химию, астрономию и архитектуру, а поскольку наука не была четко разграничена на области знания, как сейчас, он исследовал такие феномены, как фосфоресценция, звук, капиллярные явления и баллистика. В 1846 году он возглавил новый Смитсоновский институт в качестве научного руководителя. Портрет Д. Генри приведен на рис. 5.15.

Рис. 5.15. Джозеф Генри — американский экспериментатор, который стоял у истоков изучения электромагнетизма (Фотография взята из архива Wikimedia Commons)

 

Эксперимент 26. Настольная электростанция

 

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

 

Что вам понадобится

• Кусачки, инструмент для зачистки проводов, тестовые провода, мультиметр

• Цилиндрический неодимовый магнит диаметром 5 мм и длиной 4 см, намагниченный вдоль оси (1 шт.)

• Монтажный провод калибра 26 (диаметр 0,4 мм), 24 (0,5 мм) или 22 (0,64 мм), всего 60 метров

• Слаботочный светодиод (1 шт.)

• Конденсатор емкостью 1000 мкФ (1 шт.)

• Переключательный диод, серии 1N40001 или аналогичный (1 шт.)

Необязательные принадлежности:

• Цилиндрический неодимовый магнит диаметром 2 см и длиной 2,5 см, намагниченный вдоль оси (1 шт.)

• Деревянная шпонка диаметром 12,5 мм и длиной не менее 150 мм

• Стальной винт, типоразмер 6, с плоской головкой

• Полихлорвиниловая водопроводная труба, внешний диаметр 19 мм, длина не менее 15 см

• Два куска фанеры толщиной 6 мм и размером 10x10 см каждый (вам понадобится кольцевая пила или сверло Форстнера диаметром 25 мм, чтобы просверлить отверстие в фанере)

• Катушка обмоточного провода, около 100 граммов, 26-го калибра (диаметр 0,4 мм), примерно 9 метров (1 шт.)

 

Методика проведения эксперимента

Сначала вам понадобится магнит. Неодимовые магниты самые сильные из доступных, и они достаточно дешевые, если вы выберете маленький цилиндрический образец. Будет достаточно магнита диаметром 5 мм и длиной 4 см. Плотно намотайте на него десять витков провода 22-го калибра (диаметр 0,64 мм), как показано на рис. 5.16. После этого немного ослабьте провод, чтобы магнит мог перемещаться внутри обмотки.

Настройте мультиметр на измерение переменного напряжения в милливольтах (не постоянного, потому что мы будем иметь дело с переменными импульсами электричества). Снимите немного изоляции с каждого конца обмотки и подключите щупы мультиметра с помощью тестовых проводов с зажимами «крокодил». Зажмите магнит между большим и указательным пальцами и быстро переместите его взад и вперед внутри обмотки. Полагаю, ваш мультиметр должен показать значение от 3 до 5 мВ. Да, такой маленький магнит и десять витков провода могут сгенерировать лишь несколько милливольт.

Рис. 5.16. Всего десяти витков провода окажется достаточным, чтобы создать небольшой электрический потенциал, при перемещении магнита

Рис. 5.17. Увеличение числа витков провода приведет к росту напряжения при движении магнита сквозь них

Попробуйте сделать обмотку побольше, в два слоя, как показано на рис. 5.17. Снова быстро переместите магнит. Вы должны обнаружить, что напряжение возросло.

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

Это заставило меня задуматься — если у нас будет более крупный и сильный магнит и много витков провода, сможем ли выработать достаточное количество электроэнергии, чтобы обеспечить питание, скажем, светодиода?

 

Зажигаем светодиод

Я собираюсь использовать провод 22-го калибра (диаметр 0,64 мм), поскольку вы уже покупали его для других экспериментов. Сложность в том, что его диаметр довольно большой, а слой изоляции толстый. Двести витков этого провода займут много места. Вот почему нам предпочтительнее обмоточный провод из чистой меди с очень тонким изолирующим покрытием из шеллака или из полимерной пленки, который предназначен для очень плотной намотки.

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

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

При намотке катушки можно соединить несколько отрезков провода, а если крепко скрутить зачищенные концы, то вам не придется их паять.

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

Замечание

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

Завершенный вариант устройства показан на рис. 5.18. Магнит находится справа. Каркас катушки я сделал из фанеры толщиной 6 мм, она чуть больше 10 см в диаметре. Через центр продета пластиковая труба для воды диаметром 19 мм, ее внутренний диаметр лишь немного больше, чем диаметр магнита, и поэтому магнит может свободно скользить сквозь нее.

Рис. 5.18. Двести витков провода 22-го калибра на самодельной катушке, магнит и деревянная шпонка

Чтобы сделать катушку, наденьте фанерные круги на трубку. Теперь вам нужно намотать 60 метров провода на эту катушку, позаботившись о том, чтобы у вас оставался доступ к внутреннему концу провода. Я просверлил небольшое отверстие в одном из фанерных кругов, рядом с центром, и вывел провод через это отверстие.

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

Чтобы было удобно держать магнит, я просверлил отверстие в одном торце деревянной шпонки диаметром 12 мм и вкрутил туда винт типоразмера 6, с плоской головкой. После этого можно держать шпонку как ручку, а магнит надежно притягивается к винту.

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

Рис. 5.19. Устройство электрогенератора, способного зажечь светодиод

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

Вы приложили столько усилий, а получили меньше вольта? Да, но ваш мультиметр показывает среднее значение. Амплитуда каждого импульса, возможно, была больше.

Отключите тестовые провода от мультиметра и подключите их к слаботочному светодиоду. Закрепите светодиод так, чтобы он не болтался по сторонам. Теперь, если энергично двигать магнит, то думаю, вы сможете заметить мигание светодиода. Если он не мигает, измените ориентацию магнита в трубке и попробуйте снова. Чтобы все заработало, вам нужен именно слабо- точный светодиод.

 

Необязательные улучшения

Если вы готовы потратить чуть больше денег, то сможете получить более впечатляющие результаты.

Для начала возьмите магнит побольше. Я получил отличные результаты с магнитом длиной 5 см и диаметром 1,5 см. Естественно, для такого магнита понадобится трубка большего диаметра.

Далее, купите катушку подходящего обмоточного провода. Я использовал около 150 метров провода 26-го калибра (диаметр 0,4 мм). Его очень легко приобрести онлайн, поставщиков много.

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

Рис. 5.20. Катушка обмоточного провода с доступным внутренним концом (выделен окружностью)

Чтобы удалить тонкую пленку изоляции с концов обмоточного провода, вы можете очень аккуратно соскрести его лезвием ножа или зачистить мелкой наждачной бумагой. Проверьте с помощью увеличительного стекла, всю ли изоляцию вы удалили. Можете также подключить мультиметр, чтобы проверить сопротивление, которое должно быть меньше 100 Ом.

Теперь вы можете подключить светодиод к концам обмоточного провода на катушке и сгенерировать электрический ток, перемещая магнит к центру катушки и обратно, как показано на рис. 5.21.

Если катушка неподходящего размера или конец провода недоступен, то вам необходимо всего лишь перемотать провод с одной катушки на другую. Предположим, у вас есть 150 метров провода. Чтобы его перемотать, понадобится сделать около 2000 витков. Если вы делаете 4 витка в секунду, то весь процесс займет 500 секунд — меньше 10 минут, что вполне приемлемо.

На рис. 5.22 показано более мощное устройство, которое я сконструировал с целью демонстрации. Катушка обмоточного провода покрыта эпоксидным клеем, чтобы она не разматывалась, кроме того, я надежно закрепил трубу в корпусе из пластика. Неодимовый магнит притягивается к стальному винту на конце алюминиевого стержня, который также показан на фотографии.

Рис. 5.21. Устройство готово к выработке электроэнергии

Рис. 5.22. Демонстрационная установка электрогенератора

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

Рис. 5.23. Светодиодный генератор в действии

 

Техника безопасности при работе с магнитами

Будьте осторожны при экспериментах с магнитами, т. к. неодим обладает рядом особенностей.

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

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

Магниты никогда не «отдыхают». В мире электроники мы склонны полагать, что если что-то выключено, то мы не должны о нем беспокоиться. К магнитам это не относится. Они всегда «ощущают» окружающую среду и когда обнаруживают магнитный объект, они хотят его приблизить, сразу же. Результат может оказаться плачевным, особенно если объект имеет острые края, а ваша рука находится на его пути. Когда вы работаете с магнитом, создайте вокруг него свободное пространство без металлических предметов, а также остерегайтесь магнитных предметов под поверхностью. Например, мой магнит обнаружил стальной винт, вкрученный в нижнюю поверхность кухонной столешницы, и неожиданно устремился к нему. Это трудно воспринимать всерьез, пока такое не случится с вами.

Внимание!

Не забавляйтесь с неодимовыми магнитами. Соблюдайте осторожность.

Также помните о том, что магниты намагничивают другие предметы. Когда магнитное поле проходит через железный или стальной объект, он приобретает некоторые магнитные качества. Если вы носите наручные часы, старайтесь не намагнитить их. Если у вас смартфон, держите его подальше от магнитов. Влиянию магнитных полей подвержен любой компьютер или дисковый накопитель. Магнитную полоску на кредитной карте легко размагнитить. Держите магниты подальше от экрана телевизора и видеомониторов (особенно ЭЛТ). И последнее, но не менее важное: мощные магниты могут влиять на нормальную работу кардиостимуляторов.

 

Заряд конденсатора

Можно попробовать провести еще один опыт. Отключите светодиод от катушки и подсоедините электролитический конденсатор емкостью 1000 мкФ последовательно с диодом серии 1N4001, как показано на рис. 5.24. К выводам конденсатора подключите мультиметр, измеряющий постоянное напряжение (на этот раз не переменное).

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

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

Этот эксперимент более важен, чем кажется. Учитывайте то, что когда вы вталкиваете магнит в катушку, он индуцирует ток в одном направлении, а когда вынимаете — в другом. Фактически, вы создаете переменный ток.

Рис. 5.24. Диод позволяет заряжать конденсатор от катушки с магнитом

Диод позволяет току течь в цепи только в одном направлении. Он блокирует противоположно направленный ток, и таким образом конденсатор накапливает заряд. Если вы сделаете заключение о том, что диоды позволяют преобразовать переменный ток в постоянный, то будете абсолютно правы. Мы говорим, что диод «выпрямляет» переменный ток.

 

Переходим к исследованию звука

Эксперимент 25 показал, что подача напряжения может порождать магнит. Эксперимент 26 продемонстрировал, что перемещение магнита может генерировать напряжение. Теперь мы готовы применить эти принципы для обнаружения и воспроизведения звука.

 

Эксперимент 27. Разбираем динамик

 

Вы видели, что проходящий через обмотку электрический ток может создать магнитную силу, которой достаточно для того, чтобы притянуть небольшой металлический объект. А что если обмотка очень легкая, а объект тяжелый? В таком случае обмотка будет притягиваться к объекту. Этот принцип лежит в основе работы динамика.

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

 

Что вам понадобится

• Самый дешевый динамик, диаметром как минимум 5 см (1 шт.)

• Универсальный нож (1 шт.)

 

Как вскрыть динамик

На рис. 5.25 показана задняя сторона небольшого динамика. Магнит находится в герметичном цилиндрическом кожухе.

Переверните динамик лицевой стороной вверх, как показано на рис. 5.26. Разрежьте его диффузор по периметру острым универсальным ножом или лезвием X-Acto. Затем выполните разрез вокруг центральной части и удалите получившееся кольцо из черной бумаги.

Рис. 5.25. Маленький динамик (вид сзади)

Рис. 5.26. Передняя сторона динамика

Динамик без диффузора показан на рис. 5.27. Желтая ткань в центре — это гибкая секция, которая в обычном состоянии позволяет диффузору двигаться внутрь и наружу и не дает возможности отклоняться в стороны.

Сделайте надрез по внешнему краю желтой ткани, и тогда вы сможете вытянуть спрятанный бумажный цилиндр, вокруг которого намотана медная обмотка, как показано на рис. 5.28. На фотографии я для наглядности перевернул ее.

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

Рис. 5.27. Динамик с удаленным диффузором

Рис. 5.28. Медная обмотка динамика обычно расположена внутри кольцеобразной канавки магнита

Большие динамики в вашей стереосистеме работают по такому же принципу. Просто у них магниты больше, а катушки способны выдержать большую мощность (обычно до 100 Вт).

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

 

История создания динамиков

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

Эта идея была предложена в 1874 году плодовитым немецким изобретателем Эрнстом Сименсом. (В 1880 году он также построил первый в мире лифт с электрическим приводом.) Сегодня компания Siemens AG — один из самых крупных производителей электроники в мире.

Когда Александер Грейам Белл запатентовал телефон в 1876 году, он воспользовался идеей Сименса для создания звуковых частот в динамике телефонной трубки. С этого момента устройства воспроизведения звука постепенно становились качественнее и мощнее, до тех пор пока в 1925 году Честер Райс (Chester Rice) и Эдвард Келлог (Edward Kellog) из компании General Electric не опубликовали документ, устанавливающий основные принципы, которые и сейчас используются при разработке динамиков.

На сайтах, таких как Radiola Guy (), вы найдете фотографии очень красивых старинных динамиков, которые для максимальной эффективности были снабжены рупором, как показано на рис. 5.29. По мере того, как усилители звука стали мощнее, эффективность динамиков отошла на второй план, и гораздо важнее стали качество воспроизведения и минимальная стоимость производства. Сегодняшние динамики преобразуют лишь около 1% электрической энергии в звуковую.

Рис. 5.29. Этот красивый динамик Amplion AR-114x иллюстрирует попытки дизайнеров добиться максимальной эффективности в эру, когда мощность звуковых усилителей была очень ограничена (Фото предоставлено «Sonny, the RadiolaGuy»)

 

Звук, электричество и снова звук

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

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

Частота звука — это число волн за секунду, обычно она выражается в герцах.

Рис. 5.30. Удар в гонг вызывает вибрацию его гладкой поверхности. В результате в воздухе возникают волны сжатия и растяжения

Предположим, мы поместили очень чувствительную маленькую мембрану из тонкого пластика на пути волн сжатия. Она будет колебаться в ответ на волны, подобно листку, который трепещет на ветру. Допустим, мы прикрепили маленькую катушку индуктивности из очень тонкого провода к обратной стороне мембраны, так что она движется вместе с мембраной. Давайте также поместим внутри катушки неподвижный магнит. Эта конструкция напоминает крошечный ультрачувствительный динамик, за исключением того, что не электричество порождает звук, а звук будет вырабатывать электричество. Волны сжатия вызывают колебание мембраны вдоль оси магнита, а магнитное поле создает колеблющееся напряжение в проводе. Сказанное иллюстрирует рис. 5.31.

Такое устройство называется микрофоном с подвижной катушкой. Есть и другие способы создания микрофона, но эта конструкция самая простая для понимания. Конечно, напряжение, которое он генерирует, очень мало, но мы можем усилить его с помощью транзистора или ряда транзисторов, как предложено на рис. 5.32.

Затем мы можем подать выходной сигнал на обмотку, намотанную вокруг горловины динамика, и динамик будет воспроизводить волны сжатия в воздухе, как показано на рис. 5.33.

Рис. 5.31. Звуковые волны, попадающие в микрофон с подвижной катушкой, вызывают вибрацию мембраны, прикрепленной к катушке индуктивности на муфте вокруг магнита. В результате движение катушки генерирует малые токи

Рис. 5.32. Слабые сигналы от микрофона проходят через усилитель, который увеличивает их амплитуду, сохраняя частоту и форму

Рис. 5.33. Усиленный электрический сигнал проходит через обмотку вокруг горловины диффузора динамика. Индуцированное электрическим током магнитное поле вызывает вибрацию диффузора, воспроизводя исходный звук

Возможно, мы захотим записать этот звук и затем воспроизвести его. Принцип останется прежним. Самое сложное — спроектировать микрофон, усилитель и динамик таким образом, чтобы они точно воспроизводили форму колебаний на каждом этапе. Задача непростая, поэтому точное воспроизведение звука может оказаться труднодостижимым.

 

Эксперимент 28. Демонстрируем самоиндукцию катушки

 

Вы убедились, что при пропускании тока через обмотку, он создает магнитное поле. А что происходит с созданным полем, когда вы отключаете ток? Энергия магнитного поля превращается обратно в короткий импульс электрического тока. Мы говорим, что это происходит, когда поле спадает. Описанный далее эксперимент позволит вам воочию убедиться в этом.

 

Что вам понадобится

• Макетная плата, монтажный провод, кусачки, инструмент для зачистки проводов, мультиметр

• Слаботочные светодиоды (2 шт.)

• Монтажный провод 22-го (лучше 26-го) калибра (диаметр 0,64 или 0,4 мм), 30 метров (1 катушка)

• Резистор номиналом 47 Ом (1 шт.)

• Конденсатор емкостью 1000 мкФ или больше (1 шт.)

• Кнопка (1 шт.)

 

Методика проведения

Взгляните на электрическую схему, приведенную на рис. 5.34. Макет установки показан на рис. 5.35. Для обмотки можете использовать бухту монтажного провода 22-го калибра длиной 30 метров. Как вариант, если вы намотали катушку из 60 метров провода в эксперименте 26, то подойдет и она, а если вы приобрели обмоточный провод, то это еще лучше.

На первый взгляд схема может показаться вам бессмысленной. Резистор 47 Ом слишком мал для защиты светодиода, но почему вообще светодиод должен гореть, когда электрический ток может обойти его через катушку?

Рис. 5.34. Простая схема для демонстрации собственной индуктивности катушки

 Рис. 5.35. Компоновка макетной платы для эксперимента по самоиндукции.

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

Попробуем добавить второй светодиод, подключив его по-другому, как показано на рис. 5.36 и 5.37. Опять нажмите кнопку, и первый светодиод мигнет, как и раньше. Но теперь, когда вы отпустите кнопку, мигнет второй светодиод.

Рис. 5.36. Один светодиод мигает при появлении магнитного поля, а второй — при его исчезновении

Рис. 5.37. Макет установки с двумя светодиодами

 

Понятие самоиндукции

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

Эта реакция катушки называется самоиндукцией. Иногда говорят об индуктивном сопротивлении или реактивном сопротивлении, но поскольку правильным является термин «самоиндукция», я буду употреблять именно его.

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

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

 

Резисторы, конденсаторы и катушки индуктивности

Три основных типа пассивных компонентов в электронике — это резисторы, конденсаторы и катушки индуктивности. Теперь мы можем перечислить и сравнить их свойства.

Резистор уменьшает электрический ток и понижает напряжение.

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

Катушка индуктивности (иногда ее называют индуктором) в первый момент блокирует постоянный ток, а затем пропускает его.

В схеме, которую я вам только что показал, номинал резистора невелик, поскольку я знал, что импульс тока через светодиод будет очень коротким. Мигание светодиодов было бы менее заметным, если номинал резистора был как обычно 330 или 470 Ом.

Внимание!

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

Вот еще один, последний, вариант этого эксперимента — для проверки вашей памяти и понимания основ электроники. Соберите новую схему, показанную на рис. 5.38 и 5.39, заменив катушку индуктивности конденсатором на 1000 мкФ (соблюдайте полярность, положительный вывод должен быть вверху). Номинал резистора здесь 470 Ом, потому что теперь нет катушки, которая блокирует и отводит ток.

Вначале нажмите и удерживайте пару секунд кнопку В, чтобы убедиться в том, что конденсатор разряжен. Что мы теперь увидим, когда нажмем кнопку А? Вероятно, вы догадываетесь. Вспомните, конденсатор будет пропускать начальный импульс тока. Следовательно, загорится нижний светодиод — и затем постепенно погаснет, потому что конденсатор накапливает положительный заряд на своей верхней пластине, а отрицательный — на нижней. Когда это произойдет, потенциал на нижнем светодиоде упадет до нуля.

Рис. 5.38. Поведение конденсатора во многом противоположно поведению катушки индуктивности

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

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

 

Понятие о переменном токе

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

Рис. 5.39. Компоновка макетной платы для демонстрации работы конденсатора

Будет ли самоиндукция катушки влиять на этот поток импульсов? Все будет зависеть от длительности каждого импульса и от того, какой индуктивностью обладает катушка. Если частота импульсов выбрана правильно, то самоиндукция катушки будет достаточной, чтобы блокировать каждый импульс. Затем катушка будет восстанавливаться какое-то время, блокируя следующий импульс. В соединении с резистором (или с сопротивлением динамика) катушка индуктивности может подавлять некоторые частоты, пропуская остальные.

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

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

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

Замечание

Что такое мнимое число? Самый распространенный пример — квадратный корень из -1. Как такое может быть? Никак, и поэтому мы говорим, что число мнимое. Однако такие числа неожиданным образом используются в теории электричества. Если вы заинтересовались, почитайте что-либо об этом в книгах по теории электричества.

Но я пока еще не закончил с катушками индуктивности. Следующий эксперимент продемонстрирует звуковые эффекты, которые я только что описал.

 

Эксперимент 29. Фильтрация частот

 

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

 

Что вам понадобится

• Макетная плата, монтажный провод, кусачки, инструмент для зачистки проводов, тестовые провода, мультиметр

• Источник питания на 9 В (батарея или сетевой адаптер)

• Динамик с импедансом 8 Ом, диаметром как минимум 10 см (1 шт.)

• Микросхема аудиоусилителя LM386 (1 шт.)

• Монтажный провод 22-го калибра (диаметр 0,64 мм), 30 метров

• Небольшой пластиковый контейнер в качестве корпуса динамика (1 шт.)

• Таймер 555 (1 шт.)

• Резистор с номиналом 10 кОм (2 шт.)

• Конденсаторы емкостью 0,01 мкФ (3 шт.), 2,2 мкФ (1 шт.), 100 мкФ (1 шт.), 220 мкФ (3 шт.)

• Подстроечные потенциометры с номиналами 10 кОм (1 шт.) и 1 МОм (1 шт.)

• Однополюсные ползунковые переключатели на два направления (4 шт.)

• Кнопка (1 шт.)

 

Корпус для динамика

Тот небольшой динамик, который я рекомендовал для предыдущих проектов, вполне подходил для воспроизведения простых звуковых сигналов, но небольшие динамики плохо воспроизводят низкие частоты. Поскольку мне хотелось бы, чтобы вы услышали, как электронные компоненты могут влиять на эти частоты, пришло время познакомиться с большим динамиком, например таким, как на рис. 5.40, который имеет диффузор диаметром 10 см.

Рис. 5.40. Динамик, подходящий для этого эксперимента

Рис. 5.41. Резонирующий корпус позволит лучше услышать басы (низкие частоты) от вашего динамика

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

Если у вас есть время сделать добротный кожух из фанеры, это было бы идеально, но самое простое и дешевое решение — пластиковый контейнер с защелкивающейся крышкой. На рис. 5.41 изображен такой контейнер с закрепленным на дне динамиком. Просверлить аккуратные отверстия в пластике довольно сложно, и поэтому я особо не старался.

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

 

Усилитель на одной микросхеме

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

Одна из самых простых, дешевых и доступных микросхем аудиоусилителя — LM386, которую выпускают многие производители; каждый из них добавляет к маркировке дополнительные буквы и цифры. Варианты LM386N-1, LM386N и LM386M-1 для наших целей идентичны. Проверьте только, что вы покупаете версию для установки через монтажные отверстия, а не для поверхностного монтажа. Цоколевка микросхемы показана на рис. 5.42.

Рис. 5.42. Цоколевка микросхемы-усилителя LM386

Эта маленькая микросхема работает от источника питания в 4-12 В постоянного тока, и хотя ее номинальная мощность всего 1,25 Вт, вас удивит громкость звучания. Она имеет номинальный коэффициент усиления 20:1.

 

Проверка работоспособности усилителя

В целях проверки мне бы хотелось, чтобы источник звукового спектра частот перекрывал широкий диапазон слышимого спектра частот. Простой способ добиться этого — собрать генератор на таймере 555. В верхней части схемы на рис. 5.43 показан таймер в режиме автоколебаний, а номиналы компонентов таковы, что обеспечивается диапазон частот примерно от 70 Гц до 5 кГц, когда вы поворачиваете подстроечный потенциометр номиналом 1 МОм. К сожалению, шкала окажется нелинейной: небольшой поворот потенциометра будет иметь гораздо больший слышимый эффект для верхних частот, чем для нижних. Однако для демонстрации этого достаточно, да и в любом случае фильтрация нижних частот на слух воспринимается заметнее.

Рис. 5.43. Принципиальная схема устройства для экспериментов со звуком

Компоновка макетной платы для этой схемы приведена на рис. 5.44, а расположение и номиналы компонентов — на рис. 5.45.

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

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

Рис. 5.44. Макет экспериментальной аудиосхемы

Для катушки индуктивности идеально подойдет обмоточный провод 22-го калибра или тоньше (диаметром 0,64 мм или меньше), но вы получите заметные результаты и при использовании 30-метровой катушки монтажного провода 22-го калибра, а 60 метров монтажного провода, который я предлагал в предыдущем эксперименте, окажутся еще лучше.

Рис. 5.45. Расположение и номиналы компонентов экспериментальной аудиосхемы

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

Вы можете подать питание для этого устройства от сетевого адаптера или от 9-вольтовой батареи, стабилизация необязательна. Тем не менее, если вы используете адаптер, он может создавать гудение. Уменьшить этот эффект можно, подключив конденсатор емкостью 1000 мкФ (или больше) между двумя шинами питания макетной платы. Если вы питаете устройство от батареи, то потребление энергии усилителем ограничит срок работы батареи до 2-3 часов, а некоторые звуковые фильтры будут слегка понижать напряжение, что повлияет на частоту звука, создаваемого таймером 555.

Как только вы подключите питание, то должны услышать какой-либо звуковой тон. Если сигнала нет, то первым делом при поиске неисправностей вы должны отключить верхний вывод конденсатора емкостью 220 мкФ от выхода таймера 555 и быстро коснуться проводами динамика между этим выводом и отрицательной шиной. Если вы снова ничего не услышали, значит, неправильно подключили таймер. Если какой- то звук появился, то ошибка связана с микросхемой усилителя LM386. Проверьте, что вы не ошиблись при подключении питания к выводам микросхемы LM386. Контакты питания расположены иначе, чем у логических микросхем.

Все равно нет звука? Выньте верхнюю часть короткой перемычки слева от микросхемы LM386 выше потенциометра на 10 кОм. Коснитесь конца этого провода пальцем, и вы должны услышать свистящие или жужжащие звуки, потому что он ведет ко входу усилителя (контакту 4). По-прежнему ничего? Попробуйте подключить динамик между отрицательным выводом конденсатора С6 и отрицательной шиной источника питания. С6 — это разделительный конденсатор, подключенный напрямую к выходу микросхемы LM386. Если ни одна из этих попыток не увенчалась успехом, вам придется тщательно прозвонить всю схему мультиметром, проверяя напряжение.

 

Опыты со звуком

Предполагаю, что ваша схема теперь настроена и работает. Я объясню функции компонентов, прежде чем предложу попробовать кое-что еще. Обратимся к схеме устройства (рис. 5.43) и макетной плате (рис. 5.44).

Конденсатор С1 вместе с подстроечным потенциометром 1 МОм задает частоту таймера. Если вы захотите услышать звук выше 5 кГц, можно использовать конденсатор емкостью 0,0068 мкФ (6,8 нФ).

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

Конденсатор С6 — это еще один разделительный конденсатор, защищающий динамик от постоянного тока, который идет от усилителя.

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

Конденсатор С4 включается и выключается пол- зунковым переключателем S3. Когда вы устанавливаете его ползунок вверх, звук от таймера 555 проходит через конденсатор С4 к усилителю. Поскольку емкость С4 мала, он не пропускает нижние частоты, делая звук «суше» и резче.

Наиболее сложная часть схемы связана с катушкой индуктивности. Мне хотелось, чтобы вы услышали различие между параллельным и последовательным подключением катушки к динамику. Переключатели S1 и S2 дают вам возможность такого выбора, как показано на рис. 5.46 и 5.47. Когда катушка подключена параллельно динамику, иногда говорят, что она шунтирует динамик.

Рис. 5.46. Переключатели S1 и S2 позволяют вам подключить внешнюю катушку последовательно или параллельно динамику

Рис. 5.47. С помощью S1 и S2 можно также закоротить катушку и отключить динамик от усилителя

Здесь у вас много возможностей для экспериментов, особенно если учесть то, что вы можете регулировать частоту и громкость звучания во время исследования различных фильтров. Вы также можете проверить эффект от одновременного применения двух фильтров. Например, нажмите кнопку, чтобы подключить шунтирующий конденсатор С7, который срезает верхние частоты, и одновременно переключателем S3 включите в цепь конденсатор С4, срезающий нижние частоты. У вас получится полосовой фильтр, называемый так потому, что он пропускает лишь узкую полосу частот среднего диапазона.

Подстроечный потенциометр 10 кОм внизу слева служит регулятором громкости, но вы обнаружите, что он работает корректно только в средней части диапазона. При крайних положениях движка потенциометра схема может самовозбуждаться. Это характерно для усилителей. Для решения проблемы добавляют конденсаторы большой и малой емкости в различных участках схемы. Я не стал беспокоиться по этому поводу, потому что для наших целей вполне хватит средних значений сопротивления.

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

 

Форма колебаний

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

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

Эта форма колебаний — синусоидальная волна, называемая так потому, что вы можете получить ее из элементарной тригонометрии. Допустим, что в прямоугольном треугольнике одна из сторон, примыкающая к прямому углу, обозначена буквой «а». Если вы разделите длину стороны «а» на длину наклонной стороны (гипотенузы) треугольника, в результате получится синус угла, которому противолежит сторона «а».

Чтобы упростить картину, представьте шар на веревке, вращающийся вокруг центральной точки, как показано на рис. 5.48. Не будем учитывать гравитацию, сопротивление воздуха и другие отвлекающие факторы. Просто измеряйте высоту подъема шара и делите ее на длину веревки через равные интервалы времени, пока шар движется по кругу с постоянной скоростью. Отобразите результаты в виде графика, и у нас получится синусоида, показанная на рис. 5.49. Заметьте, что когда шар движется по кругу ниже своей исходной горизонтальной линии, мы считаем это расстояние отрицательным, и таким образом синусоида также становится отрицательной.

Рис. 5.48. Вы можете нарисовать синусоиду с помощью простых геометрических соотношений

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

• Статическое давление воздуха вокруг нас называется атмосферным давлением. Оно возникает вследствие притяжения воздуха под действием сил гравитации. (Да, воздух также обладает массой.)

• Почти любой звук представляет собой два последовательных участка сжатия и расширения: с давлением выше и ниже атмосферного — совсем как волны в океане.

• По аналогии мы можем изобразить волны сжатия и расширения как напряжение, амплитуда которого меняется от максимума к минимуму и обратно (рис. 5.49).

• Любой звук можно разложить на совокупность синусоидальных волн различной частоты и амплитуды.

• И наоборот: если вы сведете вместе правильно подобранные звуковые синусоидальные волны, то сможете создать абсолютно любой звук.

Рис. 5.49. Синусоидальная звуковая волна, создаваемая любым инструментом, заставляющим воздух вибрировать, например флейтой. Это приятный и гармоничный звук

Предположим, два звука воспроизводятся одновременно. На рис. 5.50 частота одного сигнала выше, чем другого (показаны две синусоидальные кривые с разным периодом). Когда эти два звука распространяются как волны сжатия в воздухе или как переменные электрические токи по проводу, их амплитуды складываются и создают более сложную кривую, которая изображена черным цветом. Теперь попробуйте вообразить сложение десятков или сотен различных частот, и вы получите представление о сложной звуковой волне какого-либо музыкального фрагмента.

Рис. 5.50. Когда две синусоидальные волны генерируются одновременно (например, двумя музыкантами, играющими на флейтах), объединенный звук представляет собой сложную кривую

Рис. 5.51. Прямоугольный сигнал, формируемый таймером 555, который резко включается и выключается

Таймер 555 в режиме мультивибратора генерирует прямоугольную последовательность. Это связано с тем, что выход таймера резко переключается с низкого на высокий уровень и обратно. Результат показан на рис. 5.51. Синусоидальный сигнал на слух воспринимается мягко и мелодично, поскольку он изменяется плавно. Прямоугольная последовательность звучит резко и сопровождается искажениями. На самом деле такой сигнал содержит гармоники, т.е. частоты, которые в несколько раз превышают основную частоту.

Поскольку прямоугольная последовательность содержит высокочастотные гармоники, она удобна для проверки звуковых фильтров. Фильтр нижних частот, который пропускает только нижние частоты, будет уменьшать искажения, «скругляя углы» прямоугольного сигнала.

 

Немного исказим звучание музыки

Возможно, вы задаете себе такой вопрос: если микросхема LM386 является усилителем звука, то сможет ли она усилить музыку? Да, для этого она и предназначена. Вы можете проверить это самостоятельно, используя любое аудиоустройство с выходом для наушников.

Имейте в виду, что микросхема LM386 — это одноканальный усилитель, поэтому вы не сможете услышать оба аудиоканала вашего плеера. Чтобы подключиться к одному из них, возьмите кабель с миниатюрными аудиоразъемами на концах. Отрежьте один из разъемов, снимите изоляцию, и вы обнаружите оплетку из тонких проводов, которые являются экраном, предназначенным для подключения к шине заземления. Внутри оплетки находятся два проводника, несущие сигналы от левого и правого каналов. Отрежьте один из них (неважно какой), но следите, чтобы оставшийся проводник не замкнулся с экраном.

Рис. 5.52. Аудиокабель зачищен, чтобы обеспечить доступ к его экрану и центральному проводнику

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

Убедитесь в том, что питание вашей схемы усилителя отключено, и переведите все ползун- ковые переключатели в нижнее положение. Удалите отрезок провода, который соединяет вывод 3 таймера 555 с расположенным под ним конденсатором емкостью 220 мкФ. Тем самым вы отключаете таймер 555 и сможете в дальнейшем подать входной сигнал на положительную обкладку конденсатора С6.

Подсоедините один конец тестового провода с зажимом «крокодил» к положительному выводу конденсатора С6, а второй — к центральному проводнику аудиокабеля. Вторым тестовым проводом соедините экран кабеля с отрицательной шиной схемы. Очень важно, чтобы музыкальный плеер и схема усилителя имели общее заземление.

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

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

 

Разделительные цепи

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

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

Если вы хотите собрать подобный разделительный фильтр, следует подобрать высококачественные конденсаторы из полиэфирного пластика (они неполярные, более надежные и прослужат дольше, чем электролитические аналоги) и катушку индуктивности с точно рассчитанными размерами и числом витков, чтобы получить требуемую частотную характеристику. На рис. 5.53 изображен неполярный конденсатор из полиэфирного пластика, а на рис. 5.54 — разделительная катушка индуктивности, которую я купил в интернет-магазине eBay за 6 долларов. Мне было интересно узнать, как она устроена, и поэтому я разобрал ее.

Рис. 5.53. Высококачественный полиэфирный пленочный конденсатор

Рис. 5.54. Что интересного мы обнаружим внутри этой катушки?

Рис. 5.55. Изолента удалена, теперь видна катушка из обмоточного провода

Рис. 5.56. Катушка индуктивности для разделительного аудиофильтра состоит лишь из пластмассового каркаса и обмотки

Сначала я снял черную виниловую ленту, которая закрывала обмотку. Внутри оказался обычный медный обмоточный провод с тонким покрытием из шеллака или из полупрозрачного пластика (рис. 5.55). Я размотал этот провод, сосчитав при этом число витков. На рис. 5.56 показан провод и каркас, на котором он был намотан.

Итак, технические характеристики этой катушки для разделительного аудиофильтра таковы: 12 метров медного обмоточного провода 20-го калибра, образующего 200 витков на небольшом пластмассовом каркасе.

Вывод: аудиокомпоненты окружены неким «таинственным» ореолом. Их цена зачастую завышена, и вы вполне можете самостоятельно изготовить катушку индуктивности, если будете ориентироваться на указанные параметры и затем скорректируете их под свои нужды.

Допустим, вы хотите установить в своем автомобиле очень мощные низкочастотные динамики. Сможете ли вы создать собственный фильтр так, чтобы они воспроизводили только нижние частоты? Конечно — потребуется лишь добавить больше витков, пока катушка индуктивности не станет срезать необходимую часть верхних частот. Проверьте только, что сечение провода достаточно большое, чтобы он не перегревался, когда вы пустите по нему звуковую мощность в 100 ватт и выше.

Вот еще одно устройство, о котором стоит серьезно подумать: светомузыка. Вы можете сделать отвод от выхода стереосистемы и с помощью фильтров разделить аудиочастоты на три канала, подключив к каждому отдельную группу цветных светодиодов. Красные светодиоды будут светиться при низких тонах, желтые — при средних, а зеленые — при высоких (цвет можете подобрать на свой вкус). Последовательно со светодиодами можно подключить импульсные диоды, чтобы выпрямить переменный ток, и резисторы, чтобы ограничить напряжение на светодиодах, скажем, до 2,5 В (когда громкость музыки максимальная). С помощью мультиметра выясните, какой ток проходит через каждый резистор, и умножьте это значение на величину падения напряжения на резисторе, чтобы найти рассеиваемую мощность и убедиться, что резистор способен ее выдержать, не сгорев.

Аудиосистемы — это обширная область для любителей проектировать и создавать электронные устройства самостоятельно.

 

Эксперимент 30. Искажение звука

 

Давайте попробуем собрать еще один вариант схемы из эксперимента 29. Он продемонстрирует еще одну важную особенность звука: искажение.

 

Что вам понадобится

• Установка из эксперимента 29, собранная на макетной плате (см. рис. 5.44).

• Транзистор серии 2N2222 (1 шт.)

• Резисторы номиналами 330 Ом (1 шт.) и 10 кОм (1 шт.)

• Конденсаторы емкостью 1 мкФ (2 шт.) и 10 мкФ (1 шт.)

 

Модификация схемы

Мы внесем лишь незначительные изменения в предыдущую схему. Необходимо добавить транзистор, два резистора и три конденсатора. На рис. 5.57 показаны новые компоненты в верхней части макетной платы, а ранее установленные компоненты обесцвечены.

На рис. 5.58 приведены те же компоненты и их номиналы в соответствующей секции схемы, остальные компоненты опущены.

Транзистор 2N2222 перегружает вход микросхемы LM386, в то время как конденсаторы С8 и С9 емкостью 1 мкФ ограничивают нижние частоты, чтобы усилить искажение звука.

Конденсатор C10 предназначен для увеличения коэффициента усиления LM386. Это особенность данной микросхемы: если добавить конденсатор между выводами 1 и 8, коэффициент усиления возрастает с 20 до 200.

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

Рис. 5.57. Дополнительные компоненты, увеличивающие искажение звука

Рис. 5.58. Номиналы дополнительных компонентов на схеме

Внесите изменения в схему и подайте питание. Ранее на выходе было слышно небольшое жужжание, поскольку форма сигнала приближалась к прямоугольной. Но теперь, если вы поэкспериментируете с подстроечными потенциометрами 10 кОм и 1 МОм, выходной сигнал может зазвучать как гитара Джими Хендрикса.

Если результат чересчур экстремальный, можно заменить резистор 330 Ом другим, с более высоким номиналом. Но что же, собственно, здесь происходит?

 

Ограничение сигнала

При разработке аппаратуры Hi-Fi инженеры усердно трудились над усовершенствованием воспроизведения звука. Они стремились к тому, чтобы сигналы на входе и выходе усилителя были идентичны по форме и различались только по амплитуде. Уровень выходного сигнала должен быть достаточным для обеспечения заданной громкости звука в динамиках. Малейшее искажение формы сигнала считалось неприемлемым.

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

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

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

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

Рис. 5.60. Эта педаль Vox Wow-Fuzz была одной из первых «примочек», специально создающих тот вид искажения, от которого аудиоинженеры пытались избавиться десятилетиями

Для рок-гитаристов ограничение амплитуды звучит хорошо, и для создания этого эффекта были придуманы педальные приставки. Один из примеров подобного устройства показан на рис. 5.60.

 

История создания гитарных приставок

Группа «The Ventures» в 1962 году впервые записала сингл «The 2000 Pound Вее» с использованием фузз-бокса. В этой поистине одной из самых одиозных инструментальных композиций за всю историю музыки тембр настолько искажен, что многие музыканты посчитали, что подобное звучание обречено на забвение.

Затем Рэй Дэвис (Ray Davies) из группы «The Kinks» принялся экспериментировать со звуком, подключая выход с одного усилителя ко входу другого, предположительно во время записи хита «You Really Got Ме». Это перегружало усилитель и создавало звуковой эффект, который был более приемлем в музыкальном плане. В 1965 году Кит Ричардс (Keith Richards) применил приставку Gibson Maestro Fuzz-Tone для записи песни «(I Can’t Get No) Satisfaction» группы «The Rolling Stones».

Сегодня вы можете встретить тысячи энтузиастов, продвигающих свои оригинальные звуковые эффекты.

На рис. 5.61 я привел схему Флавио Деллепиане (FlavioDellepiane) (), итальянского разработчика, который распространяет свои работы бесплатно (через сервис Google AdSense).

Рис. 5.61. В схеме, спроектированной Флавио Деллепиане, три транзистора имитируют искажение, типичное для лампового усилителя при перегрузке

Флавио — изобретатель-самоучка, основную часть своих знаний он получил из журналов по электронике, таких как старое английское издание «Wireless World». В схеме фузз-приставки, которую я привожу здесь, он использует усилитель с очень высоким коэффициентом усиления, состоящий из трех полевых транзисторов, которые максимально точно имитируют сигналы, типичные для перегруженного лампового усилителя.

На своем сайте Флавио предлагает много схем, разработанных и проверенных при помощи двухканального осциллографа, генератора гармонических колебаний с низким уровнем искажения (так аудиоустройство получает «чистый» входной сигнал, прежде чем оно исказит его), измерителя нелинейных искажений и прецизионного аудиовольтметра. Последний прибор и генератор были собраны по его собственным проектам, и он также разрешает использовать эти схемы бесплатно. Таким образом, на его сайте любители конструирования домашних звуковых устройств могут сразу найти все необходимое для самообучения.

До «фузза» был эффект тремоло. Многие люди путают его с вибрато, поэтому давайте проясним различие между ними прямо сейчас:

Вибрато, применяемое к ноте, меняет частоту вверх и вниз, как если бы гитарист подтягивал струны.

Тремоло, применяемое к ноте, вызывает изменение громкости, как если бы кто-либо быстро вращал регулятор громкости электрогитары вверх и вниз.

Гарри ДеАрмонд (Harry DeArmond) продал первое устройство с эффектом тремоло, которое он назвал Trem-Trol. Оно было похоже на старинный радиоприемник с двумя дисками на передней панели и с ручкой для переноски наверху. Наверное, для того чтобы уменьшить стоимость, ДеАрмонд не использовал никаких электронных компонентов. Его Trem-Trol в духе стимпанка состоял из электродвигателя с коническим валом и прижатым к нему резиновым колесом. Скорость вращения колеса изменялась, когда вы перемещали его вниз или вверх по валу, поворачивая ручку. Колесо, в свою очередь, было связано с капсулой, наполненной жидкостью, в которую были погружены два провода, несущие аудиосигнал. Когда эта капсула раскачивалась туда и обратно, жидкость перетекала с одной стороны на другую, и сопротивление между электродами менялось. Таким образом модулировался аудиосигнал.

Сегодня устройство Trem-Trols является раритетом. Йоханн Буркард (Johann Burkard) разместил запись своего экземпляра DeArmond Тгеш- Тго1 на странице http://bit.ly/tremolo-clip, где вы сможете прослушать этот эффект.

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

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

Рис. 5.62. Принцип действия неоэлектромеханической приставки тремоло

Вы могли бы даже создать неизвестные ранее эффекты тремоло с помощью коллекции дисков с разными формами полосок. На рис. 5.62 показан пример конструкции подобного устройства, а рис. 5.63 — варианты конфигурации диска. А чтобы еще более усложнить эффект, придумайте устройство для автоматической замены таких дисков.

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

Analog Man’s Guide to Vintage Effects («Руководство по звуковым эффектам от компании Analog Man») Тома Хьюза (Tom Hughes) (издательство For Musicians Only Publishing, 2004 год). Это описание всевозможных старинных устройств и педалей.

Рис. 5.63. Разные конфигурации дисков позволят создать различные эффекты тремоло

How to Modify Effect Pedals for Guitar and Bass («Как изменить приставки звуковых эффектов для гитары и бас-гитары») Брайана Уэмплера (Brian Wampler) (издательство Custom Books Publishing, 2007 год). Это исключительно подробное руководство для начинающих. В настоящее время оно доступно только для скачивания, например, на сайте Открытой библиотеки (http://www.openlibrary.org), но вам, возможно, удастся найти выпущенные ранее издания у продавцов подержанной литературы, поискав по названию и имени автора.

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

 

Эксперимент 31. Радио без пайки и без питания

 

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

 

Что вам понадобится

• Жесткий цилиндрический предмет диаметром около 7,5 см, например, пластиковая бутылка из-под воды или витаминов (1 шт.)

• Монтажный провод 22-го калибра (диаметр 0,64 мм), как минимум 18 метров

• Более толстый провод, желательно 16-го калибра (1,3 мм), длиной от 15 до 30 метров (этот провод может быть витой, можно также попробовать провод тоньше, чтобы уменьшить его стоимость, хотя при этом ваш радиоприемник не сможет принимать много станций)

• Полипропиленовый или нейлоновый шнур длиной 3 метра

• Германиевый диод (1 шт.)

• Головной телефон с высоким импедансом (1 шт.)

• Тестовый провод (1 шт.)

• Зажимы «крокодилы» (3 шт.) или дополнительные тестовые провода

Необязательно:

• Источник питания на 9 В (батарея или сетевой адаптер)

• Микросхема-усилитель LM386

• Небольшой динамик (диаметр 5 см подойдет)

Диод и головной телефон можно заказать в каталоге Scitoys Catalog (). Головной телефон с высоким импедансом доступен также на сайте amazon.com.

 

Катушка индуктивности

Прежде всего, вам необходимо сделать катушку индуктивности, которая будет настроена на радиодиапазон с амплитудной модуляцией (AM). Эта катушка будет содержать 65 витков монтажного провода 22-го калибра длиной около 18 метров.

Вы можете намотать такую катушку на любой стеклянный или пластиковый каркас, лишь бы только он имел постоянный диаметр около 7,5 см. Подойдет бутылка из-под воды, если она сделана из не очень тонкого пластика, который легко мнется или деформируется при нажатии.

У меня нашлась пластмассовая баночка из-под витаминов, размер которой оказался в самый раз. На фотографиях вы увидите, что она без этикетки. Я размягчил клей термофеном (слегка, чтобы не расплавить бутылку), а затем снял ее. Остатки клея удалил спиртом (ксилолом).

Рис. 5.64. Отверстия для крепления намотанного провода

Рис. 5.65. Крепление провода в отверстиях

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

Очистите конец монтажного провода от изоляции и закрепите его в одной паре отверстий, как показано на рис. 5.65. Затем намотайте вокруг бутылки пять витков провода и не дайте им размотаться, закрепив небольшим кусочком изоленты. Подойдет лента для герметизации труб или обычный скотч.

Теперь вам необходимо снять около 1,5 см изоляции с провода. Замысел состоит в том, чтобы сделать в этом месте отвод для подключения к обмотке. С помощью инструмента для зачистки проводов надрежьте изоляцию, а затем отведите в стороны пластиковое покрытие (рис. 5.66).

На следующем шаге скрутите зачищенный провод в петельку, чтобы сделать ее легко доступной и предотвратить смыкание изоляции (рис. 5.67).

Только что вы сделали отвод на вашей обмотке. Снимите изоленту, которой вы временно закрепили первые пять витков, и намотайте вокруг бутылки еще пять витков. Снова закрепите их изолентой и сделайте еще один отвод. Всего вам нужно сделать 12 отводов. Совсем не обязательно выравнивать их друг с другом вдоль одной линии. Когда вы сделаете последний отвод, намотайте еще пять витков вокруг бутылки, а затем обрежьте провод. Согните конец в виде крючка размером около 1,5 см, чтобы вы смогли продеть его через пару отверстий в нижней части бутылки. Протяните провод сквозь них, а затем обмотайте снова, чтобы надежно закрепить.

Рис. 5.66. Снятие изоляции на участке длиной около 1,5 см

Рис. 5.67. Скрутка зачищенного участка провода в виде петельки

Моя катушка индуктивности, намотанная на баночке из-под витаминов, показана на рис. 5.68.

Рис. 5.68. Готовая катушка с плотной намоткой вокруг бутылки

Следующий этап — установка антенны, которой может стать отрезок провода как можно толще и длиннее. Если вы живете в доме с выходом во двор, то все просто: откройте окно, выбросьте моток провода 16-го калибра, придерживая свободный конец, а затем выйдите наружу и натяните вашу антенну с помощью пропиленового или нейлонового шнура, который можно купить в любом строительном магазине. Антенну можно закрепить на любых доступных опорах: деревьях, водостоках или столбах. Общая длина провода должна быть 15-30 метров. Там, где антенна проходит через окно, подвесьте ее на другом шнуре. Смысл в том, чтобы установить антенну по возможности дальше от земли или от любого заземленного предмета.

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

 

Молниезащита антенны

Мир вокруг нас полон электричества. Обычно мы не замечаем его, но гроза внезапно напоминает о том, что между землей и облаками существует огромный электрический потенциал.

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

 

Антенна и заземление

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

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

Труба холодного водоснабжения часто рассматривается в качестве хорошего заземления, но (понятное дело!), если такая труба целиком металлическая. Даже если ваш дом оснащен медными трубами, отдельные их участки могли быть когда-то отремонтированы и заменены пластиковыми.

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

Рис. 5.69. Такой головной телефон понадобится вам для детекторного радиоприемника

Теперь вам понадобится пара предметов, которые довольно непросто найти: германиевый диод, который лучше, чем кремниевый, работает при малых напряжениях и токах, с которыми вам придется иметь дело, а также головной телефон с высоким импедансом. Наушники или вкладыши от плеера здесь не подойдут; это должно быть старомодное устройство, подобное показанному на рис. 5.69. Если на конце у него есть разъем, его следует отрезать и аккуратно снять изоляцию с кончика каждого провода.

Детали соединяются с помощью тестовых проводов и зажимов «крокодилов», как показано на рис. 5.70. Собранная мною реальная версия не такая аккуратная, как на иллюстрации, но соединения те же, что и на рис. 5.71. Заметьте, что тестовые провода в нижней части можно подключать к любому отводу катушки. Таким способом вы будете настраивать радиоприемник.

Рис. 5.70. Соединение компонентов детекторного приемника

Рис. 5.71. Конструкция реального устройства в сборе

Если все инструкции соблюдены, вы живете в 40-50 км от радиостанции, использующей амплитудную модуляцию, а ваш слух в пределах нормы, то вы сможете услышать слабый звук в головном телефоне, причем без подачи питания на схему. Этот опыт хорошо известен уже несколько десятилетий, но по-прежнему удивляет и вызывает интерес (рис. 5.72).

Если вы живете очень далеко от радиостанции или не можете повесить достаточно длинную антенну, или если заземление посредственное, то сигнал в наушнике совсем не будет слышен. Не сдавайтесь, подождите до заката. Прием АМ- радиосигнала существенно улучшается, когда солнце не возбуждает атмосферу.

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

Может показаться, что вы получаете нечто даром, но на самом деле вы берете энергию от источника мощности — передающего устройства, которое находится на радиостанции. Передатчик «накачивает» мощность на вышку радиовещания, модулирующую определенную частоту. Когда ваша комбинация катушки и антенны резонирует на этой частоте, выделяемой мощности достаточно, чтобы обеспечить питание головного телефона с высоким импедансом.

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

Рис. 5.72. Истинное удовольствие — поймать радиосигнал с помощью простейших деталей и без дополнительного источника питания

Рис. 5.73. Без источника питания радиоприемник получает от передатчика количество энергии, достаточное лишь для создания слабого звука в головном телефоне

 

Улучшения

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

Вы можете также попробовать усилить сигнал. В идеале для первого каскада следует применить операционный усилитель, поскольку он имеет очень высокий импеданс. Но я решил рассказать об операционных усилителях в книге Make: More Electronics, где у меня достаточно места, чтобы более подробно раскрыть эту тему. Как вариант, можно подать сигнал напрямую на микросхему- усилитель LM386 из эксперимента 29.

На рис. 5.74 показана весьма простая схема. Германиевый диод можно соединить напрямую со входом микросхемы LM3S6, поскольку я не думаю, что вам понадобится регулятор громкости. Проверьте, что вы установили конденсатор емкостью 10 мкФ между выводами 1 и 8, чтобы максимально увеличить коэффициент усиления микросхемы. Даже там, где живу я, приблизительно в 200 км от города Феникс, штат Аризона, мне удалось поймать радиостанцию, вещающую из района Феникса.

Если вы хотите улучшить избирательность, можно добавить конденсатор переменной емкости, чтобы настроить резонанс более точно. Сегодня конденсаторы переменной емкости встречаются редко, но вы можете найти их на том же ресурсе, который я рекомендовал для поиска германиевого диода и головного телефона, на сайте Scitoys Catalog (http://www.scitoyscatalog.com).

Этот ресурс поддерживается предприимчивым человеком по имени Саймон Квеллан Филд (Simon Quellan Field). На его сайте есть много интересных проектов, которые вы можете осуществить в домашних условиях. Одна из его остроумных идей — заменить в радиоприемнике германиевый диод слаботочным светодиодом, подключенным последовательно к батарее 1,5 В. У меня такая схема не заработала, потому что я живу в отдаленной местности, но если вы находитесь рядом с радиопередатчиком, то сможете увидеть, как светодиод изменяет интенсивность свечения при прохождении радиосигнала.

Рис. 5.74. Микросхема-усилитель LM386 позволит слушать радиопередачи через динамик

 

Как работает радио

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

Приблизительно то же самое проделал Гульель- мо Маркони (Guglielmo Marconi) в 1901 году, правда, для создания колебаний ему пришлось применить искровой разрядник, а не таймер 555. Его передачи были довольно примитивными, потому что различались лишь два состояния: включено или выключено. Такой передатчик способен отправить сообщения, использующие азбуку Морзе, и все. Маркони изображен на рис. 5.75.

Рис. 5.75. Гульельмо Маркони, первопроходец в исследовании радио (фотография взята с сайта Wikimedia Commons)

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

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

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

Рис. 5.76. Использование несущей для передачи аудиосигнала

Рис. 5.77. Если к схеме детекторного приемника добавить конденсатор переменной емкости, то избирательность устройства возрастет

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

Вероятно, вам интересно, что же происходит с другими частотами, принимаемыми антенной? Низкие частоты проходят через катушку индуктивности к заземлению. Туда же направляются и высокие, но через конденсатор. Они просто отфильтровываются и не проходят на выход.

Рис. 5.78. Преобразование сигналов в АМ-радиоприемнике

К радиовещанию с амплитудной модуляцией относят диапазон волн с несущей частотой от 300 кГц до 3 МГц. Многие другие частоты выделены для иных целей, например для радиолюбительской связи. Сдав несложный экзамен по радиолюбительской связи, а также имея соответствующее оборудование и хорошо расположенную антенну, вы сможете напрямую общаться с людьми из самых разных мест, не полагаясь на какие-либо коммуникационные сети.

 

Эксперимент 32. Объединение аппаратных средств и программного обеспечения

 

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

 

Что вам понадобится

• Плата Arduino Uno или совместимый аналог (1 шт.)

• USB-кабель с разъемами типа А и В на противоположных концах (1 шт.)

• ПК или ноутбук со свободным USB-портом (1 шт.)

• Стандартный светодиод (1 шт.)

 

Определения

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

Если вы уже сталкивались с микроконтроллерами, то я предложил бы сразу приступить к написанию программы, однако для первоначального изучения микроконтроллера понадобится больше времени и сил, чем требовалось для тех компонентов, с которыми мы имели дело ранее. Сначала нужно понять принцип работы микроконтроллера и выяснить некоторые важные подробности. Следовательно, я должен начать с объяснений и примеров. Затем мы проведем первый эксперимент для знакомства с процессом настройки среды Arduino и выполнения самого простого теста. Эксперименты 33 и 34 вовлекут вас в программирование микроконтроллера Arduino с использованием других компонентов в сочетании с ним.

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

 

Применения микроконтроллеров

Типичный алгоритм работы микроконтроллера:

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

• Выяснить, в какую сторону поворачивается преобразователь.

• Подсчитать число импульсов от преобразователя.

• Выдать команду программируемому резистору с указанием, на сколько равных шагов он должен изменить свой номинал, чтобы увеличить или уменьшить громкость стереосистемы.

• Ждать прихода следующих входных сигналов.

Микроконтроллер смог бы также справиться и с гораздо более сложной задачей, например, с обработкой всех входных сигналов, выработкой выходных сигналов, а также с принятием решений, связанных с системой охранной сигнализации в эксперименте 15. Он мог бы сканировать датчики, включать сигнализацию через реле после периода задержки, принимать и проверять последовательность нажатия клавиш, когда вы захотите отключить сигнализацию — и многое другое.

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

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

Если принять во внимание то, что одна маленькая микросхема может выполнять так много различных задач, то почему мы не используем ее для всего?

 

Микроконтроллер: да или нет?

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

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

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

Написать программу для среды Arduino в принципе несложно, здесь многое зависит от конкретной задачи. Тем не менее, это не одношаговая операция. Программный код необходимо проверить, а процесс отыскания и устранения ошибок может занять много времени. Одна маленькая ошибка будет приводить к непредсказуемым результатам или вообще блокировать работу всей системы. Вам понадобится заново вычитать код, исправить ошибки и попробовать еще раз.

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

В любом случае, чтобы выяснить, хотите ли вы заниматься микроконтроллерами, нужно поэкспериментировать с ними самостоятельно.

 

Одна плата и несколько микросхем

Я начну с основного вопроса. Что такое Arduino? Если вы считаете, что это микросхема, то вы не вполне правы. Каждый продукт с брендом Arduino состоит из небольшой печатной платы, спроектированной компанией Arduino, и содержит микроконтроллер, произведенный абсолютно другой фирмой. На плате Arduino Uno (рис. 5.79) установлен микроконтроллер Atmel ATmega328P-PU. Плата содержит также стабилизатор напряжения, несколько гнезд, которые позволяют вам подключить провода или светодиоды, кварцевый генератор, разъем для подключения питания и USB-адаптер, который реализует обмен информацией между платой и компьютером.

Если вы покупаете микроконтроллер ATmega 328P-PU отдельно у поставщика компонентов, он обойдется вам менее чем в 1/6 от розничной стоимости платы Arduino с той же микросхемой. Почему вы должны столько переплачивать, чтобы получить эту маленькую печатную плату? Ответ заключается в том, что проектирование платы и разработка программного обеспечения для нее не такая уж простая задача.

Рис. 5.79. Плата Arduino Uno, оснащенная микроконтроллером ATmega 328P-PU компании Atmel

Это программное обеспечение обозначают буквами IDE (от англ, integrated development environment — интегрированная среда разработки). После того как вы установите ее на свой компьютер, удобная пользовательская среда позволит вам написать программу и скомпилировать ее: это означает, что среда преобразует инструкции на языке С (который понятен людям) в машинный код (который понятен микросхеме Atmel). Затем вы запишете код в микросхему ATmega.

Если для вас это пока не слишком понятно, подытожу сказанное:

• Arduino — это печатная плата, в которую встроен микроконтроллер Atmel.

• Программное обеспечение IDE компании Arduino позволяет вам написать программу на вашем компьютере.

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

• Среда IDE отправляет этот код микросхеме Atmel, которая хранит его.

Как только ваш код окажется в микросхеме, плата Arduino становится ей больше не нужна. Теоретически вы можете вынуть микроконтроллер ATmega328 и использовать его где-либо — на макетной плате или в другой схеме, где предусмотрен микроконтроллер. Микросхема будет по-прежнему выполнять запрограммированную работу, потому что код хранится в ней.

В реальности же этому препятствует ряд мелочей, о них вы можете узнать, прочитав очень хорошую книгу под названием Make: AVR Programming («Программирование микроконтроллеров серии AVR») Эллиота Уильямса (Elliot Williams). Она расскажет вам, как на самом деле осуществить «пересадку» микросхемы ATmega.

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

Все достаточно просто, если у вас версия Arduino Uno, где микроконтроллер — это микросхема, предназначенная для установки в монтажные отверстия. Вы можете вынуть ее из панельки миниатюрной отверткой и заменить на другую микросхему, вставив ее двумя пальцами. Существует версия Arduino Uno с впаянным микроконтроллером, установленным методом поверхностного монтажа. В этом случае поменять микросхему нельзя.

 

Нужно ли остерегаться подделок?

Теперь, когда я объяснил основы, расскажу о том, как все настроить.

Хотя существует множество моделей Arduino, здесь я отдал предпочтение плате Arduino Uno, и мои инструкции применимы к версии R3 и более поздним.

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

Компании Mouser, Digikey, Maker Shed, Sparkfun и Adafruit — все они продают оригинальные продукты Arduino. В интернет-магазине eBay, тем не менее, вы можете встретить нелицензированные копии плат Arduino за треть их цены. Идентифицировать такой продукт можно по отсутствующему логотипу Arduino. Чтобы отличить оригинальную плату от имитации, посмотрите на логотип, изображенный на рис. 5.80.

Нелицензированные платы полностью законны. Это не покупка пиратского программного обеспечения или музыки. Единственная отличительная черта, контролируемая компанией Arduino, — это ее торговая марка, которую не могут использовать другие производители. (Хотя на деле некоторые мошенники присваивают этот логотип незаконно, но вы поймете, что такие платы не являются оригинальными, потому что они очень дешевые.)

Рис. 5.80. Только платы, произведенные или лицензированные компанией Arduino, могут иметь такой логотип

Замечание

Из-за спора между компанией Arduino и ее бывшим производителем подлинные платы Arduino за пределами США продаются под названием Genuino.

Будет ли плата-имитация работать надежно? Я стал бы доверять платам, которые выпущены компаниями Adafruit, Sparkfun, Solarbotics, Evil Mad Scientist и некоторыми другими. Я не могу купить и перепроверить их все, поэтому вам придется составить собственное мнение об этом, основываясь на отзывах других покупателей и вашем общем впечатлении о поставщике. Но помните о том, что вам будет достаточно одной платы для программирования множества микросхем Atmel. Поэтому, возможно, доплата за приобретение подлинного продукта Arduino не станет такой уж разорительной. Приобретая фирменное изделие, вы помогаете компании продолжать разработку новых продуктов.

Лично я купил оригинальную плату Arduino.

 

Настройка среды Arduino

Будем считать, что к настоящему моменту вы уже купили плату Arduino Uno или ее копию, которую вы считаете надежной. Вам понадобится также стандартный USB-кабель с разъемами типа А на одном конце и типа В на другом, как показано на рис. 5.81. Обычно он не идет в комплекте с платой. Если у вас нет запасного кабеля, то можете взять его от другого устройства, пока выполняете настройку и начальную проверку. Дешевые кабели можно найти в онлайн- магазинах, таких как eBay.

Рис. 5.81. Кабель для подключения платы Arduino к USB- порту компьютера

У вас уже есть плата и кабель, теперь нам понадобится программное обеспечение IDE. Зайдите на сайт Arduino (http://www.arduino.cc) и выберите вкладку Download («Загрузка»). Затем выберите версию среды IDE, которая соответствует вашему компьютеру. В настоящее время доступны версии для OS X, Linux и Windows. Я буду использовать версию 1.6.8, но мои инструкции должны быть применимы и к более поздним версиям. Скачать программное обеспечение можно бесплатно.

Обратите внимание на то, что вам нужен компьютер с операционной системой Windows ХР или более поздней, Mac OS X 10.7 и выше или Linux в 32- или 64-разрядной версии. (Эти требования актуальны на момент написания книги. В будущем компания Arduino может изменить их.)

Описанная далее процедура установки для трех разных операционных систем основана, главным образом, на инструкциях из хорошего руководства для начинающих Getting Started with Arduino («Приступая к работе с Arduino») Массимо Банзи (Massimo Banzi) и Майкла Шилоу (Michael Shiloh). Можно также найти инструкции по установке на таких сайтах, как SparkFun (http://www.sparkfun.com) и Adafruit (). И наконец, на самом сайте компании Arduino (http://www.arduino.cc) также есть необходимые инструкции.

К сожалению, все описания немного отличаются. Например, сайт Arduino рекомендует подключить плату до запуска установщика, а М. Банзи и М. Шилоу в своей книге пишут, что вначале следует запустить установщик, а потом подключить плату. Это осложняет мою задачу, поскольку и те и другие инструкции были написаны в сотрудничестве с разработчиками Arduino.

Далее я поделюсь своими представлениями о том, как установщик будет работать в каждой системе.

 

Установка Arduino в ОС Linux

Похоже, это самое сложное, поскольку существует множество версий данной операционной системы. Вынужден направить вас к руководству по установке на сайте Arduino (http://play- ground.arduino.cc/learning/linux). Сожалею, что не могу вам лично помочь с системой Linux.

 

Установка Arduino в ОС Windows

Я опишу процедуру, которую рекомендует сайт, поддерживаемый компанией Sparkfun.

Не подключайте пока плату. Сначала найдите скачанную программу установки среды IDE. Имя файла может выглядеть как arduino-1.6.8-windows.exe, хотя, когда вы это читаете, номер версии уже почти наверняка изменился. Расширение ехе в конце имени файла может не отображаться, в зависимости от настроек вашего компьютера.

Замечание

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

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

Сначала необходимо принять условия лицензионного соглашения (если вы не согласитесь, то не сможете запустить программное обеспечение). Затем вас спросят, хотите ли вы поместить ярлык на Рабочий стол и в меню Пуск. Разрешите поместить ярлык на Рабочем столе. Меню Пуск — на ваше усмотрение. После этого вас попросят указать папку, в которую будет установлено программное обеспечение IDE. Следует принять предлагаемые настройки по умолчанию.

Если вы такой же «динозавр», как и я, предпочитающий версию ХР (а в действительности нас таких миллионы), то вы можете увидеть предупреждение, показанное на рис. 5.82. Точный вид зависит от вашей версии Windows. Проигнорируйте это предупреждение, нажав кнопку Все равно продолжить (Continue anyway). Если у вас спросят разрешения установить драйверы устройства, нажмите кнопку Да (Yes).

Рис. 5.82. Пользователи старой операционной системы WinXP могут проигнорировать это предупреждение

Замечание

В операционной системе Windows 8 служба безопасности не позволит вам установить неподписанные драйверы устройств. Такой проблемы нет у современных версий установщика Arduino IDE, но если у вас каким-либо образом оказалась старая версия, вы можете поискать решение в сервисе Google по запросу sparkfun disable driver signing, который должен привести вас в раздел сайта Sparkfun, где содержатся полезные сведения по этой теме.

После установки программного обеспечения подключите плату Arduino к компьютеру с помощью USB-кабеля.

Круглый разъем питания на плате Arduino оставьте неподключенным, поскольку плата соединена с компьютером через USB-порт и получает питание по USB-кабелю. Примите во внимание то, что более короткий и толстый кабель уменьшает падение напряжения. Если вы пользуетесь ноутбуком, в особенности старой модели, он может ограничивать питание через USB- порт до 250 мА. Даже на настольном компьютере, который рассчитан на выдачу тока 500 мА по USB-кабелю, этот ток может быть разделен между тремя или четырьмя USB-портами. Такие устройства, как внешний жесткий диск, могут потреблять значительное количество энергии.

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

Найдите ярлык среды IDE. Он называется Arduino, и установщик поместил его на Рабочий стол. Если вы не хотите, чтобы он был на Рабочем столе, перетащите его в другое место. Дважды щелкните мышью по ярлыку, чтобы запустить среду Arduino IDE.

В открывшемся окне раскройте меню Инструменты (Tools), перейдите к пункту Порт (Ports) (в версии для Mac этот пункт теперь называется Serial Ports («Последовательные порты»)), и вы увидите список последовательных портов вашего компьютера. Они называются СОМ1, COM2 и т. д.

Что такое последовательный порт? У персональных компьютеров первых выпусков не было USB-разъемов. Они использовали «протокол последовательной передачи данных» и D-образные разъемы, а компьютер отслеживал активный разъем, присваивая ему «номер порта». Эта система до сих пор встроена в ОС Windows, хотя прошли уже десятилетия с момента ее появления, а сам протокол редко встречается в домашних приложениях.

Вам нужно узнать лишь следующее: удалось ли среде Arduino IDE и ОС Windows согласовать номер порта, который был назначен плате Arduino Uno. В идеале, если выбрать пункт меню Инструменты | Порт (Tools | Ports) в среде IDE, то вы увидите плату Uno в списке, она будет отмечена «галочкой», и все окажется в порядке. Если это так, то пропустите следующий раздел и перейдите далее к разделу «Программа Blink».

 

Поиск и устранение неисправностей (Windows)

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

• В подменю Порт (Ports) среды Arduino IDE вы можете увидеть, что плата Arduino Uno есть в списке, но она не отмечена флажком. Вместо этого может быть отмечен другой порт. Попробуйте указать правильный порт. Вы можете увидеть предупреждение, если среда IDE не одобряет используемую плату Uno. Проигнорируйте это предупреждение, установите флажок Не показывать это снова (Don’t show me this again) и переходите к разделу «Программа Blink» этой главы.

• Порт, обозначенный как Arduino Uno, может отсутствовать в списке. В таком случае запишите названия перечисленных СОМ- портов. Закройте меню среды IDE. Отключите плату Arduino Uno. Подождите пять секунд. Снова откройте подменю Порт (Ports) и посмотрите, какой COM-порт пропал. Закройте подменю. Подключите плату Arduino снова. Откройте заново подменю. Щелкните мышью по названию порта, который появился, чтобы установить на нем флажок. Переходите к разделу «Программа Blink».

Система Windows позволяет проверить настройки порта. В меню Пуск выберите пункт Справка и поддержка. В открывшемся окне введите в строке поиска «Диспетчер устройств». Он должен оказаться первым в результатах поиска. Запустите Диспетчер устройств. Если у вас установлена система Windows ХР, будет выведен список портов. В более поздних версиях Windows, чтобы открыть список портов в Диспетчере устройств, необходимо выбрать пункт меню Вид | Показать скрытые устройства.

Вы должны увидеть в этом списке Arduino Uno. Если рядом с названием стоит желтый кружок или восклицательный знак, щелкните по нему правой кнопкой мыши, чтобы узнать, в чем проблема.

Если система Windows не может найти драйвер устройства для вашей платы, поищите его в папке Arduino, которая содержит все извлеченные установщиком файлы.

Еще одна известная проблема с платой Arduino Uno и портами Windows заключается в том, что среда IDE может не работать, если у вас уже назначено более девяти портов. Такое бывает редко, но если вы столкнетесь с этой проблемой, попробуйте отменить назначение некоторых портов или вручную прописать свободный порт, который имеет известный номер.

Если вы по-прежнему испытываете трудности, перейдите к разделу «Если проблемы остаются» данный главы.

 

Установка на компьютере Mac

После загрузки установщика IDE найдите созданный компьютером ярлык, дважды щелкните по нему, и вы увидите образ диска, который содержит программное обеспечение Arduino IDE. Вы можете перетащить его в папку Приложения (Applications).

Теперь подключите Arduino к компьютеру с помощью USB-кабеля.

Замечание

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

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

Если откроется окно с сообщением о том, что обнаружен «новый сетевой интерфейс», нажмите кнопку Настройки сети (Network Preferences), а затем кнопку Применить (Apply). Если плата Arduino Uno обозначена как не настроена (not configured), не обращайте внимания. Закройте это окно.

Дважды щелкните мышью по ярлыку среды Arduino IDE, который вы перетащили в папку Приложения (Applications). Для соединения с платой Arduino Uno вам необходимо выбрать правильный порт. В меню Инструменты (Tools) среды IDE выберите пункт Последовательный порт (Serial Port) и укажите в раскрывающемся списке вариант /dev/cu.usbmodemfal41 (ИЛИ порт с подобным названием).

Если все получилось так, как описано здесь, можете перейти к разделу «Программа Blink».

 

Если проблемы остаются

Эта книга может переиздаваться без изменений в течение некоторого времени. По крайней мере, я на это надеюсь. А вот программное обеспечение меняется очень часто. Возможно, мои инструкции по установке уже устареют, когда вы будете читать эти строки.

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

Что делать? Лучший вариант — зайти на сайт компании Arduino или компании Sparkfun и выполнить процедуру установки, приведенную там. Сайт гораздо проще и быстрее обновить, чем книгу.

 

Программа Blink

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

Рис. 5.83. Окно, которое по умолчанию открывается при запуске среды Arduino Uno

Перед началом работы вы должны проверить, правильно ли среда IDE определила версию платы, которая подключена к компьютеру.

В основном окне среды IDE зайдите в меню Инструменты (Tools), откройте подменю Плата (Board) и убедитесь, что плата Arduino Uno отмечена точкой, как показано на рис. 5.84. Если это не так, щелкните по ней мышью, чтобы выбрать ее.

Теперь вы готовы подавать команды плате Arduino. В верхней части рабочего пространства основного окна среды IDE вы увидите слово sketch («эскиз»), за которым следует текущая дата и буква «а». Что это за «эскиз»? Рисунок, который вы собираетесь нарисовать?

Рис. 5.84. Когда вы используете плату Arduino Uno, она должна быть отмечена точкой в подменю Плата

Нет, в мире Arduino «эскиз» означает то же, что и «программа». Возможно, это вызвано тем, что разработчики не хотели, чтобы людей пугала мысль о необходимости программировать компьютер. Вероятно, подобным же образом и Стив Джобс, когда он был еще жив, ощутил, что пользователи портативных устройств чувствуют себя более комфортно, когда он называет программы приложениями. Возможно, Джобс был прав, но я не думаю, что умельцев так легко напугать. На самом деле, я думаю, что они желают программировать компьютеры. А иначе зачем тогда читать эти строки?

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

Теперь мне необходимо напомнить вам последовательность действий, которой мы будем придерживаться. Вначале вы напишете программу в окне среды IDE. Затем вы скомпилируете ее, выбрав соответствующий пункт меню, чтобы преобразовать текст в инструкции, понятные для микроконтроллера. Затем вы загрузите код программы в плату Arduino, а после этого плата автоматически запустит программу.

Окно среды IDE на моем компьютере по умолчанию содержит некоторый текст, показанный на рис. 5.83. В последующих версиях среды все может быть организовано немного иначе, но принцип останется прежним. Вы увидите какие-либо строки, в начале которых стоят два слеша:

// put your setup code here, to run once.

Это строка комментариев. Она предназначена для людей — объяснить, что происходит в том или ином фрагменте программы.

Замечание

Когда написанная вами программа компилируется для микроконтроллера, компилятор будет игнорировать все строки, начинающиеся символами //.

Следующая строка гласит:

void setup () {

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

Слово void говорит компилятору, что эта процедура не будет генерировать какой-либо числовой результат или выдавать значение на выходе.

Конструкция setup() указывает, что следующая процедура должна выполняться только один раз, в самом начале.

Обратите внимание на фигурную скобку { после команды setup().

Внимание!

Каждая законченная последовательность операторов на языке С должна быть заключена между символами { и }.

Поскольку символ { должен всегда сопровождаться символом }, то в открытом окне программы где-то должен быть знак }. Да, он действительно есть, двумя строками ниже. Между этими символами нет ничего, и значит, в этой процедуре нет инструкций. Вы должны будете их написать.

Замечание

Не имеет значения, находятся ли символы { и } на одной или на разных строках. Компилятор Arduino игнорирует разрывы строк и последовательности из двух и более пробелов.

Теперь пришло время написать что-нибудь в пустой строке под сообщением put your setup code here. Попробуйте следующее:

pinMode(13, OUTPUT);

Вы должны ввести команду в точности так. Компилятор не обнаружит опечатки. Кроме того, поскольку язык С чувствителен к регистру, вы должны различать прописные и строчные буквы. Команда pinMode должна быть написана как pinMode, а не как pinmode ИЛИ Pinmode. слово OUTPUT должно быть написано как OUTPUT, а не как output или Output.

pinMode — это команда плате Arduino Uno, сообщающая о том, как использовать один из ее выводов. Этот вывод может либо получать данные как вход, либо отправлять данные как выход. Число 13 — это номер контакта, и если вы осмотрите свою плату, то обнаружите, что один из маленьких разъемов идентифицирован номером 13, рядом с желтым светодиодом. Я выбрал 13-й контакт произвольно.

Точка с запятой указывает на конец инструкции.

Внимание!

В конце каждой команды должна быть точка с запятой. Всегда. Не забывайте об этом!

Теперь перейдем к пустой строке под сообщением, которое гласит:

// put your main code here, to run repeatedly

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

void loop() {

digitalWrite(13, HIGH);

delay(100);

digitalWrite(13, LOW);

delay(100);

}

Если вы ранее уже имели дело с платой Arduino, то тяжко вздохнете, подумав: «Опять эта проверка мигания светодиодов!» Да, это так, и именно поэтому я назвал данный раздел «Программа Blink». Это программа, которую почти все используют для предварительной проверки (хотя я изменил время задержки по причинам, которые станут ясными далее). Порадуйте меня, набрав эту программу в окне IDE. Очень скоро мы перейдем к более сложным проектам.

Возможно также, вы смутно догадываетесь, что означают некоторые команды.

Команда void означает то же, что и раньше.

Команда loop() — это инструкция, приказывающая плате Arduino повторять какое-либо действие снова и снова. Какое действие? Процедуру, указанную между фигурными скобками.

Команда digitalWrite служит для отправки чего-либо с какого-то контакта. Какого? Я указал 13, потому что его режим был определен ранее.

Замечание

Вы не сможете использовать цифровой вывод, пока заранее не укажете, в каком режиме он должен функционировать.

Что должен сделать этот вывод? Перейти в высокое состояние (HIGH).

В конце инструкции не забудьте точку с запятой.

Команда delay заставляет плату Arduino немного подождать. Сколько? Число 100 означает 100 миллисекунд. В одной секунде 1000 миллисекунд, и поэтому плата Arduino подождет одну десятую секунды. В этот период времени вывод 13 будет оставаться в высоком состоянии.

Думаю, вы сможете догадаться, что означают следующие две строки.

Совсем скоро вы сможете запустить эту программу. Но сначала вернитесь к плате и вставьте выводы светодиода между разъемом 13 и разъемом, обозначенным GND, рядом с ним.

Замечание

Убедитесь в том, что короткий вывод светодиода находится в гнезде GND. Светодиоду не нужен токоограничительный резистор, поскольку тот встроен в разъем 13.

Маленький желтый светодиод на моей плате уже мигал по умолчанию, как только я подключил плату. Светодиод, который я вставил только что, также начинает мигать, поскольку желтый светодиод, который установлен на плате с помощью поверхностного монтажа, тоже подключен к выводу 13.

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

 

Проверка и компилирование

Далее вы должны проверить, не допустили ли вы какую-либо опечатку. В меню Скетч (Sketch) выберите команду Проверить/Компилировать (Verify/Compile), как показано на рис. 5.85. Среда IDE проверит ваш код и выдаст сообщение, если обнаружит какую-то проблему.

Можно проверить, как компилятор реагирует на ошибки. В листинге программы измените pinMode на piMode, а затем выполните команду Проверить/Компилировать (Verify/Compile), чтобы увидеть, что произойдет.

Рис. 5.85. Прежде чем отправлять свою программу на плату Arduino, выполните команду Проверить/Компилировать

В нижней части окна IDE, в черной области, появится сообщение об ошибке. Вы можете растянуть эту область, перетаскивая мышью верхнюю границу так, чтобы можно было без прокрутки увидеть больше двух строк. Сообщение об ошибке, которое получил я, гласит «piMode was not declared in this scope» («переменная piMode не была описана в этой области действия»).

Видите ли, в языке С есть зарезервированные слова и определенные функции, которые имеют особое значение. Пару из них — digitaiWrite и delay — вы уже использовали.

Но переменная piMode не существует ни как зарезервированное слово, ни как определенная функция, и поэтому компилятор сообщает, что вы ее не объявили, чтобы указать, что она собой представляет.

Исправляйте текст вашей программы до тех пор, пока команда Проверить/Компилировать (Verify/Compile) не перестанет находить ошибки.

 

Загрузка и запуск

Теперь в меню Скетч (Scetch) выберите команду Загрузка (Upload). Лично я всегда представляю, что я переписываю программу с моего большого компьютера на маленький компьютер Arduino, но все называют этот процесс загрузкой, и поэтому будем считать, что так оно и есть.

Если загрузка прошла успешно, то чуть выше черной области сообщений об ошибках вы увидите сообщение Загрузка завершена (Done Uploading).

Если же процесс загрузки слишком долго не завершается — это плохо. Это означает, что по- прежнему есть какие-то проблемы со связью, возможно, потому что конфигурация СОМ-порта настроена неверно. Вернитесь к приведенному ранее разделу поиска и устранения неисправностей для вашего компьютера. Но вначале сохраните программу. В меню Файл (File) выберите команду Сохранить (Save) и введите имя для своей программы. После того как вы исправите проблемы с COM-портом, вы сможете заново загрузить программу, если необходимо, и попробовать снова.

Если все работает как предполагалось, то теперь встроенный светодиод и ваш светодиод быстро мигают — включаются на одну десятую секунды и выключаются на десятую секунды, в соответствии с инструкциями в вашей программе.

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

Кратко подведем итог тому, что вы уже узнали и что необходимо делать для программирования платы Arduino.

• Создайте новую программу (или «эскиз», как его предпочитает называть среда Arduino).

• Выберите в меню Файл (File) пункт Новый (New), если это необходимо.

• Каждая программа должна начинаться с функции задания конфигурации setup о, которая выполняется один раз.

• Прежде чем что-либо делать с каким-либо контактом платы, вы должны объявить его номер и режим работы, используя команду pinMode.

• Для контакта может быть указан режим INPUT (Вход) или OUTPUT (Выход).

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

• Каждую функцию или блок программы следует заключать в фигурные скобки. Скобки могут быть расположены на разных строках.

• Компилятор игнорирует разрывы строк и дополнительные пробелы.

• Каждая команда функции или блока должна завершаться точкой с запятой.

• Каждая программа Arduino должна содержать функцию loop (после функции setup), которая будет выполняться неоднократно.

• Команда digitalWrite переводит контакт, который настроен на работу в качестве выхода, в состояние HIGH («высокий» уровень) или LOW («низкий» уровень).

• Команда delay говорит плате Arduino ничего не делать в течение указанного интервала времени в миллисекундах (тысячных долях секунды).

Числа в круглых скобках после команды — это параметры, которые говорят о том, как применять данную команду.

Проверьте программу с помощью команды Проверить/Компилировать (Verify/Compile) в меню Скетч (Sketch), прежде чем загрузить ее в плату Arduino.

Вы должны исправить все ошибки, обнаруженные при проверке/компилировании.

Зарезервированные слова — это набор команд, которые понимает плата Arduino. Вы должны вводить их без ошибок. Заглавные и строчные буквы считаются различными.

После того как вы загрузили программу, она начнет работать автоматически, пока вы не отключите питание платы или не загрузите новую программу.

На плате Arduino Uno рядом с USB-разъемом находится кнопка сброса (тактильный переключатель). Когда вы нажимаете ее, плата Arduino сбрасывает все параметры и перезапускает программу.

 

Не забывайте сохранять программный код

Когда вы изменяете вашу программу и загружаете ее в микроконтроллер, новая версия будет записана поверх старой. Другими словами, предыдущая программа будет стерта. Если вы не сохранили ее под другим именем на компьютере, она будет утрачена навсегда. Будьте внимательны, когда загружаете модифицированные программы. Сохраняйте каждую версию на компьютере, присвоив ей новое имя, — это разумная мера предосторожности.

После того как инструкции программы будут загружены в микроконтроллер, извлечь их обратно невозможно.

 

Программирование требует внимания к мелочам

Не знаю, заметили ли вы, что краткая памятка для этого эксперимента оказалась длиннее, чем для всех других экспериментов, где мы работали с отдельными компонентами. При написании программы следует учитывать множество деталей, и вам необходимо все делать предельно аккуратно. Лично мне это нравится, ведь если что-либо сделано безошибочно, то оно будет правильным всегда, и всегда будет работать таким образом. Программы никогда не «изнашиваются». Если вы сохранили их на подходящем носителе, они могут прослужить бесконечно долго. Программы, которые я написал в 80-х годах, теперь спустя 30 лет, будут также работать в окне DOS на моем ПК.

Некоторым людям не по душе скрупулезная работа, они склонны делать опечатки или им не нравятся жесткие требования, которые предъявляет язык программирования (он, например, всегда настаивает, чтобы вы начинали программу с функции setup, даже если у вас нет настройки). Разные люди предпочитают различные аспекты электроники, так и должно быть. Если бы всем хотелось писать программы и никому не нравилось заниматься «железом», то у нас не было бы никаких компьютеров. Какое занятие избрать — решать вам.

Я же продолжу и далее опишу другой эксперимент, в котором плата Arduino функционирует более интересно. Хочу показать вам, как в некоторых случаях микроконтроллер может выполнять задачу проще, чем отдельные компоненты.

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

Вот несколько правил:

• Для работы программы плате Arduino необходимо питание.

• Плате не требуется питание, чтобы хранить программу. Она автоматически сохраняется в микроконтроллере, подобно данным на флэш-носителе.

• Если вы хотите запустить программу, когда плата не соединена с компьютером, то должны подключить источник питания через круглый черный разъем рядом с USB- разъемом на плате.

• Напряжение источника питания может составлять от 7 до 12 В. Его не нужно стабилизировать, потому что плата Arduino снабжена собственным стабилизатором, который превращает входное напряжение в постоянное напряжение 5 В. (Некоторые платы Arduino работают от источника 3,3 В, но не плата Uno.)

• Диаметр разъема источника питания равен 2,1 мм, его центральный вывод положительный. Вы можете купить сетевой адаптер на 9 В с таким разъемом.

• Если вы подадите внешнее питание, когда плата Arduino подключена с помощью USB- кабеля, то она будет автоматически использовать внешний источник питания.

• Вы можете отключить плату Arduino от USB-кабеля в любой момент, не беспокоясь о функции «Безопасного удаления оборудования» , которая присутствует в некоторых версиях ОС Windows.

 

Разновидности микроконтроллеров

На заводах и в лабораториях многие процессы повторяются. Датчики температуры могут управлять нагревательным прибором. Датчик оборотов может регулировать скорость вращения электродвигателя. Микроконтроллеры идеальны для таких однообразных задач.

Компания General Instrument представила один из первых микроконтроллеров в 1976 году и назвала его PIC — Programmable Intelligent Computer (Программируемый интеллектуальный компьютер) или Programmable Interface Controller (Программируемый контроллер интерфейса), в зависимости от того, какому историческому источнику вы доверяете больше. В дальнейшем General Instrument продала бренд PIC другой компании, Microchip Technology, которая владеет им по сей день.

Плата Arduino основана на микроконтроллерах Atmel, но PIC-контроллеры по-прежнему являются альтернативным вариантом. Существует упрощенная учебная версия таких контроллеров, лицензированная компанией Revolution Education Ltd. Они назвали свой модельный ряд микросхем PICAXE без каких-либо видимых рациональных причин, наверное, решив, что такое название красиво звучит.

Микроконтроллеры PICAXE поставляются с собственной средой IDE, в которой принят другой язык программирования — BASIC. В некоторых случаях он проще, чем С. Другая серия микроконтроллеров, BASIC Stamp, также использует язык BASIC с дополнительными, более функциональными командами.

Если вы поищете микроконтроллеры PICAXE на сайте Wikipedia, то найдете очень подробную информацию обо всех их возможностях.

Я полагаю, что это более понятное описание, чем на официальном сайте компании.

В отличие от платы Arduino вам не придется покупать специальную плату для программирования микросхем PICAXE. Все, что вам нужно — это специальный USB-кабель, помимо соответствующего программного обеспечения, которое вы можете скачать бесплатно.

Первое издание моей книги содержит некоторую вводную информацию о продукции PICAXE. Если вам интересно, то вы можете обратиться к этой книге.

 

Микроконтроллеры: «за» и «против»

Теперь, когда вы изучили некоторые основы, мне необходимо привести аргументы, которые могут повлиять на ваше решение о том, использовать ли микроконтроллер в каком-либо проекте или нет.

 

Долговечность

Для флэш-памяти, которая хранит программу в микроконтроллере ATmega328, производитель гарантирует 10 000 операций чтения-записи с автоматической блокировкой испорченных ячеек памяти. Это число кажется довольно большим, и мы можем надеяться, что микроконтроллер прослужит нам очень долго. Тем не менее, мы пока достоверно не знаем, такой же ли у них срок службы, как у старых логических микросхем, которые продолжают работать спустя 40 лет после их производства. Имеет ли это значение? Решать вам.

 

Моральный износ

Микроконтроллеры, как и технологии программирования, развиваются очень быстро. Когда я готовил первое издание этой книги, плата Arduino была сравнительно новой, а ее будущее — неопределенным. Теперь она доминирует в области любительской электроники, но как изменится ситуация через пять лет? Никто не знает. Например, продукт Raspberry Pi представляет собой целый компьютер в одной микросхеме. Никто не может предсказать, придет ли он или что-то еще на смену плате Arduino.

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

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

 

Микроконтроллеру необходимы внешние компоненты

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

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

С учетом всего этого, резюмируем плюсы и минусы.

 

Преимущества дискретных компонентов

• Простота.

• Немедленные результаты.

• Нет необходимости в языках программирования.

• Низкая стоимость для несложных устройств.

• Устоявшиеся технологии применения.

• Лучше подходят для аналогового применения, например, для аудио.

• По-прежнему необходимы в схемах с микроконтроллерами.

 

Недостатки дискретных компонентов

• Способность выполнять только одну функцию.

• Трудности при разработке устройств, выполняющих сложные логические функции.

• Сложности при масштабировании. Большие схемы трудно собрать.

• Изменения в схеме могут оказаться сложными или даже невозможными.

• С ростом числа компонентов в схеме увеличивается энергопотребление.

 

Преимущества микроконтроллеров

• Исключительно универсальны, способны выполнять множество функций.

• Легкость при расширении или при изменении схемы (просто перепишите программный код).

• Обширные бесплатные интернет-библиотеки приложений.

• Идеальны для приложений, включающих сложную логику.

 

Недостатки микроконтроллеров

• Довольно дороги для применения в небольших схемах.

• Требуют основательных навыков программирования.

• Процесс разработки занимает много времени: создание кода, его проверка и исправление ошибок, переустановка — все это помимо выявления и устранения неисправностей компонентов схемы.

• Стремительно развивающиеся технологии требуют непрерывного обучения.

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

• Большая сложность означает более высокую вероятность появления неисправностей.

• Необходим стационарный компьютер или ноутбук, а также хранилище данных для программ. Информация может быть случайно утрачена.

• Необходим стабилизированный источник питания (обычно 5 или 3,3 В постоянного тока), как для логических микросхем. Величина выходного сигнала ограничена — 40 мА или меньше. Невозможность приводить в действие реле или динамик подобно таймеру 555. Если вам требуется большая мощность, следует предусмотреть дополнительную управляющую микросхему.

 

Подведение итогов

Теперь я готов ответить на вопрос: «Что следует предпочесть — микроконтроллеры или традиционные дискретные компоненты?»

Мой ответ таков: вам понадобится и то, и другое. Именно поэтому я включил микроконтроллеры в книгу, которая в основном рассказывает о дискретных электронных компонентах.

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

 

Эксперимент 33. Исследуем окружающий мир

 

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

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

Микроконтроллер ATmega 328, установленный на плате Arduino Uno, может справиться с этой задачей, поскольку шесть из его выводов относятся к числу «аналоговых входов». Сигнал, поданный на эти входы, не оценивается как «логически высокий» или как «логически низкий». Он преобразуется внутри микросхемы с помощью аналого-цифрового преобразователя или АЦП.

В 5-вольтовой версии платы Arduino аналоговый сигнал на входе должен быть в диапазоне от О до 5 В. На самом деле, верхний предел можно изменять, что вносит некоторую сложность, поэтому я оставлю рассказ об этом на потом. Терморезистор не вырабатывает никакого напряжения, он только изменяет свое сопротивление. Так, необходимо придумать, каким образом изменение сопротивления обеспечит изменение напряжения.

Как только эта проблема будет решена, АЦП внутри микроконтроллера сможет преобразовать напряжение на аналоговом выводе в числовое значение в диапазоне от 0 до 1023. Почему именно такой числовой диапазон? Потому что его можно выразить десятью двоичными цифрами, а число разрядов АЦП в микроконтроллере на плате Arduino равно десяти.

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

Эта последовательность операций, начиная с терморезистора и заканчивая числовым значением, проиллюстрирована на рис. 5.86.

Рис. 5.86. Упрощенная последовательность обработки сигнала от терморезистора

Следующий эксперимент покажет, как это осуществить.

 

Что вам понадобится

• Макетная плата, монтажный провод, инструмент для зачистки проводов, кусачки, тестовые провода, мультиметр

• Терморезистор номиналом 10 кОм, с допуском 1 или 5% (1 шт.) (Он должен быть типа NTC, что означает «сопротивление падает по мере увеличения температуры». Терморезистор типа РТС ведет себя противоположным образом.)

• Плата Arduino Uno (1 шт.)

• Ноутбук или настольный компьютер со свободным USB-портом (1 шт.)

• USB-кабель с разъемами типа А и В на противоположных концах (1 шт.)

• Резистор номиналом 6,8 кОм (1 шт.)

• Исследование терморезистора

Первый шаг — изучить, что собой представляет терморезистор. Он имеет очень тонкие выводы, потому что они не должны проводить тепло к верхней части или забирать его оттуда, поскольку там располагается p-n-переход, реагирующий на изменение температуры. Эти выводы, вероятно, слишком тонкие, чтобы надежно фиксироваться в макетной плате, поэтому я предлагаю вам зажать их парой тестовых проводов с «крокодилами» и подключить к щупам мультиметра, как показано на рис. 5.87.

Терморезистор, который я рекомендую, имеет номинал 10 кОм. Это максимальное значение, когда компонент становится совсем холодным. Его сопротивление меняется слабо, пока температура не повысится до 25 °С. После этого сопротивление будет уменьшаться быстрее.

Вы можете проверить это с помощью мультиметра. При комнатной температуре терморезистор должен иметь сопротивление около 9,5 кОм. Теперь зажмите его между большим и указательным пальцами. Поскольку он поглощает тепло вашего тела, его сопротивление снижается. При температуре тела (приблизительно 37 °С) сопротивление составит около 6,5 кОм.

Как преобразовать этот диапазон сопротивлений в необходимый для микроконтроллера диапазон напряжений от 0 до 5 В?

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

Рис. 5.87. Проверка терморезистора

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

 

Преобразование диапазона

Самый простой способ преобразовать сопротивление терморезистора в значение напряжения — подобрать резистор, номинал которого приблизительно равен среднему сопротивлению терморезистора в интересующем нас температурном диапазоне. Соедините такой резистор и терморезистор последовательно, чтобы создать делитель напряжения, подайте 5 В на один конец и О В на другой, а затем измерьте напряжение в средней точке между компонентами, как показано на рис. 5.88.

Обычно, чтобы настроить такую схему, вам понадобилось бы подключить стабилизатор, обеспечивающий напряжение 5 В. Однако на плате Arduino есть встроенный стабилизатор напряжения и он выдает на выходе ровно 5 В (см. рис. 5.79). Вы можете сделать отвод от этого выхода и подключить его к макетной плате с помощью перемычки. Вам понадобится также сделать отвод от одного из заземляющих выходов платы Arduino и таким же образом подключить его к макетной плате.

Рис. 5.88. Самая простая схема для снятия напряжения при изменении сопротивления терморезистора

Когда я пробовал это сделать и изменял температуру терморезистора с 25 до 37 °С, мультиметр показывал напряжение от 2,1 до 2,5 В. Вам предстоит самостоятельно проделать аналогичный эксперимент, чтобы проверить мои значения.

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

На рис. 5.89 проиллюстрировано преобразование входного напряжения в цифровой эквивалент. Диапазон от 2,1 до 2,5 В обозначен темной вертикальной полосой. Его можно преобразовать в число от 430 до 512, при этом разница составит 82 — это всего лишь небольшая часть полного диапазона от 0 до 1023.

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

Рис. 5.89. График преобразования входного напряжения на плате Arduino в значения на выходе АЦП

Мы неизбежно ухудшим детализацию. Было бы неплохо, если бы мы каким-либо образом смогли преобразовать наше напряжение в цифровой диапазон из 500 значений, а не из 82.

Одним из способов добиться этого могло бы стать усиление напряжения, но для этого потребуется дополнительный компонент, например, операционный усилитель. Еще понадобятся резисторы в цепи обратной связи, и вся схема станет сложнее. Сама идея микроконтроллера сохранить простоту!

Есть еще одно решение — воспользоваться функцией платы Arduino, задающей нижнее максимальное напряжение для диапазона. Но для этого нужно подать эталонное значение нового максимального напряжения на один из контактов. Чтобы создать это напряжение, мне понадобился бы еще один делитель напряжения, а затем пришлось бы рассчитать новое преобразование входного напряжения в значения АЦП. В общем, я решил сначала написать простую программу, добиться ее правильного функционирования, а потом уже заняться улучшениями.

Поразмыслив немного, я понял, что диапазон из 82 значений будет пригоден для представления температур в пределах от 25 до 37 °С. При этом точность каждого шага АЦП составит примерно 0,15 градуса. Этого недостаточно для медицинского термометра, но вполне хватит для измерения комнатной температуры.

 

Сборка макета

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

Есть три способа соединить все компоненты:

• Приобрести устройство под названием protoshield, похожее на миниатюрную макетную плату, которая устанавливается поверх платы Arduino Uno и подключается к ее разъемам. Мне такой способ не нравится, потому что я предпочитаю собирать прототип на обычной макетной плате.

Рис. 5.90. Подключение терморезистора к плате Arduino

Рис. 5.91. Собранный макет схемы с терморезистором и платой Arduino

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

• Установить терморезистор и резистор на обычной макетной плате, а затем подать сигнал с терморезистора на плату Uno по проводу таким же способом, как вы подавали положительное напряжение и заземление от платы Arduino на макетную плату. Это не слишком изящно, но, похоже, так делают многие. Если вы отладили программу и окончательно переписали ее в микроконтроллер, то затем можно вынуть микросхему и установить в более удобном месте.

На рис. 5.90 показано расположение элементов, на рис. 5.91 — фотография макета установки. Вынужден признать, что здесь как раз тот случай, когда удобны маленькие провода с разъемами на концах, хотя я до сих пор не вполне доверяю им.

 

А где же выход у схемы?

Теперь вы настроили все для преобразования аналогового входного сигнала в числовое значение. Но погодите, здесь чего-то не хватает. У схемы нет выхода!

В идеальном мире плата Arduino Uno продавалась бы с маленьким алфавитно-цифровым дисплеем, чтобы вы могли использовать ее как настоящий компьютер. В принципе, вы можете раздобыть дисплей, который будет работать с платой Arduino, но опять-таки это внесло бы дополнительную сложность. Микроконтроллер не является устройством «подключи и работай». Чтобы отправлять информацию на дисплей, микроконтроллер нужно сначала запрограммировать.

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

 

Гистерезис

Предположим, мы нагреваем теплицу, температура в которой должна составлять 30 °С. Допустим, напряжение комбинации «терморезистор-резистор» при этой температуре составляет 2,3 В. Отыщите его на графике (см. рис. 5.89), и вы увидите, что АЦП внутри микроконтроллера преобразует это напряжение в числовое значение около 470.

Таким образом, наш порог — 470. Если значение снижается до 469, мы включаем нагрев (или имитируем его включением светодиода). Если значение возрастает до 471, мы выключаем нагрев.

Однако, постойте. Имеет ли это смысл? Ведь даже самое небольшое повышение температуры, воспринимаемое терморезистором, будет включать светодиод, а незначительное понижение будет выключать его. Система будет все время включаться и выключаться.

Обычный термостат не реагирует на небольшие изменения температуры, когда кто-то открывает или закрывает дверь. Когда он включается, он остается включенным до тех пор, пока температура не станет чуть выше установленного значения. Затем, когда он прекращает нагрев, он остается выключенным, пока температура не опустится немного ниже указанного значения.

Такое поведение называется гистерезисом, и я расскажу о нем более детально в связи с компонентом, который называется компаратором, в моей следующей книге — продолжении данной: Make: More Electronics.

Как мы можем реализовать гистерезис в программе для микроконтроллера? Нам необходим более широкий диапазон значений, чем числа от 469 до 471. Программа могла бы описывать следующее: «Если светодиод включен, пусть он остается в этом состоянии, пока значение температуры не превысит 490. Затем его следует выключить». А также: «Если светодиод выключен, пусть он будет в таком состоянии, пока значение температуры не упадет ниже 460. Затем его надо включить».

Сможем ли мы это сделать? Да, очень легко. Программа, представленная в листинге 5.1, функционирует именно так. Протестировав эту программу, я сделал снимок экрана в среде Arduino IDE, и поэтому у меня есть веские основания полагать, что она работает.

Листинг 5.1

Эта программа содержит также некоторые новые понятия — но для начала введите ее в среду IDE. Не обязательно включать все строки комментариев, которые я добавил только для пояснения.

В более коротком варианте программы (листинг 5.2) строки комментариев опущены.

Листинг 5.2

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

Подключите плату Arduino, загрузите программу, и если температура вашего терморезистора ниже 30 °С, должен зажечься желтый светодиод.

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

Но как же работает эта программа?

 

Строка за строкой

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

Строка int digitemp = 0; означает, что объявил переменную с именем digitemp. Она является целочисленной (целым числом) и принимает значения начиная с нуля.

В строке int ledstate = 0; я объявил еще одну целочисленную переменную, чтобы отслеживать состояние светодиода на плате (включен или выключен). Нельзя попросить микроконтроллер посмотреть на светодиод и сказать, в каком он состоянии, поэтому я должен самостоятельно предусмотреть все требуемые действия.

Команда pinMode (13, OUTPUT) в секции setup сообщает микроконтроллеру о том, что следует сконфигурировать контакт 13 как выход. Задавать режим работы контакта А0 в качестве входа нет необходимости, потому что аналоговые выводы являются входами по умолчанию.

Теперь перейдем к основной части программы, К циклу. Сначала я задал команду analogRead, чтобы микроконтроллер прочитал состояние аналогового порта. Какого? Я указал 0, что означает аналоговый порт А0. В него вставлен проводник от моей макетной платы.

Что я собираюсь делать с информацией от АЦП после того, как она будет считана с порта? Есть только одно разумное место ее размещения: в переменной digitemp, которую я создал для этой цели.

Теперь, когда переменная digitemp содержит значение, я могу проверить ее. Если нагреватель включен (светодиод горит) И значение digitemp больше 490, то пора выключить нагреватель. Условие «если» проверяется следующим образом:

if (ledstate == 1 && digitemp > 490)

Двойной знак равенства (==) означает «выполнить сравнение и выяснить, одинаковы ли эти два значения». Одиночный знак равенства означает другую операцию: «назначить данное значение переменной».

Двойной символ & — это «логическое И». Да, здесь у нас применяется булева логика, как и в логическом элементе И. Но вместо того чтобы подключать микросхему, мы просто пишем строку кода.

Символ > означает «больше, чем».

Проверка условия «если» помещена в круглые скобки. Если утверждение в круглых скобках истинно, то микроконтроллер выполняет процедуру, расположенную между фигурными скобками. В этой процедуре с помощью команды ledstate = 0 записан тот факт, что светодиод будет выключен. Команда digitalWrite (13, LOW); в действительности выключает светодиод.

Вторая проверка условия «если» очень похожа, за исключением того, что она применяется, если светодиод выключен, а температура сильно снизилась. Тогда мы зажигаем светодиод.

Наконец, введена задержка на десятую долю секунды, поскольку нам не нужно проверять температуру чаще.

Вот и все.

 

Нюансы программирования

Я объяснил здесь лишь некоторые синтаксические структуры, например, проверку условия «если» и двойной знак равенства, а также логический оператор && без перечисления всего списка конструкций, которые есть в языке С. Необходимые дополнительные сведения вы всегда сможете найти онлайн.

Запомните несколько моментов, относящихся к программе:

• Строки набраны с отступами, чтобы улучшить восприятие логической структуры программы. Компилятор игнорирует дополнительные пробелы, поэтому вы можете спокойно добавлять их в любом количестве.

• Для удобства среда IDE выделяет ошибки в тексте программы цветом.

• Когда вы присваиваете имя переменной, допустимо любое сочетание букв, цифр и символа подчеркивания — при том условии, что эта комбинация не совпадает с зарезервированным словом в языке С. Например, нельзя создать переменную с именем void.

• Кому-то нравится начинать названия с прописной буквы, а кому-то — со строчной. Выбор за вами.

• Каждая переменная должна быть объявлена в начале программы, иначе компилятор выдаст ошибку.

• Целочисленная переменная (объявленная при помощи ключевого слова int) может принимать значение от -32 768 до +32 767. Язык С в этом микроконтроллере разрешает использовать переменные, которые имеют более широкий диапазон значений или которые могут быть дробными. Но до эксперимента 34 большие числа не понадобятся.

Начальные справочные сведения о языке вы можете найти на главном сайте компании Arduino. Выберите вкладку Learning (Обучение), а затем в раскрывающемся меню укажите пункт Reference (Справка). Можно также открыть меню Помощь (Help) в среде Arduino IDE и выбрать пункт Справочник (Reference).

 

Усовершенствование программы

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

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

Затем я добавил бы еще одну процедуру в цикл, в которой микроконтроллер проверял положение движка потенциометра и переводил его в числовую форму.

В результате получалось бы число в диапазоне от 0 до 1023. Мне потребовалось бы преобразовать его в число, которое соответствует возможному диапазону значений переменной digitemp. Далее я присвоил бы результат новой переменной с именем, скажем, usertemp. Затем мне понадобилось бы выяснить, существенно ли выше или ниже та температура, которую измерил терморезистор, по сравнению с переменной usertemp.

Заметьте, я опустил одну маленькую деталь: каким, собственно, образом я преобразовал бы входной сигнал от потенциометра в диапазон, подходящий для переменной usertemp. Сейчас мы с этим разберемся.

Если диапазон возможных значений терморезистора составлен из чисел от 430 до 512, как я установил ранее, то его можно представить как среднее значение 471 плюс или минус 41. Потенциометр имеет среднее значение 512 плюс или минус 512 до его полного диапазона. Поэтому:

usertemp = 471 + ( (potentiometer - 512) * .08)

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

Да, арифметика рано или поздно проявляется в программировании, так или иначе. И нет способа обойтись без нее. Но уровня математики средней школы для наших задач вполне хватит.

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

if (ledstate == 1 && digitemp > (usertemp + 10) )

после чего светодиод выключается. Но

if (ledstate == 0 && digitemp < (usertemp - 10) )

и тогда светодиод загорается. Это дало бы мне диапазон гистерезиса плюс-минус 10, если используются значения от АЦП.

Теперь, когда я описал необходимую модификацию программы, возможно, вы захотите осуществить ее самостоятельно. Не забывайте только объявлять каждую новую переменную, прежде чем вы ее укажете в теле программы.

 

Эксперимент 34. Точные игральные кости

 

В этом последнем эксперименте я собираюсь переделать устройство из эксперимента 24, в котором комбинации игральных костей формировались с помощью логических микросхем. Вместо микросхем теперь мы можем написать условные и логические операторы в программе для микроконтроллера. В результате компоненты схемы превратятся в несколько строк компьютерного кода и вместо таймера 555, счетчика и трех логических микросхем нам понадобится всего один микроконтроллер. Это отличный пример для демонстрации возможностей контроллеров. Но, безусловно, по-прежнему требуются светодиоды и токоограничительные резисторы.

 

Что вам понадобится

• Макетная плата, монтажный провод, кусачки, инструмент для зачистки проводов, тестовые провода, мультиметр

• Стандартный светодиод (7 шт.)

• Резистор 330 Ом (7 шт.)

• Плата Arduino Uno (1 шт.)

• Ноутбук или настольный компьютер со свободным USB-портом (1 шт.)

• USB-кабель с разъемами типа А и типа В на противоположных концах (1 шт.)

 

Эксперимент или программирование?

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

Создание программ — это занятие другого рода. Вы должны быть дисциплинированны и логичны, иначе будете писать программный код с ошибками, и он не станет работать надежно. Также здесь необходимо все планировать наперед, в противном случае вы потеряете много времени, переделывая выполненную ранее работу или полностью отказываясь от нее.

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

 

Случайность

Первый вопрос кажется очевидным: «Каких конкретных действий я жду от этой программы?» Вопрос необходим, потому что если цель не вполне ясна даже вам, то микроконтроллер и подавно не сможет ее реализовать. Формулировка цели напоминает описанный в эксперименте 15 процесс написания технического задания для системы охранной сигнализации, но в случае микроконтроллера детализация должна быть больше.

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

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

Чтобы найти его, перейдите на главную страницу Arduino, выберите вкладку Learning (Обучение) и отыщите раздел Reference, где вы найдете секцию Random Numbers. Там вы обнаружите специально созданную для контроллера Arduino функцию под названием random ().

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

А если вы желаете, чтобы последовательность начиналась с другого числа? Для этого есть другая функция ПОД названием randomSeed () , которая запускает генератор чисел в зависимости от состояния вывода микроконтроллера, который ни к чему не подключен. Как я уже упоминал ранее, «плавающий» логический вывод улавливает окружающее электромагнитное излучение, и вы никогда не узнаете, что от него ожидать. Поэтому значение randomSeed () может оказаться в полном смысле слова случайным, и его использование даст хороший результат, но следует помнить, что «плавающий» контакт нельзя задействовать для чего-либо еще.

Отложим ненадолго вопрос о начальном значении для генератора случайных чисел. Давайте предположим, что случайное значение генерирует функция random () и затем из него формируется число в качестве выходного значения программы имитации игральных костей. Как это реализовать?

Я думаю, игрок будет нажимать кнопку, и в этот момент отобразится случайно выбранная конфигурация точек на кубике. Готово! Затем, если вам нужно «кинуть кости» повторно, вы просто нажимаете кнопку еще раз, и появляется другая, выбранная случайным образом, комбинация точек на кубике.

Это нам подходит, но выглядит не очень правдоподобно. Люди могут задаться вопросом, на самом ли деле это случайное число? Полагаю, проблема в том, что пользователь лишен возможности управлять процессом.

Вернемся к «аппаратной» версии этого устройства. Мне нравился вариант, когда после включения точки отображаются очень быстро и конфигурации нечеткие, а игрок может нажать кнопку, чтобы произвольно прервать последовательность.

Может быть, программа должна работать именно так, а не использовать функцию random () ?

Она может вести отсчет от 1 до 6 снова и снова очень быстро — как микросхема счетчика в аппаратной версии игральных костей.

Но теперь возникают другие сложности. Когда программа считает от 1 до 6, а затем повторяет счет, микроконтроллеру, как я думаю, понадобится еще несколько микросекунд, чтобы вернуться к началу цикла. Поэтому число «6» всегда будет отображаться чуть дольше, чем другие числа.

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

Мне нравится этот план. Но что потом? Не придется ли добавить еще одну кнопку, чтобы перезапустить быстрое отображение чисел? Хотя, нет, это излишне: одна и та же кнопка выполнит обе операции. Нажмите, чтобы остановить, снова нажмите, чтобы перезапустить.

Видите, я все более четко представляю, какие действия должна выполнять наша программа. Теперь можно сделать следующий шаг при определении инструкций для микроконтроллера.

 

Алгоритм

Мне нравится составлять алгоритм в виде последовательности предложений, которые очень легко перевести на язык компьютера. Вот мой план алгоритма для программы, которую я назвал «Точные игральные кости». Имейте в виду то, что эти инструкции будут выполняться очень быстро, и в результате числа окажутся размытыми.

Основной цикл:

• Шаг 1. Выбрать случайное число.

• Шаг 2. Преобразовать его в конфигурацию точек на игральной кости и зажечь соответствующие светодиоды.

• Шаг 3. Проверить, нажата ли кнопка.

• Шаг 4. Если кнопка не нажата, вернуться к Шагу 1 и выбрать другое случайное число, чтобы быстро продолжить последовательность. Иначе...

• Шаг 5. Остановить индикацию на дисплее.

• Шаг 6. Подождать, пока игрок не нажмет кнопку повторно. После этого вернуться к Шагу 1 и повторить.

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

Нет, потому что некоторых инструкций не хватает. Шаг 2 говорит «зажечь соответствующие светодиоды», но нигде нет инструкции по их выключению!

Внимание!

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

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

Где она должна быть? Необходимо гасить дисплей пред выбором и отображением каждого нового числа. Поэтому правильное место для сброса дисплея находится в начале основного цикла. Добавим его так:

• Шаг 0. Выключить все светодиоды.

Но погодите. В зависимости от того, какое число отображалось на предыдущем цикле, одни светодиоды будут включены, а другие выключены. Если мы выключаем все светодиоды, чтобы очистить дисплей, то эта команда затронет также те светодиоды, которые уже выключены. Микроконтроллеру это безразлично, однако, он потратит впустую некоторое время, выполняя эту инструкцию. Возможно, было бы гораздо эффективнее выключить светодиоды, которые перед этим были включены, и проигнорировать те, которые уже и так выключены.

Однако в результате программа усложнится и, возможно, так делать не следует. На заре вычислительной техники людям приходилось оптимизировать программы, чтобы экономить циклы работы процессора, но я думаю, что теперь даже микроконтроллеры настолько быстрые, что нам не стоит беспокоиться о времени, затраченном на выключение двух-трех светодиодов, которые уже выключены. Я буду выключать все светодиоды сразу, независимо от их текущего состояния.

 

Обработка состояния кнопки

Что еще пропущено в списке шагов алгоритма? Кнопка.

Необходимо еще раз представить, какие действия я ожидаю от программы. На дисплее очень быстро сменяются числа. Игрок нажимает кнопку, чтобы остановить индикацию. Дисплей замирает, показывая текущее значение. На Шаге 6 микроконтроллер ждет неопределенно долго, пока игрок не нажмет кнопку снова, чтобы вновь запустить быстрое отображение.

Минуточку. Как игрок сможет нажать кнопку снова, не отпустив ее вначале?

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

• Программа говорит микроконтроллеру проверить кнопку.

• Микроконтроллер обнаруживает, что кнопка нажата.

• Дисплей замирает. Микроконтроллер ждет, когда кнопка будет нажата снова.

• Но он обнаруживает, что кнопка по- прежнему нажата, потому что игрок еще не успел отпустить ее.

• Микроконтроллер действует так: «Кнопка нажата, поэтому я должен возобновить быстрое отображение цифр».

В результате индикация на дисплее остановится лишь на мгновение.

Вот решение проблемы — дополнительный шаг в последовательности:

• Шаг 5А. Дождаться момента, когда игрок отпустит кнопку.

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

Теперь все в порядке?

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

Существует еще одна проблема с кнопкой. Шаг 6 просит подождать, пока кнопка не будет нажата снова, чтобы запустить быстрое отображение. Отлично. Игрок нажимает кнопку, дисплей возобновляет индикацию цифр, но микроконтроллер настолько быстр, что он «промчится» через процесс обнуления текущего значения и отображения новой комбинации игральных костей прежде, чем игрок перестанет нажимать кнопку. В результате, когда микроконтроллер перейдет к Шагу 4, он обнаружит, что кнопка по-прежнему нажата, и снова «заморозит» дисплей.

Как быть? Возможно, мне следует добавить новый Шаг 7, который говорит микроконтроллеру подождать, пока кнопка будет отпущена, прежде чем продолжить быстрое отображение.

Это противоречит интуиции. Я не думаю, что все осознают необходимость нажать кнопку и отпустить ее, чтобы возобновилось быстрое отображение. Проще всего сказать: «Ну, вы должны делать так, потому что этого требует программа». Но это неправильный ход рассуждений.

Внимание!

Программа должна делать то, что ожидает пользователь. Мы никогда не должны принуждать пользователя выполнять что-либо в угоду программе.

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

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

Один из них — вернуться к двум кнопкам: одна для запуска быстрого отображения, а другая для остановки. В этом случае, как только кнопка «Запуск» будет нажата, микроконтроллер может игнорировать ее состояние и дребезг контактов, ожидая нажатия кнопки «Стоп». Но с точки зрения игрока было бы проще обходиться одной кнопкой. В самом деле, как это сделать?

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

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

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

Допустим, я заблокировал кнопку, скажем, на две секунды после запуска быстрого отображения. Шаг 4 следует переписать как:

• Шаг 4. Если кнопка не была нажата ИЛИ если быстрое отображение продолжается менее 2 секунд, вернуться в начало и выбрать другое случайное число. Иначе...

Обратите внимание на слово ИЛИ. Здесь нужна именно эта логическая операция.

 

Системное время

Думаю, мы решили все проблемы с кнопками, но теперь у нас появилась новая проблема. Необходимо отмерить 2 секунды.

Есть ли у микроконтроллера системные часы? Возможно, есть. Может быть, язык С даст к ним доступ и поможет отмерить временной интервал.

Заглянем в справочные материалы по этому языку. Да, есть функция под названием mil- list), которая отсчитывает миллисекунды. Она работает как часы, начиная с нуля при каждом запуске программы. Эта функция способна принимать очень большие значения: она дойдет до предела и начнет отсчет заново не ранее чем через 50 дней. Этого, безусловно, достаточно.

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

Как решить эту проблему? Придется действовать так же, как я обычно поступаю с настенными часами на кухне. Когда я хочу приготовить яйцо вкрутую, я мысленно отмечаю момент закипания воды. Предположим, это 17:02, и я хочу сварить яйцо за 7 минут. Я рассуждаю так:

«17:02 плюс 7 минут — это 17:09, поэтому я вытащу яйцо в 17:09». Я сравниваю показания часов, которые продолжают идти, с предельным сроком 17:09 и спрашиваю себя: «На часах уже 17:09»? Если время на часах 17:09 или больше, то яйцо приготовлено.

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

Предположим, я назову эту переменную ignore, поскольку она будет сообщать мне о том, через какое время программа должна перестать игнорировать кнопку. Тогда на Шаге 4 можно спросить микроконтроллер: «Системное время уже превысило значение переменной ignore?», и если это так, программа может возобновить слежение за кнопкой.

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

 

Окончательный вариант алгоритма

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

• Перед началом цикла задать вход и выход у логических выводов, а также присвоить переменной ignore значение текущего времени плюс две секунды.

• Шаг 0. Выключить все светодиоды.

• Шаг 1. Сформировать случайное число.

• Шаг 2. Преобразовать его в конфигурацию точек на игральных костях и зажечь соответствующие светодиоды.

• Шаг 3. Проверить, нажата ли кнопка.

• Шаг 4. Проверить, достигло ли системное время значения переменной ignore.

• Шаг 4а. Если кнопка не была нажата ИЛИ если системное время не достигло значения переменной ignore, вернуться к Шагу 1. Иначе...

• Шаг 5. «Заморозить» дисплей.

• Шаг 5а. Подождать, пока игрок отпустит кнопку.

• Шаг 6. Подождать необходимое время, пока игрок не нажмет кнопку еще раз, чтобы перезапустить дисплей.

• Шаг 7. Присвоить переменной ignore значение системного времени плюс две секунды.

• Вернуться к Шагу 0.

Как вы думаете, будет ли все это работать? Давайте выясним.

 

Настройка аппаратного обеспечения

На рис. 5.92 показаны семь светодиодов, смонтированных на макетной плате, чтобы отображать точки игрального кубика. Принцип тот же, что и на рис. 4.142, за исключением того, что каждый выход микросхемы Arduino может обеспечить ток 40 мА, поэтому мне не придется соединять светодиоды последовательно. Один выход может без проблем питать пару параллельных светодиодов, и для каждого стандартного светодиода достаточно резистора 330 Ом.

Нумерация проводов та же, что и в системе нумерации на рис. 4.142. Она не имеет ничего общего со значениями на гранях кубика. Это всего лишь выбранный способ идентификации каждого провода. К тому же, можно подключить провода с первого по четвертый к цифровым выходам под номерами с 1 по 4 на плате Arduino Uno. Это поможет избежать лишних ошибок.

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

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

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

Внимание!

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

 

А теперь — программа

В листинге 5.3 приведена программа с комментариями, которую я написал в соответствии с алгоритмом. В листинге 5.4 приведен тот же код, но уже без комментариев, чтобы вы смогли быстрее набрать его. Пожалуйста, введите его в окне редактирования среды IDE.

Листинг 5.3

Листинг 5.4

При наборе текста программы вы заметите, что второй оператор if содержит символ, который вы раньше не видели. Возможно, вы даже никогда раньше не набирали его с клавиатуры. Это вертикальная линия. На клавиатуре для ПК под управлением операционной системы Windows вы найдете ее над клавишей . Чтобы ввести этот символ, удерживайте клавишу и нажмите клавишу с обратной косой чертой. В этом листинге присутствуют две пары таких символов во втором операторе if, и я объясню их, когда мы будем построчно разбирать программу. Когда вы завершите набор, выполните команду Скетч | Проверить/ Компилировать (Sketch | Verify/Compile), чтобы проверить, нет ли ошибок.

Некоторые сообщения об ошибках трудно понять, и они ссылаются на номера строк. Но эти номера не отображаются на экране! Это похоже на злую шутку: сказать, в какой строке ошибка, но не показывать ее номер. Может быть, существует способ включить отображение нумерации строк? Если вы заглянете в раздел Помощь (Help) и поищете фразу «нумерация строк», то вряд ли найдете что-либо. Посетите форумы Arduino, и вы обнаружите многочисленные жалобы на отсутствие возможности отобразить нумерацию строк.

Да, но на форумах вначале видны старые сообщения. Если вы прокрутите страницу вниз, к новым сообщениям, то вы обнаружите, что проблема наконец-то решена. Просто компания Arduino пока еще не отразила это в документации. Перейдите в раздел Файл | Настройки (File | Preferences), и вы увидите флажок включения нумерации строк.

Конечно, сообщение об ошибке бывает трудно понять, но вот перечень самых распространенных ошибок:

• Отсутствует точка с запятой в конце инструкции.

• Нет закрывающей скобки. Помните о том, что фигурные скобки { и } должны всегда быть в паре.

• Неправильный регистр символов. Хотя командное слово часто содержит прописные буквы наряду со строчными, как В pinMode, вы могли набрать все строчными буквами. Среда IDE должна отображать командные слова красным, если они написаны правильно. Если вы видите, что оно черное, значит в нем опечатка.

• Отсутствие круглых скобок после названия функции, например, void loop().

• Одиночный знак = там, где должен быть двойной == Помните о том, что = означает «присвоить значение», в то время как == означает «сравнить значения».

• Один символ | или & там, где они должны быть в паре.

После того как операция проверки и компилирования не обнаружит дополнительных ошибок, загрузите программу. Теперь подключите заземляющий провод, соединяющий макетную плату с платой Arduino Uno, светодиоды должны начать мигать. Подождите несколько секунд, а затем нажмите кнопку — отображение остановится, показав случайную конфигурацию точек. Нажмите кнопку снова, и быстрое отображение возобновится. Удерживайте кнопку, и после двухсекундного периода игнорирования дисплей остановится снова. Алгоритм успешно реализован!

Теперь рассмотрим, как работает эта программа.

 

Короткие и длинные целые числа

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

Одно из новых слов — long. До этого перед каждым именем переменной вы указывали int (означающее integer — целое число). Но значения чисел int ограничены диапазоном от -32 768 до +32 767. Когда вам нужно хранить большее значение, используется длинное целое число, которое допускает диапазон значений от - 2 147 483 648 до 2 147 483 627.

Почему бы не применять длинные целые числа всюду? Тогда нам не нужно было бы беспокоиться об ограничениях обычного числа. Это так, но длинные числа обрабатываются в два (а то и более) раза дольше и занимают в два раза больше памяти. А у микроконтроллера Atmel объем памяти невелик.

Функция millis() служит для подсчета миллисекунд. Если мы позволим ей считать только до 32 767, то этого хватит лишь на полминуты. Возможно, нам понадобится больше времени, поэтому функция хранит свое значение в виде длинного числа. (Откуда я это знаю? Я прочитал справку по языку программирования. Чтобы овладеть компьютерным языком, необходимо читать документацию.)

Когда я ввел переменную ignore, чтобы запоминать текущее значение системного времени, ее следовало определить так, чтобы она была совместима с функцией времени; поэтому она определена как длинное целое число с помощью слова long.

Что произойдет, если вы попытаетесь сохранить число, которое находится вне пределов дозволенного диапазона для целого числа (или длинного целого)? Ваша программа выдаст непредсказуемый результат. Предотвратить это можете только вы.

 

Начальная настройка

Раздел начальной настройки в нашей программе достаточно простой. Ранее вы не использовали команды pinMode(), но они просты для понимания.

Первая содержит очень полезный параметр INPUT_PULLUP, который активирует встроенный в микроконтроллер подтягивающий резистор, поэтому вам не нужно добавлять этот резистор самостоятельно. Но учтите, это повышающий резистор, а не понижающий. Поэтому состояние входа является нормально высоким, и когда вы нажимаете кнопку, она должна заземлять этот вывод микросхемы, чтобы сделать его низким. Запомните:

• Когда кнопка нажата, функция digitalRead() возвращает значение LOW.

• Когда кнопка отпущена, функция digitalRead() возвращает значение HIGH.

 

Цикл for

Перед функцией void loop() есть еще цикл другого типа. Он называется циклом for, потому что он начинается со слова for. Это очень простой и удобный способ заставить микроконтроллер отсчитывать ряд чисел, сохраняя каждое новое число в переменной и стирая предыдущее значение. Синтаксис следующий:

• Зарезервированное слово for сопровождается тремя параметрами в круглых скобках.

• Каждый параметр отделен от следующего точкой с запятой.

• Первый параметр — это первое значение, которое будет сохранено в указанной переменной. (Часто оно называется начальным значением.) В данной программе первое значение — это 1, оно сохраняется в созданной мною переменной по имени outpin.

• Второй параметр — это значение, при котором цикл прекращает счет (часто называется условием остановки). Поскольку цикл останавливается в этой точке, окончательное значение переменной будет меньшим, чем предельное значение. В этой программе предел записан как < 5, что означает «меньше 5». Поэтому цикл будет вести отсчет от 1 до 4, используя переменную outpin.

• Третий параметр — это число, которое прибавляется к переменной на каждом цикле (называется величиной итерации). В данном случае мы на каждой итерации увеличиваем значение переменной цикла на единицу, и язык С позволяет мне указать это, написав два символа ++. Поэтому outpin++ означает «прибавить 1 к значению переменной output на каждом шаге».

Циклы for позволяют вам указать любые условия. Они исключительно гибкие. Почитайте об этом в разделе справки по языку программирования. Наш цикл for просто считает от 1 до 4, но он мог бы также считать от 100 до 400 или в любом другом диапазоне, каком пожелаете, ограниченном типом целого числа, заданного В цикле (int ИЛИ long).

На каждой итерации микроконтроллеру указывается, что делать. Выполняемая процедура приведена в фигурных скобках после определения цикла (тело цикла). Как и любая другая процедура, она может содержать несколько операций, каждая из которых заканчивается точкой с запятой. В данной процедуре только одна операция: записать состояние LOW для контакта, указанного в переменной outpin. Поскольку переменная outpin изменяется от 1 до 4, цикл for создает низкий выходной сигнал на выводах с 1 по 4.

Ага, вот теперь понятно, для чего это все. Цикл выключает все светодиоды.

А нельзя ли сделать это проще? Безусловно, можно было бы написать друг за другом четыре команды:

digitalWrite (1, LOW);

digitalWrite (2, LOW);

digitalWrite (3, LOW);

digitalWrite (4, LOW);

Но мне хотелось познакомить вас с понятием цикла for, поскольку оно основное и важное. А если бы вам понадобилось выключить девять светодиодов? Или если бы вы захотели, чтобы микроконтроллер мигнул светодиодом 100 раз? Цикл for зачастую предоставляет лучший способ повысить эффективность процедуры, которая содержит повторяющиеся операции.

 

Функция генератора случайных чисел

После того как цикл for погасит светодиоды, мы переходим к функции random (), выбираю- щей число, которое заключено в пределах, указанных в круглых скобках. Нам необходимо значение от 1 до 6, но почему же этот диапазон указан от 1 до 7? Потому что на самом деле эта функция выбирает величины с дробной частью, от 1,00000001 до 6,99999999, а затем отбрасывает ту часть числа, которая следует за десятичной запятой. Поэтому 7 — это предел, который никогда не будет достигнут, и значение на выходе окажется от 1 до 6.

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

 

Оператор сравнения

if

Теперь пришло время узнать, какое сейчас значение у переменной spots, и включить соответствующие светодиоды.

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

Почему мы не включаем также и все диагональные светодиоды? Суть в том, что они будут включены при других значениях кубика, и гораздо эффективнее свести к минимуму количество проверок if. Скоро вы поймете, как это работает.

Следующий оператор if использует символ прямой черты, о котором я упоминал ранее. Пара символов I I на языке программирования С означает ИЛИ. Поэтому данная функция говорит: «Если у нас есть значение 1, ИЛИ 3, ИЛИ 5, мы включаем центральный светодиод, переводя вывод 2 в высокое состояние».

Третий оператор if говорит о том, что если значение spots больше трех, следует включить два светодиода, расположенных по диагонали. Это необходимо для отображения конфигурации точек для числа 4, 5 или 6.

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

Вы можете проверить логику этих функций сравнения, взглянув на конфигурации точек на рис. 4.142. Логические элементы на этом рисунке были подобраны так, чтобы соответствовать двоичному выходу микросхемы счетчика, и поэтому они отличаются от логических операций в функциях сравнения рассматриваемой программы. Тем не менее, светодиоды объединены в пары аналогичным образом.

 

Скорость мигания

После функций сравнения я вставил задержку в 20 миллисекунд, потому что считаю, что это сделает отображение более интересным. Без этой задержки светодиоды будут мигать так быстро, что отдельные значения окажутся неразличимы. При наличии задержки вы увидите их мигание, но оно по-прежнему будет слишком быстрым, и вам не удастся остановить его на том номере, который хотите угадать — хотя можете попробовать. Можете также настроить параметр задержки, указав число больше или меньше 20.

 

Создание новой функции

Теперь мы переходим к важной части. В написанном мною алгоритме мы дошли до Шагов 3, 4 и 4а. Напомню:

• Шаг 3. Проверить, нажата ли кнопка.

• Шаг 4. Проверить, достигло ли системное время значения переменной ignore.

• Шаг 4а. Если кнопка не была нажата ИЛИ если системное время не достигло значения переменной ignore, вернуться к Шагу 1. Иначе...

Эти шаги можно скомбинировать в одной функции сравнения if. Алгоритм выглядел бы так:

• Если (кнопка не нажата ИЛИ системное время меньше значения ignore), вернуться к Шагу 0.

Но здесь есть проблема. Фраза «вернуться к» предполагает отсылку микроконтроллера к указанной части программы. Казалось бы, естественная команда, но когда вы программируете на языке С, следует избегать передачи управления из одной части программы в другую.

Причина в том, что обилие команд «перейти туда» или «перейти сюда» усложняет понимание программы — не только для других людей, но и для вас самих, когда вы взглянете на нее снова через полгода и не сможете вспомнить, что имелось в виду.

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

Такие блоки обычно называются функциями, что немного сбивает с толку, потому что мы уже имели дело с функциями setup() и loop(). Фактически, вы можете написать собственную функцию, которая будет работать в целом по такому же принципу.

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

Вы видите функцию checkbutton() в нижней части листинга 5.3 с предшествующим ей словом void, потому что эта функция не возвращает никакого значения в остальную часть программы.

Слова void checkbutton() — это заголовок функции, после которого, как обычно, в фигурных скобках содержится сама процедура. Эта функция выполняет следующее:

• Ждет 50 мс, пока прекратится дребезг контактов.

• Ожидает, пока будет отпущена кнопка.

• Ждет еще 50 мс, пока прекратится дребезг контактов отпущенной кнопки.

• Ждет, пока кнопка будет нажата снова (другими словами, ожидает завершения отпущенного состояния).

• Сбрасывает переменную ignore.

Когда микроконтроллер доходит до конца этой функции, куда он идет дальше? Все просто: он возвращается к строке, расположенной сразу за той, из которой была вызвана функция. Где она? Сразу под функцией сравнения, выше. Так и происходит вызов функции: вы просто указываете ее имя (включая круглые скобки, внутри которых иногда содержатся параметры, хотя в данном случае их нет).

Вы можете и должны создавать столько функций в программе, сколько пожелаете, используя каждую для выполнения отдельной задачи. Чтобы узнать об этом, рекомендую прочитать любые общие руководства по языку С. Документация к среде Arduino не описывает функции детально, потому что они сложны для понимания, когда речь заходит о передаче значений. Тем не менее, это основополагающая конструкция языка С.

 

Структура программы

Строка, которая начинается с if ( millis() > ignore, предназначена для того же, что и Шаг 4 в моем алгоритме, но теперь все работает по- другому. Вместо того чтобы решить, отправлять ли микроконтроллер обратно к началу программы, принимается решение, вызывать ли функцию checkbutton(). Ранее я резюмировал ее логику так: «Если (кнопка не нажата ИЛИ системное время меньше значения ignore), вернуться к Шагу 0». Пересмотренный вариант гласит: «Если превышен период игнорирования кнопки И кнопка нажата, перейти к функции к checkbutton()».

После того как микроконтроллер выполнит это и вернется, он достигнет конца основной функции loop, которая всегда повторяется автоматически.

На самом деле эта программа выполняет только одну задачу. Она выбирает случайные числа и отображает их в виде конфигурации точек снова и снова. Если кнопка нажата, то программа делает паузу и ждет, а когда кнопку нажмут снова, программа продолжает делать то, что делала раньше. Процедура проверки кнопки — всего лишь кратковременный перерыв.

Поэтому, естественная структура для этой программы — основной цикл, который выбирает и отображает цифры, и если кнопка нажата, микроконтроллер отправляется к функции checkbutton(), а затем возвращается к основному циклу.

Документация среды Arduino ничего не говорит о структуре программы, потому что подразумевает наличие базовых знаний программирования. Поэтому среда Arduino просто требует указать обязательную функцию setup, за которой следует функция loop, и все.

Но как только программа увеличится в размере, вам обязательно понадобится разделить ее на подходящие функции, чтобы она не превращалась в запутанный «клубок» операторов. Стандартное руководство по языку С объяснит все более детально.

Безусловно, если поставленная задача не слишком сложна, например, включение нагревателя, когда в комнате становится прохладно, вы можете поместить все процедуры внутри основной функции loop, и этого будет достаточно. Но при этом возможности микроконтроллера задействованы не полностью. Он ведь способен выполнить намного больше. Проблема в том, что когда вы пытаетесь сделать что-то более амбициозное, например, сымитировать бросок игрального кубика, операторов становится намного больше и обязательно потребуется их структурировать.

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

Подобным же образом вы можете в своих программах использовать функции других людей, при условии, что авторы не запрещают вам это, контролируя свое авторское право. Большое количество функций на языке С доступно бесплатно в онлайн-источниках, многие из них написаны специально для среды Arduino. Например, есть функции для управления почти всеми алфавитно-цифровыми дисплеями. Это приводит к очень важному, но часто игнорируемому совету для программистов: не изобретайте велосипед. Вам не нужно тратить время, чтобы создавать свою функцию, если кто-либо разрешает вам взять уже готовую. Это еще одна причина, по которой понятие функции так важно в языке С.

 

Сложно ли создавать программы?

Чем больше программ вы создаете, тем проще это дается. Вначале все кажется слишком сложным, но после некоторой практики цикл for получится у вас без долгих раздумий. Все станет очевидным. Так любят говорить программисты. Но так ли это?

Иногда да, а иногда нет. В сообществе умельцев (maker movement) мы склонны считать, что любой может управлять окружающим нас техномиром. Я тоже разделяю это мнение, но компьютерное программирование доводит эту философию до крайних пределов.

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

На одном конце шкалы — случай, когда после 12-недельного 36-часового курса программирования один студент создал программу имитации игрового автомата, которая формировала графическое изображение вращающихся колес и сыплющихся денег.

На другом конце шкалы — студент-фармацевт, очень толковый, с хорошим образованием. Но как он ни старался, ему не удавалось написать правильно даже простые операторы сравнения. Он говорил: «Это раздражает меня, потому что заставляет чувствовать себя дураком. Но я знаю, что я не дурак».

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

Совет

Чтобы хорошо писать программы, вы должны уметь думать как компьютер.

По какой-то причине фармацевт этого не мог. Его мозг работал иначе. Он мог описать фармакологические свойства какого-либо лекарственного средства, его молекулярную структуру и многое другое, но это не помогало ему в написании программ.

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

Я уже немолод и помню, что при внедрении стандарта HTML продвигалась та же идея — он будет настолько прост, что любой сможет написать код для своих веб-страниц. Ну да, некоторые так и поступали, но далеко не все. Сегодня лишь малая часть пользователей набирает HTML-код вручную (я один из них, но в этом проявляется моя эксцентричность).

Если углубиться в историю, то на заре вычислительной техники язык программирования BASIC был создан с идеей, что все смогут его использовать. В 80-х годах прошлого века с появлением настольных компьютеров приверженцы этого языка предсказывали, что люди будут писать небольшие программы на нем, чтобы проверить баланс на банковском счете или сохранить рецепт. Да, пробовали многие, но сколько людей до сих пор так поступают?

Если вы считаете программирование сложным занятием, то, поверьте мне, это отнюдь не «клеймо позора». Уверен, у вас есть другие навыки, в которых вы гораздо сильнее. На самом деле, конструирование изделий из отдельных компонентов может быть одним из таких навыков, поскольку, как я считаю, для этого требуются другие мыслительные процессы. Лично для меня написание программ легче, чем проектирование схем, но для кого-то другого обратное будет в равной степени справедливо.

 

Улучшение программы «Точные игральные кости»

Как и в эксперименте 24, очевидное улучшение — добавление дисплея для второго игрального кубика. Это можно очень легко сделать с помощью платы Arduino, потому что она имеет дополнительные цифровые выходы, которые могут управлять второй группой светодиодов. Вам нужно лишь продублировать раздел программы, который начинается с обнуления индикатора и заканчивается функцией delay(20). Подставьте новые номера контактов для дополнительных светодиодов В функциях digitalWrite () и дело сделано!

 

Другие микроконтроллеры

Я уже упоминал микроконтроллер PICAXE. У него добротная документация и превосходная техническая поддержка, а язык легче для изучения, чем С. Так почему же этот продукт не стал таким популярным? Не знаю; возможно, потому что у него непонятное название. Может быть, вам удастся выяснить причину, начните с прочтения статьи на сайте Wikipedia.

Микроконтроллер BASIC Stamp по сравнению с PICAXE содержит расширенный набор команд и больший ассортимент дополнительных устройств (в их число входят графические дисплеи, а также миниатюрная клавиатура, которая специально предназначена для работы с контроллером). Вы можете купить их в виде компонентов для поверхностного монтажа, установленных на миниатюрной плате, которая вставляется в макетную плату (рис. 5.93). Очень продуманная конструкция.

Рис. 5.93. Миниатюрная плата с контроллером BASIC Stamp

С другой стороны, все связанное с микроконтроллером BASIC Stamp немного дороже, чем у PICAXE, а процесс загрузки совсем не простой.

Новые продукты, такие как Raspberry Pi, расширяют функциональность микроконтроллера до такой степени, что он становится настоящим компьютером. К тому моменту, когда вы будете читать эти строки, в этой быстроразвивающейся области появится еще больше альтернатив. Прежде чем вы посвятите себя детальному изучению одной из них, думаю, что неплохо потратить день или два на ознакомление с онлайн-документацией и сообщениями на форумах.

Когда я намереваюсь изучить что-либо новое, я делаю поисковый запрос в сервисе Google, Например такой: Микроконтроллер Проблемы или Сложности. В поисковой фразе вместо слова «микроконтроллер» можно подставить название реального продукта. Это не потому, что я пессимист по натуре. Просто мне не хочется тратить много времени на продукт, который имеет нерешенные проблемы.

 

Что осталось без внимания

Теперь пора подвести некий общий итог.

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

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

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

Мы довольно поверхностно рассмотрели двоичный код, и вам не довелось собрать полусумматор, который является отличным способом изучения работы компьютера на самом фундаментальном уровне. Но в книге Make: More Electronics я покажу вам, как это сделать.

Я не стал углубляться в увлекательные и таинственные свойства переменного тока. Опять-таки, здесь требуется математика. Однако свойства высокочастотных колебаний — очень интересная тема сама по себе.

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

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

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

Я ничего не рассказал о статическом электричестве. Разряды высокого напряжения не имеют какого-либо практического применения и могут оказаться опасными, однако, они очень впечатляют, и вы легко можете получить необходимую информацию, чтобы собрать требуемое оборудование. Возможно, попробовать стоит.

Операционный усилитель и цифровые логические схемы высокого уровня — темы, которых я не касался в этой книге. Тем не менее, они включены в книгу Make: More Electronics.

 

Заключение

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

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