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

Объяснение программы для Arduino

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

Первым делом в программе нам необходимо подключить библиотеки для использования возможностей протокола I2C и для работы с ЖК дисплеем.

Arduino

#include<Wire.h>
#include <LiquidCrystal.h>

1
2

#include<Wire.h>
#include <LiquidCrystal.h>

После этого определим (объявим) ряд макросов. В первом макросе будет записан адрес шины (адрес ведомого – в нашем случае это модуль PCF8591) для протокола I2C, а во втором – адрес первого входного контакта (AIN0) модуля PCF8591 (он подключен к потенциометру в схеме).

Arduino

#define PCF8591 (0x90 >> 1)
#define AIn0 0x00

1
2

#define PCF8591 (0x90 >> 1)
#define AIn0 0x00

Далее сообщим плате Arduino, к каким ее контактам подключен ЖК дисплей и инициализируем переменную, в котором будем хранить значение, считываемое с аналогового контакта модуля PCF8591.

Arduino

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
int Value = 0;

1
2
3

constintrs=12,en=11,d4=5,d5=4,d6=3,d7=2;

LiquidCrystallcd(rs,en,d4,d5,d6,d7);

intValue=;

В функции void setup() мы инициализируем связь по протоколу I2C и ЖК дисплей для работы в режиме 16х2.

Arduino

void setup()
{
Wire.begin();
lcd.begin(16,2);
}

1
2
3
4
5

voidsetup()

{

Wire.begin();

lcd.begin(16,2);

}

В функции void loop() мы начнем обмен данными с модулем PCF8591 с помощью команды Wire.beginTransmission. Далее мы дадим команду модулю PCF8591 на считывание аналоговых значений на своем входе AIN0 (вторая строка в коде). Затем мы завершим передачу с помощью функции  Wire.endTransmission и запросим измеренное аналоговое значение (Wire.requestFrom) с модуля PCF8591.

Arduino

void loop()
{
Wire.beginTransmission(PCF8591);
Wire.write(AIn0);
Wire.endTransmission();
Wire.requestFrom(PCF8591, 1);

1
2
3
4
5
6

voidloop()

{

Wire.beginTransmission(PCF8591);

Wire.write(AIn0);

Wire.endTransmission();

Wire.requestFrom(PCF8591,1);

Далее мы сохраним принятое с модуля PCF8591 значение в переменной Value и выведем это значение на экран ЖК дисплея.

Arduino

Value=Wire.read();
lcd.print(«ADC Value=»);
lcd.print(Value);
delay(500);
lcd.clear();}

1
2
3
4
5

Value=Wire.read();

lcd.print(«ADC Value=»);

lcd.print(Value);

delay(500);

lcd.clear();}

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

Характеристики

Характеристики у обоих устройств KY-037 и KY-038 достаточно скромные, и отличающихся, как было сказано ранее, между собой только размером микрофона.

  • питание — 3,5–5В;
  • цифровой выход — есть, однобитный, работающий в режиме индикации наличия звука или тишины;
  • аналоговый — присутствует, с градацией получаемого сигнала в 1024 уровня;
  • вес — в среднем 12..13 грамм;
  • предел чувствительности — до 5 метров;

Принципиальная схема и выводы устройства:

Сразу хочется заметить, что названые детекторы, регистрируют только достаточно громкие звуки и не очень чувствительны к их переходным состояниям, к примеру, используемым в словах или фразах. То есть, сделать выключатель или активатор реагирующий на хлопок и свист гораздо проще, чем запрограммировать систему распознавания голосовых команд с применением KY-037 или KY-038. Некоторые идеи по осуществлению требуемой функциональности будут представлены далее.

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

Что такое ULN2803?

El ULN2803 — это микросхема, интегральная схема с традиционной DIP-упаковкой, как и многие другие. То есть с двумя стопками булавок по бокам. Что ж, до сих пор это может показаться очень похожим на многие другие, но внутри у него нет обычных логических дверей, мультиплексоры, фильтры, модули датчиков тока, регистр сдвига, ни микроконтроллер…

Внутри ULN2803 вы найдете драйверы с серией транзисторов, некоторые устройства, о которых я уже говорил в других случаях, с разными типами, например: МОП-транзистор, BC547, 2N3055, 2N222, И т.д.

Что такое транзистор Дарлингтона или пара?

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

Этот тип усиления использовался с двумя отдельными транзисторами, но инженер из Bell Labs по имени Сидни Дарлингтон Он запатентовал эту комбинацию в 1952 году. Идея заключалась в том, чтобы разместить два или три транзистора на одном монолитном кристалле. Идея похожа на идею создания микросхемы или интегральной схемы, хотя это достижение не признано ему, как вы хорошо знаете …

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

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

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

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

Эти транзисторы Дарлингтона можно найти как инкапсулированный отдельно, то есть просто парой, или в интегральных схемах с несколькими транзисторами Дарлингтона, как в случае с ULN2803.

Таблица данных и распиновка ULN2803

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

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

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

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

  • TI или Texas Instruments ULN2803
  • СТ Микроэлектроника ULN2803

Цена и где купить

Найти его не так уж сложно, если знать, где искать. Его цена дешевая, и вы даже можете купить в чипгруппах ULN2803 если вам нужно несколько. Например, один из самых дешевых — это Упаковка из 10 шт ULN2803A от Amazon которые вы можете купить здесь примерно за 1 евро.

Step 7:

Setting up the PCF8591 for differential ADC is a simple matter of changing the control byte. If you turn to page seven of the data sheet, then consider the different types of analogue input programming. Previously we used mode ’00’ for four inputs, however you can select the others which are clearly illustrated, for example the image.

So to set the control byte for two differential inputs, use binary 00110000 or 0x30. Then it’s a simple matter of requesting the bytes of data and working with them. As you can see there’s also combination single/differential and a complex three-differential input. However we’ll leave them for the time being.

Hopefully you found this of interest, whether adding a DAC to your experiments or learning a bit more about ADCs. Please consider ordering your PCF8591 from PMD Way.

This post brought to you by pmdway.com – everything for makers and electronics enthusiasts, with free delivery worldwide.

Схема подключения

На uln 2003 схема подключения до боли проста и не включает никаких компонентов. Главное, не перепутать вход с выходом и общий вывод, в остальном все и так ясно. Но все же для наглядности стоит повторить схему на примере с шаговым двигателем с питанием от 12 до 24 В. Общий провод от +24В подключается на 9 вывод и к центральному отводу обмоток двигателя, все остальные оп порядку согласно полюсам. Управление двигателем осуществляется по аналогичным линиям, только со входа МС.

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

Key features of PCF8574 I2C I/O expansion

  • 8 bi-directional data lines
  • Loop-thru feature allows expansion of up to 8 modules / 64 data lines
  • I2C interface with jumper adjustable addresses
  • Interrupt output capability
  • 3.3V and 5V compatible.

A common requirement when working with MCUs is the need to add more digital I/O than the device supports natively.  The  PCF8574 is one of the more popular methods of adding lines as it uses the I2C bus that requires only 2 lines on the MCU.  It provides 8 additional digital I/O lines, which are easily expandable up to 64.

I2C Interface

The module has an easy-to-use I2C interface that can be configured to use any one of eight different I2C addresses if you want to use multiple modules in the same system or if you run into an address conflict with another device.

There are three address jumps (A0-A2) that determine which I2C address to use.  As shipped, these jumpers are all set to the ‘-‘ side, which is ground or LOW, as shown in the picture.  The ‘+’ side is Vcc or HIGH.

I/O Functionality

The I/O is defined as quasi-bidirectional. A quasi-bidirectional I/O is either an input or output port without using a direction control register.  When set as inputs, the pins act as normal inputs do.  When set as outputs, the PCF8574 device drives the outputs LOW with up to 25mA sink capability, but when driving the outputs HIGH, they are just pulled up high with a weak internal pull-up.  That enables an external device to overpower the pin and drive it LOW.

The device powers up with the 8 data lines all set as inputs.

When using the pins as inputs, the pins are set to HIGH by the MCU, which turns on a weak 100 uA internal pull-up to Vcc. They will read as HIGH if there is no input or if the pin is being driven HIGH by an external signal but can be driven LOW by an external signal that can easily override the weak pull-up.

If used as outputs, they can be driven LOW by the MCU by writing a LOW to that pin. A strong pull-down is turned on and stays on to keep the pin pulled LOW. If the pin is driven HIGH by the MCU, a strong pull-up is turned on for a short time to pull the pin HIGH quickly, and then the weak 100uA pull-up is turned back on to keep the pin HIGH.

If the pins are set to be outputs and are driven LOW, it is important that an external signal does not also try to drive it HIGH or excessive current may flow and damage the part.

Whenever the internal register is read, the value returned depends on the actual voltage or status of the pin.

The I/O ports are entirely independent of each other, but they are controlled by the same read or write data byte.

Interrupt Output

The interrupt open-drain output pin is active LOW.  It is normally pulled HIGH using a pull-up resistor and is driven low by the PCF8574 when any of the inputs change state. This signals the MCU to poll the part to see what is going on. If connecting this pin, enable the internal pull-up resistor on the MCU or add an external pull-up of 10K or so.

If using interrupts with multiple modules, since they are open drain they can be tied together if a single interrupt back to the MCU is desired.

Module Connections

The connections to the module are straightforward.

  1. Supply 3.3 or 5V power and ground.
  2. Connect I2C SCL and SDA lines to the same on the MCU.
  3. If used, connect the INT line to an interrupt input on the MCU and use a pull-up resistor.

I write a library to use i2c pcf8574 IC with Arduino and esp8266.

So can read and write digital value with only 2 wires (perfect for ESP-01).

I try to simplify the use of this IC with a minimal set of operations.

How I2c Works

I2C works with its two wires, the SDA(data line) and SCL(clock line).

Both these lines are open-drain but are pulled up with resistors.

Usually, there is one master and one or multiple slaves on the line, although there can be multiple masters. We’ll talk about that later.

Both masters and slaves can transmit or receive data. Therefore, a device can be in one of these four states: master transmit, master receive, slave transmit, and slave received.

Аварийное электропитание PCF8563

Возвращаясь к схеме из datasheet на  PCF8563 — обратите внимание на силовую часть:

Отмеченная часть схемы — это аварийное электропитание системы. В случае отсутствия питания Vdd ток будет течь от большого суперконденсатора (он помечен как 1F).

Или можно сделать так:

Примечание.Напряжение питания проходит через диод, чтобы предотвратить разряд конденсатора; Если вы используете обычный диод (например, 1n4148), напряжение Vdd, питающее PCF, упадет примерно на 0,6 — 0,7 В (диод будет «потреблять» его); для меньшего падения вы можете использовать, например, диод Шоттки.

Резистор R1 ограничивает ток, заряжающий конденсатор. Согласно закону Ома:

например, для источника питания R1 = 100 Ом, Vdd = 5 В и диода 1n4148 ток, протекающий на/от конденсатора, будет равен:

Это немного, но помните, что стабилизатор Arduino (то есть Vdd) также имеет ограниченную мощность.

Конденсатор должен иметь максимально допустимое напряжение (Vdd-0,6 В) — при условии, что падение на диоде составляет 0,6 В; ПРИМЕЧАНИЕ: для Arduino и Vdd = 5v это должен быть двойной суперконденсатор, например:

Чем меньше R1, тем больше зарядный ток, но больший ток будет взят из источника Vdd. Для упомянутого конденсатора R1 = 100 Ом и 1Ф постоянная времени будет:

Через 100 секунд конденсатор разрядится до 2/3, а полностью только через 8 минут. Я думаю, что в случае часов это разумное значение.

Конденсатор напрямую подключен к микросхеме. Это не проблема, учитывая, что RTC использует микроамперы (например, 800uA с включенным интерфейсом) или только наноамперы (например, 550nA с отключенным интерфейсом) — этого достаточно.

PCF8574 — I2C модуль для LCD на базе HD44780

Микросхема PCF8574/PCF8574T обеспечивает расширение портов ввода/вывода для контроллеров через интерфейс I2C и позволит легко решить проблему нехватки цифровых портов. При использовании модуля как расширитель портов ввода/вывода следует учитывать то, что вывод Р3 имеет инверсный выход с открытым коллектором.

Микросхема может использоваться для управления ЖК дисплеем под управлением контроллера HD44780, в 4-х битном режиме. Для этой цели на плате установлена микросхема PCF8574, которая является преобразователем шины I2C в параллельный 8 битный порт.

Плата модуля разведена таким образом, чтобы ее можно было сразу подключить к ЖКИ. На вход подается питание и линии I2C. На плате сразу установлены подтягивающие резисторы на линиях SCL и SDA, потенциометр для регулировки контрастности и питание самого дисплея. Джампер справа включает/отключает подсветку.

Step 5: Using the ADCs (analogue-to-digital Converters)

If you’ve used the analogRead() function on your Arduino (way back in Chapter One) then you’re already familiar with an ADC. With out PCF8591 we can read a voltage between zero and the Vref and it will return a value of between zero and 255 which is directly proportional to zero and the Vref.

For example, measuring 3.3V should return 168. The resolution (8-bit) of the ADC is lower than the onboard Arduino (10-bit) however the PCF8591 can do something the Arduino’s ADC cannot. But we’ll get to that in a moment. First, to simply read the values of each ADC pin we send a control byte to tell the PCF8591 which ADC we want to read. For ADCs zero to three the control byte is 0x00, 0x01, ox02 and 0x03 respectively.

Then we ask for two bytes of data back from the ADC, and store the second byte for use. Why two bytes? The PCF8591 returns the previously measured value first – then the current byte. (See Figure 8 in the data sheet). Finally, if you’re not using all the ADC pins, connect the unused ones to GND. The following example sketch simply retrieves values from each ADC pin one at a time, then displays them in the serial monitor:

#include "Wire.h"
#define PCF8591 (0x90 >> 1) // I2C bus address
#define ADC0 0x00 // control bytes for reading individual ADCs
#define ADC1 0x01
#define ADC2 0x02
#define ADC3 0x03
byte value0, value1, value2, value3;
void setup()
{
 Wire.begin();
 Serial.begin(9600);
}
void loop()
{
 Wire.beginTransmission(PCF8591); // wake up PCF8591
 Wire.write(ADC0); // control byte - read ADC0
 Wire.endTransmission(); // end tranmission
 Wire.requestFrom(PCF8591, 2);
 value0=Wire.read();
 value0=Wire.read();
 Wire.beginTransmission(PCF8591); // wake up PCF8591
 Wire.write(ADC1); // control byte - read ADC1
 Wire.endTransmission(); // end tranmission
 Wire.requestFrom(PCF8591, 2);
 value1=Wire.read();
 value1=Wire.read();
 Wire.beginTransmission(PCF8591); // wake up PCF8591
 Wire.write(ADC2); // control byte - read ADC2
 Wire.endTransmission(); // end tranmission
 Wire.requestFrom(PCF8591, 2);
 value2=Wire.read();
 value2=Wire.read();
 Wire.beginTransmission(PCF8591); // wake up PCF8591
 Wire.write(ADC3); // control byte - read ADC3
 Wire.endTransmission(); // end tranmission
 Wire.requestFrom(PCF8591, 2);
 value3=Wire.read();
 value3=Wire.read();
 Serial.print(value0); Serial.print(" ");
 Serial.print(value1); Serial.print(" ");
 Serial.print(value2); Serial.print(" ");
 Serial.print(value3); Serial.print(" ");
 Serial.println();
}

Upon running the sketch you’ll be presented with the values of each ADC in the serial monitor. Although it was a simple demonstration to show you how to individually read each ADC, it is a cumbersome method of getting more than one byte at a time from a particular ADC.

Некоторые рекомендации

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

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

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

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

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

Схемотехника

Для наших экспе­римен­тов мы соберем отно­ситель­но нес­ложную конс­трук­цию, сос­тоящую из двух бло­ков: бло­ка управле­ния и бло­ка при­емни­ка. Блок управле­ния соберем на STM32F030, добавим к нему энко­дер, дис­плей OLED и восемь кно­пок. От кно­пок мож­но вов­се отка­зать­ся, но с ними управлять при­емни­ком нам­ного удоб­нее. За кла­виату­ру будет отве­чать PCF8574, очень удоб­ная мик­росхе­ма — рас­ширитель пор­тов с I2C-интерфей­сом. Вве­дение рас­ширите­ля пор­тов хоть и усложня­ет схе­му, но упро­щает раз­водку пла­ты и опрос кно­пок. Питать все это дело удоб­но с помощью LiPO-акку­муля­тора, поэто­му добавим туда еще кон­трол­лер заряда и DC/DC-пре­обра­зова­тель на RT9136 для питания кон­трол­лера. Исполь­зование активно­го пре­обра­зова­теля целесо­образно в пла­не повыше­ния КПД.

Схе­ма при­емни­ка

Вы­ход­ной мощ­ности SI4735 недос­таточ­но для рас­качки стан­дар­тных 32-омных науш­ников, поэто­му нужен ауди­оуси­литель, даже два, так как у нас сте­рео. В качес­тве уси­лите­ля исполь­зована мик­росхе­ма TDA2822 (PDF) в стан­дар­тном вклю­чении. Это не луч­ший вари­ант по двум при­чинам: во‑пер­вых, у нее слиш­ком высок коэф­фици­ент уси­ления, а во‑вто­рых, на мой вкус, она слиш­ком шумит. Луч­ше на эту роль подой­дет LM4863 (PDF), но у меня ее не ока­залось под рукой. Тем не менее TDA2822 недур­но справ­ляет­ся со сво­ей задачей.

В завод­ских решени­ях обыч­но исполь­зует­ся УВЧ и маг­нитная антенна, мы же пос­тупим про­ще: пос­тавим на вход филь­тр 5-го поряд­ка с час­тотой сре­за и будем исполь­зовать пол­нораз­мерную антенну — все рав­но на штырь в квар­тире мож­но ловить толь­ко помехи, FM и пару китай­ских стан­ций в хороший день. Что же каса­ется FM-вхо­да, то ему ком­фор­тно и без вход­ных цепей. Кро­ме того, саму SI4734 вмес­те со вход­ными цепями мы помес­тим в экран из жес­ти (пла­та двух­сто­рон­няя, вто­рая сто­рона — сплош­ная медь), бла­го это сов­сем не слож­но. Исполь­зование внеш­ней пол­нораз­мерной антенны силь­но сни­зит навод­ки от циф­ровой час­ти и изба­вит от УВЧ.

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

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

info

Пред­видя воп­росы, ска­жу сра­зу, что управля­ющий блок мож­но соб­рать и на Blue Pill, и на ARDUINO, в пос­леднем слу­чае на Али мож­но купить уже соб­ранную пла­ту. Обой­дет­ся это при­мер­но в 3000 руб­лей. А за допол­нитель­ные день­ги к это­му делу мож­но докупить кор­пус. Но это не наш метод, мы же соб­рались поковы­рять­ся с SI4734!

Простые схемы использования

Чтобы продемонстрировать работу датчиков звука с Arduino можно собрать простую схему:

Резистор используемый в ней, берется номиналом в 220 Ом. Основная функциональность выражается в зажигании светодиода при обнаружении громких звуков и гашения его в случае тишины. Скетч:
Изменяя время задержки, между включением и гашением светодиода, а также пробным путем выведя значения «тишины» SilenceMax и SilenceMin, можно добиться работы приведенной схемы в роли детектора движения по звуку. Конечно, качество определения у него будет низкое, но вполне позволяющее применять конструкцию в цепях управления освещением темных мест. Достаточно добавить фоторезистор для определения текущего уровня видимости, в роли которого можно использовать специальную плату Arduino или обычный радиоэлектронный компонент, подключаемый через делитель.

Как видно по схеме, в ней используются два резистора – R1 на 10 кОм и R2 220 Ом. Светодиод LED в финальном варианте можно заменить на релейную группу, для подачи питания на «взрослые» лампы 220В. Скетч, управляющий всем перечисленным хозяйством:

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

Увеличение количества цифровых GPIO входов/выходов

Плата увеличения количества GPIO портов.

Для увеличения количества цифровых входов можно воспользоваться добротной платой расширителя GPIO на 8 Входов/Выходов. Она хорошо документирована, исполнена на высоком техническом уровне. Хотя, ценник не Aliexpress-а. При изготовлении нескольких сотен устройств, себестоимость конечного устройства существенно вырастет.

Посмотрим, что есть на сей счет есть у китайских собратьев. А у них конечно-же что-то есть и недорого.

8-канальный расширитель GPIO на чипе PCF8574 с DIP переключателями для назначения I2C адреса
8-канальный расширитель GPIO на чипе PCF8574 с джамперами для назначения I2C адреса. Эту плату можно каскадировать.

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

16-ти канальный расширитель GPIO на чипе PCF8575

Старший брат TI PCF8575 позволяет получить 16 GPIO портов за цену в два раза выше. Но реализация платы попроще. никаких DIP переключателей для выбора адреса I2C. Зато 16 каналов в компактном исполнении.

Аналогичный чип от компании Microchip на 16 входов для расширения количества GPIO портов, MCP23017. Есть вариант для шины I2C и более шустрый для SPI (MCP23S17). Китайские продавцы нередко указывают в описании товара чип MCP23S17, однако по фото платы видно, что чип MCP23017

Обращайте на это внимание! Аналогичный чип на 8 портов — MCP23008

MCP23017 плата увеличения GPIO для микроконтроллеров

Цена этого варианта модуля в районе 1,5 USD. Исполнение платы попроще обойдется почти в два раза дешевле. Чип позволяет обеспечить увеличение GPIO на 8+8=16. Как и чип от Texas Instruments помимо входов для подключения устройств есть два выхода прерываний на каждый блок из 8 устройств. Этот чип позволяет работать на частоте до 1,7 МГц и 10 MHz для версии под шину SPI, в отличие от чипа PCF8574 для которого верхний предел 400 кГц. Также возможно подключение внутренних pullup резисторов на +5V. Схема подключения платы к ESP8266 разобрано здесь.

SX1509 модуль для увеличения количества GPIO.

Ещё один 8+8=16-ти канальный расширитель количества GPIO с Aliexpress на чипе SX1509. Библиотека и описание от Sparkfun. Чип дороже, чем ранее представленные. По ТТХ чип очень похож на ранее рассмотренные варианты. Работает на частоте 400 кГц. Есть встроенная поддержка ШИМ (PWM) на выходах.

Чип «заточен» для работы с LED и клавиатурой. В части LED из-за наличия ШИМ позволяет управлять яркостью светодидов, выполнять затухание, моргание и пр. Есть в наличии выход INT для трансляции прерываний микроконтроллеру. Поддерживаются встроенные pull-up, pull-down резисторы на входах.

GPIO expander от Fairchild (ON Semiconductor) FXL6408UMX. Аналогично 8 портов управляемых по шине I2C. Datasheet.

Прошивка

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

Итак, что же за зверь SI4734 и с чем его едят? Этот чип управля­ется по шине I2C, и каж­дая посыл­ка пред­став­ляет собой адрес мик­росхе­мы (с битом перек­лючения запись/чте­ние), 1 байт коман­ды и до 7 байт аргу­мен­тов. У каж­дой коман­ды свое количес­тво аргу­мен­тов, впро­чем, даташит говорит, что посыл­ки мож­но сде­лать и фик­сирован­ной дли­ны, если вмес­то неис­поль­зуемых аргу­мен­тов слать . Для наших целей понадо­бит­ся не так мно­го команд, поэто­му мы можем поз­волить себе написать для каж­дой свою фун­кцию. Резуль­татом выпол­нения коман­ды мож­но счи­тать ответ, сос­тоящий из бай­та ста­туса и до 7 байт собс­твен­но отве­та, при­чем и здесь допус­кает­ся уни­фика­ция дли­ны: мож­но читать по 8 байт, все неис­поль­зуемые будут .

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

Для отправ­ки и чте­ния пакетов по I2C мы будем исполь­зовать уже извес­тную нам коман­ду биб­лиоте­ки LibopenCM3 , где  — исполь­зуемая шина I2C (I2C1), а  — семибит­ный адрес . О бите записи/чте­ния за нас позабо­тит­ся биб­лиоте­ка. В ито­ге работа с мик­росхе­мой вкрат­це будет пред­став­лять собой сле­дующую пос­ледова­тель­ность дей­ствий: ини­циали­зация, нас­трой­ка режима работы, нас­трой­ка на нуж­ную час­тоту. Все опи­сан­ное ниже опи­рает­ся на содер­жание докумен­тов AN332 «Si47XX Programming Guide» и AN332SSB.

Инициализация

Преж­де все­го SI4734 нуж­но ини­циали­зиро­вать. Сде­лать это мож­но в одном из трех режимов: AM, FM или SSB. Перед началом ини­циали­зации докумен­тация рекомен­дует выпол­нить сброс. Дела­ется это три­виаль­но: надо ненадол­го под­тянуть к зем­ле REST-пин SI4734. Для задер­жки исполь­зует­ся совер­шенно ленивая фун­кция, бла­го точ­ность тут не име­ет осо­бого зна­чения.

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

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

Заключение

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

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

Предыдущая
ArduinoМастер-класс «Люстра-паук» своими руками
Следующая
ArduinoКак управлять шаговым двигателем через Arduino

Спасибо, помогло!Не помогло

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

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

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: