Контроллеры Arduinо Nano и их аналоги имеют компактные размеры и нашли широкое применение в проектах, где важны размеры. Однако, подключение периферии к таким контроллерам всегда затруднительно. На помощь приходит Nano Sensor Shield.
Nano Sensor Shield имеет функционал, аналогичный классическим Sensor Shield для контроллеров Arduino Uno и Arduino Mega и позволяет подключать большое количество датчиков и модулей с помощью трехпроводных шлейфов (S, +, -). С помощью платы можно одновременно подключить до 8 аналоговых и до 12 цифровых устройств. Также дополнительные выводы на плате позволяют подключать устройства, работающие по интерфейсам I2C, UART и SPI.
Nano Sensor Shield полностью совместим с контроллерами Arduino Nano и Smart Nano. Также шилд можно ограниченно использовать с контроллерами Arduino Pro Mini (только 5 В, 16 мГц), при этом данной плате будут соответствовать только цифровые выводы D2-D9 включительно и вывод шины UART. Также Arduino Pro Mini использует выводы D10-D13 и A0-A3.
Для крепления Nano Sensor Shield по углам платы предусмотрены 4 отверстия под винт М3.
Сделаем шумомер на основе датчика звука и модуля адресных светодиодов. Чем громче звук, тем больше загорается светодиодов (от 1 до 4), причем цвета светодиодов будут меняться: первый - зелёный, второй - жёлто-зелёный, третий - жёлтый, четвертый - красный.
Для этого нам потребуется следующее:
Что нужно | Кол-во, шт |
---|---|
Контроллер Smart Nano | 1 |
Nano Sensor Shield | 1 |
Модуль адресных светодиодов (х4) | 1 |
Датчик звука | 1 |
Шлейф x3 | 2 |
Схема сборки:
Не забывайте выбирать в Arduino IDE контроллер Nano.
#include <Adafruit_NeoPixel.h> //библиотека для работы со светодиодами
#define SOUND_PIN A3 //вывод, к которому подключен датчик звука
#define PIN 6 //вывод, к которому подключен модуль адресных светодиодов
//объявление переменной pixels типа Adafruit_NeoPixel для
//работы с модулем и светодиодами
Adafruit_NeoPixel pixels(4, PIN);
//цвета светодиодов
int pix_colors[4][3] = { {0, 255, 0}, //зелёный
{50, 200, 0}, //жёлто-зелёный
{150, 150, 0}, //жёлтый
{255, 0, 0} //красный
};
int data = 0; //переменная для хранения значения громкости
void setup() {
pixels.begin(); //инициализация светодиодов
}
void loop() {
int leds = 0; //переменная для хранения количества светодиодов
data = analogRead(SOUND_PIN); //получение значения громкости
if (data > 0) { //определение количества зажигаемых светодиодов
if (data > 100) {
leds = 4;
} else if (data > 50) {
leds = 3;
} else if (data > 25) {
leds = 2;
} else {
leds = 1;
}
}
//нумерация светодиодов начинается с 0
for(int i=0; i<leds; i++) {
pixels.setPixelColor(i, pixels.Color(pix_colors[i][0], pix_colors[i][1], pix_colors[i][2])); //установка цвета свечения для очередного светодиода
pixels.show(); //показать цвет светодиода
}
pixels.clear(); //выключение всех цветов светодиодов
pixels.show(); //отобразить "пустое" состояние светодиодов - они выключены */
}
Производите звук (хлопайте в ладоши, шумите) и наблюдайте как изменяется шкала интенсивности звука в виде зажигания адресных светодиодов.
Реализуем устройство, которое подсчитывает количество хлопков в ладоши. После подсчёта количество хлопков выводится на дисплей. Каждый последующий хлопок нужно сделать не позже чем через секунду от предыдущего (это время можно изменить если нужно).
Для этого нам потребуется следующее:
Что нужно | Кол-во, шт |
---|---|
Контроллер Smart Nano | 1 |
Nano Sensor Shield | 1 |
Модуль 4-разрядного индикатора | 1 |
Датчик звука | 1 |
Шлейф x3 | 2 |
Провод мама-мама | 1 |
Схема сборки:
Не забывайте выбирать в Arduino IDE контроллер Nano.
#include <SevenSegmentTM1637.h> //Подключение библиотеки для работы с дисплеем.
const int PIN_SOUND = A3; //Вывод для подключения датчика температуры
int clap_q = 0; //Переменная для хранения количества хлопков
unsigned long time_long = 1000; //Время, в течении которого будет слушаться звук
SevenSegmentTM1637 display(12, 13); //Создание объекта дисплея. (CLK, DIO)
//Вычисление количества хлопков
void claps_quantity()
{
if (analogRead(PIN_SOUND) > 100) //если значение шума больше 100
{
delay(150); //подождать пока пройдёт звуковая волна
clap_q += 1; //увеличить количество хлопков
unsigned long new_time = millis() + time_long; //увеличить время ожидания очередного хлопка
while (millis() < new_time) //слушать 1 секунду
{
claps_quantity(); //учесть хлопки, если они есть
}
}
}
void setup()
{
display.begin(); //Инициализация дисплея.
display.setBacklight(100); //Установка яркости 100%.
display.print("INIT"); //Вывод надписи INIT на дисплей.
delay(1000); //Задержка величиной 1 с.
display.clear(); //Очистка дисплея.
}
void loop()
{
clap_q = 0; //сбросить количество хлопков
claps_quantity(); //посчитать количество хлопков
if (clap_q > 0) //если хлопков больше 0
{
display.clear(); //очистить дисплей
display.print(clap_q); //вывести количество хлопков на дисплей
display.blink(); //помигать, обозначив что это новое значение
}
}
Производите хлопки (хлопайте в ладоши) и наблюдайте как подсчитанное количество хлопков выводится на дисплей.