Электронное приложение к набору «IO.KIT Базовый»
На этой странице ты найдёшь все нужные материалы для сборки мини-проектов из базового набора IO.KIT:
- Схемы проектов в электронном виде.
- Исходный код программ (копируй его в редактор Arduino IDE).
- Дополнительные материалы: программные библиотеки, даташиты и т. п.
Обрати внимание
IO.KIT Базовый понадобится для сборки всех дополнений IO.KIT.
Проекты
Прежде чем приступать к экспериментам, нужно подготовить свой компьютер:
- Установи среду программирования Arduino IDE и копируй туда готовый код проектов.
- Установи дополнительные библиотеки для Arduino IDE, пользуясь нашим руководством.
Драйвер чипа CH340
Установи драйвер CH340 для Windows или Linux, чтобы твой компьютер мог корректно распознать и прошить плату Iskra Nano.
№1. Маячок
- Blink.ino
- // Даём понятное имя светодиоду на пине 5
- constexpr int LED_PIN = 5;
- void setup() {
- // Настраиваем пин со светодиодом в режим выхода
- pinMode(LED_PIN, OUTPUT);
- }
- void loop() {
- // Зажигаем светодиод
- digitalWrite(LED_PIN, HIGH);
- // Ждём 500 мс
- delay(500);
- // Гасим светодиод
- digitalWrite(LED_PIN, LOW);
- // Ждём 500 мс
- delay(500);
- }
№2. Дыхание света
- LedBrightness.ino
- // Даём понятное имя светодиоду на пине 5
- constexpr int LED_PIN = 5;
- void setup() {
- // Настраиваем пин со светодиодом в режим выхода
- pinMode(LED_PIN, OUTPUT);
- }
- void loop() {
- // Создаём цикл для перебора всех значений от 0 до 255
- for (int brightness = 0; brightness <= 255; brightness++) {
- // Выдаём на светодиод ШИМ-сигнал
- analogWrite(LED_PIN, brightness);
- // Ждём 10 мс
- delay(10);
- }
- }
№3. Детектор нажатий
- ButtonConsole.ino
- // Подключаем библиотеку для работы с кнопкой
- #include <TroykaButton.h>
- // Создаём объект кнопки на пине 2
- TroykaButton button(2);
- void setup() {
- // Открываем монитор Serial-порта
- Serial.begin(9600);
- // Инициализируем кнопку
- button.begin();
- }
- void loop() {
- // Считываем данные с кнопки
- button.read();
- // Определяем нажатие кнопки
- if (button.justPressed()) {
- // Печатаем фиксацию нажатия в консоль
- Serial.println("Key was just pressed");
- }
- }
№4. Фонарик
- SwitchLight.ino
- // Подключаем библиотеку для работы с кнопкой
- #include <TroykaButton.h>
- // Даём понятное имя светодиоду на пине 5
- constexpr int LED_PIN = 5;
- // Создаём объект кнопки на пине 2
- TroykaButton button(2);
- // Создаём переменную для хранения состояния светодиода
- bool state = false;
- void setup() {
- // Открываем монитор Serial-порта
- Serial.begin(9600);
- // Инициализируем кнопку
- button.begin();
- // Настраиваем пин со светодиодом в режим выхода
- pinMode(LED_PIN, OUTPUT);
- }
- void loop() {
- // Считываем данные с кнопки
- button.read();
- // Определяем нажатие кнопки
- if (button.justPressed()) {
- // Инвертируем состояние светодиода
- state = !state;
- digitalWrite(LED_PIN, state);
- }
- }
№5. Трекинг поворота
- PotConsole.ino
- // Даём понятное имя потенциометру на пине A2
- constexpr int POT_PIN = A2;
- void setup() {
- // Открываем монитор Serial-порта
- Serial.begin(9600);
- // Настраиваем пин с потенциометром в режим входа
- pinMode(POT_PIN, INPUT);
- }
- void loop() {
- // Считываем аналоговый сигнал с потенциометра
- int rotation = analogRead(POT_PIN);
- // Преобразуем диапазон значений с потенциометра [0;1023]
- // в процентный диапазон значений [0;100]
- int percent = map(rotation, 0, 1023, 0, 100);
- // Выводим результат в консоль
- Serial.print("Value = ");
- Serial.println(percent);
- }
№6. Диммер
- Dimmer.ino
- // Даём понятное имя светодиоду на пине 5
- constexpr int LED_PIN = 5;
- // Даём понятное имя потенциометру на пине A2
- constexpr int POT_PIN = A2;
- void setup() {
- // Настраиваем пин со светодиодом в режим выхода
- pinMode(LED_PIN, OUTPUT);
- // Настраиваем пин с потенциометром в режим входа
- pinMode(POT_PIN, INPUT);
- }
- void loop() {
- // Считываем аналоговый сигнал с потенциометра
- int rotation = analogRead(POT_PIN);
- // Преобразуем диапазон значений с потенциометра [0;1023]
- // в диапазон значений для светодиода [0;255]
- int brightness = map(rotation, 0, 1023, 0, 255);
- // Выдаём результат на светодиод
- analogWrite(LED_PIN, brightness);
- }
№7. Синтезатор
- FrequencyRange.ino
- // Даём понятное имя пищалке на пине 12
- constexpr int BUZZER_PIN = 12;
- // Даём понятное имя потенциометру на пине A2
- constexpr int POT_PIN = A2;
- void setup() {
- // Настраиваем пин с пищалкой в режим выхода
- pinMode(BUZZER_PIN, OUTPUT);
- // Настраиваем пин с потенциометром в режим входа
- pinMode(POT_PIN, INPUT);
- }
- void loop() {
- // Считываем аналоговый сигнал с потенциометра
- int rotation = analogRead(POT_PIN);
- // Преобразуем диапазон значений с потенциометра [0;1023]
- // в диапазон значений для зуммера [20;20000]
- int freq = map(rotation, 0, 1023, 20, 20000);
- // Заставляем пин с пищалкой звучать на высчитанной частоте
- tone(BUZZER_PIN, freq);
- }
№8. Плеер
- PlayMusic.ino
- // Подключаем библиотеку для работы с мелодиями в формате RTTTL
- #include <anyrtttl.h>
- // Подключаем библиотеку для работы с кнопкой
- #include <TroykaButton.h>
- // Даём понятное имя пищалке на пине 12
- constexpr uint8_t BUZZER_PIN = 12;
- // Создаём объект кнопки на пине 2
- TroykaButton button(2);
- // Мелодия «Имперский марш» в формате RTTTL
- const char* imperMarch = "imperMarch:d=8,o=5,b=95:"
- "4a4,4a4,4a4,f.4,16c,4a4,f.4,16c,"
- "2a4,4e,4e,4e,f.,16c,4g#4,f.4,"
- "16c,2a4,4a,a.4,16a4,4a,g#.,16g,"
- "16f#,16e,f,p,a#4,4d#,d.,16c#,16c,"
- "16b4,c,p,f4,4g#4,f.4,16a4,4c,"
- "a.4,16c,2e,4a,a.4,16a4,4a,g#.,"
- "16g,16f#,16e,f,p,a#4,4d#,d.,"
- "16c#,16c,16b4,c,p,f4,4g#4,f.4,"
- "16c,4a4,f.4,16c,2a4";
- // Мелодия «Марио» в формате RTTTL
- const char* marioBroth = "marioBroth:d=4,o=5,b=100:"
- "16e6,16e6,32p,8e6,16c6,8e6,8g6,8p,"
- "8g,8p,8c6,16p,8g,16p,8e,16p,"
- "8a,8b,16a#,8a,16g.,16e6,16g6,8a6,"
- "16f6,8g6,8e6,16c6,16d6,8b,16p,8c6,"
- "16p,8g,16p,8e,16p,8a,8b,16a#,"
- "8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,"
- "16c6,16d6,8b,8p,16g6,16f#6,16f6,16d#6,"
- "16p,16e6,16p,16g#,16a,16c6,16p,16a,"
- "16c6,16d6,8p,16g6,16f#6,16f6,16d#6,16p,"
- "16e6,16p,16c7,16p,16c7,16c7,p,16g6,"
- "16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,"
- "16c6,16p,16a,16c6,16d6,8p,16d#6,8p,"
- "16d6,8p,16c6";
- // Мелодия «Миссия невыполнима» в формате RTTTL
- const char* missionImp = "missionImp:d=16,o=6,b=95:"
- "32d,32d#,32d,32d#,32d,32d#,32d,32d#,"
- "32d,32d,32d#,32e,32f,32f#,32g,g,8p,"
- "g,8p,a#,p,c7,p,g,8p,"
- "g,8p,f,p,f#,p,g,8p,"
- "g,8p,a#,p,c7,p,g,8p,"
- "g,8p,f,p,f#,p,a#,g,"
- "2d,32p,a#,g,2c#,32p,a#,g,"
- "2c,a#5,8c,2p,32p,a#5,g5,2f#,"
- "32p,a#5,g5,2f,32p,a#5,g5,2e,"
- "d#,8d";
- void setup() {
- // Инициализируем кнопку
- button.begin();
- // Настраиваем пин с пищалкой в режим выхода
- pinMode(BUZZER_PIN, OUTPUT);
- }
- void loop() {
- // Считываем данные с кнопки
- button.read();
- // Определяем нажатие кнопки
- if (button.justPressed()) {
- // Запускаем мелодию
- anyrtttl::blocking::play(BUZZER_PIN, imperMarch);
- }
- }
№9. Плеер со светомузыкой
- PlayMusicLight.ino
- // Подключаем библиотеку для работы с мелодиями в формате RTTTL
- #include <anyrtttl.h>
- // Подключаем библиотеку для работы с кнопкой
- #include <TroykaButton.h>
- // Даём понятное имя пищалке на пине 12
- constexpr uint8_t BUZZER_PIN = 12;
- // Даём понятное имя светодиоду на пине 5
- constexpr uint8_t LED_PIN = 5;
- // Создаём объект кнопки на пине 2
- TroykaButton button(2);
- // Мелодия «Имперский марш» в формате RTTTL
- const char* imperM = "imperMarch:d=8,o=5,b=95:"
- "4a4,4a4,4a4,f.4,16c,4a4,f.4,16c,"
- "2a4,4e,4e,4e,f.,16c,4g#4,f.4,"
- "16c,2a4,4a,a.4,16a4,4a,g#.,16g,"
- "16f#,16e,f,p,a#4,4d#,d.,16c#,16c,"
- "16b4,c,p,f4,4g#4,f.4,16a4,4c,"
- "a.4,16c,2e,4a,a.4,16a4,4a,g#.,"
- "16g,16f#,16e,f,p,a#4,4d#,d.,"
- "16c#,16c,16b4,c,p,f4,4g#4,f.4,"
- "16c,4a4,f.4,16c,2a4";
- // Мелодия «Марио» в формате RTTTL
- const char* marioB = "marioBroth:d=4,o=5,b=100:"
- "16e6,16e6,32p,8e6,16c6,8e6,8g6,8p,"
- "8g,8p,8c6,16p,8g,16p,8e,16p,"
- "8a,8b,16a#,8a,16g.,16e6,16g6,8a6,"
- "16f6,8g6,8e6,16c6,16d6,8b,16p,8c6,"
- "16p,8g,16p,8e,16p,8a,8b,16a#,"
- "8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,"
- "16c6,16d6,8b,8p,16g6,16f#6,16f6,16d#6,"
- "16p,16e6,16p,16g#,16a,16c6,16p,16a,"
- "16c6,16d6,8p,16g6,16f#6,16f6,16d#6,16p,"
- "16e6,16p,16c7,16p,16c7,16c7,p,16g6,"
- "16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,"
- "16c6,16p,16a,16c6,16d6,8p,16d#6,8p,"
- "16d6,8p,16c6";
- // Мелодия «Миссия невыполнима» в формате RTTTL
- const char* misImp = "missionImpossible:d=16,o=6,b=95:"
- "32d,32d#,32d,32d#,32d,32d#,32d,32d#,"
- "32d,32d,32d#,32e,32f,32f#,32g,g,8p,"
- "g,8p,a#,p,c7,p,g,8p,"
- "g,8p,f,p,f#,p,g,8p,"
- "g,8p,a#,p,c7,p,g,8p,"
- "g,8p,f,p,f#,p,a#,g,"
- "2d,32p,a#,g,2c#,32p,a#,g,"
- "2c,a#5,8c,2p,32p,a#5,g5,2f#,"
- "32p,a#5,g5,2f,32p,a#5,g5,2e,"
- "d#,8d";
- // Функция переопределения мелодии RTTTL в функцию tone
- // В нашем проекте не используется
- // void customTone(byte pin, uint16_t frequency, uint32_t duration) {
- // tone(pin, frequency, duration);
- // }
- // Функция переопределения мелодии RTTTL в функцию noTone
- // В нашем проекте не используется
- // void customNoTone(byte pin) {
- // noTone(pin);
- // }
- // Функция переопределения мелодии RTTTL в функцию delay
- void customDelay(uint32_t duration) {
- // Соотношения задержки свечения от общей длительности ноты
- // Диапазон от 0.00 до 1.00
- float ledDurationRatio = 0.25;
- digitalWrite(LED_PIN, HIGH);
- delay(duration * ledDurationRatio);
- digitalWrite(LED_PIN, LOW);
- delay(duration * (1 - ledDurationRatio));
- }
- void setup() {
- // Инициализируем кнопку
- button.begin();
- // Настраиваем пин с пищалкой в режим выхода
- pinMode(BUZZER_PIN, OUTPUT);
- // Настраиваем пин со светодиодом в режим выхода
- pinMode(LED_PIN, OUTPUT);
- // Переопределяем мелодию RTTTL в кастомную функцию delay
- anyrtttl::setDelayFunction(&customDelay);
- // Если понадобится, можно передать также свои определения функций
- // tone и noTone. Но для нашего проекта это не нужно.
- //anyrtttl::setToneFunction(&customTone);
- //anyrtttl::setNoToneFunction(&customNoTone);
- }
- void loop() {
- // Считываем данные с кнопки
- button.read();
- // Определяем нажатие кнопки
- if (button.justPressed()) {
- // Запускаем мелодию
- anyrtttl::blocking::play(BUZZER_PIN, imperM);
- }
- }
Ресурсы
- Наборы IO.KIT в магазине