arduino-classes

04. Звук и движение

Зуммер и сервопривод SG-90

Тема: Вывод звука с помощью зуммера и управление сервоприводом SG-90. Библиотека Servo, функция tone().
Цель: освоить два новых типа вывода — звук и механическое движение; научиться подключать зуммер и сервопривод, использовать библиотеку Servo, управлять углом поворота и частотой звука; закрепить работу с #define, вводом с потенциометра и кнопки.
Оборудование: Arduino UNO, USB-кабель, макетная плата, провода, зуммер, сервопривод SG-90, потенциометр, кнопка, резистор 10 кОм.


Ход урока

1. Повторение (5 мин)

2. Новые типы вывода (5 мин)

3. Зуммер: активный и пассивный (10 мин)

4. Сервопривод SG-90 (10 мин)

5. Правила подключения (5 мин)

  1. Зуммер: «+» (длинная ножка или метка) → к пину, «−» → к GND.
  2. Сервопривод: коричневый → GND, красный → 5V, оранжевый → пин.
  3. Зуммер и сервопривод подключаем к разным пинам, чтобы работали одновременно.
  4. Сервопривод не крутим руками — можно сломать редуктор.
  5. Не подключаем сервопривод к пинам 0 и 1 — они используются для связи с компьютером.

6. Схема подключения (одновременная работа) (5 мин)

Зуммер, сервопривод

7. Практика 1: пищалка (7 мин)

#define BUZZER 8

void setup() {
  pinMode(BUZZER, OUTPUT);
}

void loop() {
  tone(BUZZER, 440);
  delay(500);
  noTone(BUZZER);
  delay(500);
}

Задание: изменить частоту: 262, 330, 494. Сравнить, как звучит.

8. Практика 2: сирена (8 мин)

#define BUZZER 8

void setup() {
  pinMode(BUZZER, OUTPUT);
}

void loop() {
  tone(BUZZER, 400);
  delay(300);
  tone(BUZZER, 800);
  delay(300);
}

Задание: сделать «пожарную сирену», «звук капли», «звук робота» — меняя частоты и задержки.

9. Практика 3: мелодия (8 мин)

#define BUZZER 8

void setup() {
  pinMode(BUZZER, OUTPUT);
}

void loop() {
  tone(BUZZER, 262); delay(300);  // до
  tone(BUZZER, 294); delay(300);  // ре
  tone(BUZZER, 330); delay(300);  // ми
  tone(BUZZER, 349); delay(300);  // фа
  tone(BUZZER, 392); delay(300);  // соль
  noTone(BUZZER);
  delay(1000);
}

Задание: сыграть «Чижик-пыжик» или другую простую мелодию.

10. Практика 4: сервопривод-стрелка (8 мин)

#include <Servo.h>

#define SERVO_PIN 9
Servo myServo;

void setup() {
  myServo.attach(SERVO_PIN);
}

void loop() {
  myServo.write(0);
  delay(1000);
  myServo.write(90);
  delay(1000);
  myServo.write(180);
  delay(1000);
  myServo.write(90);
  delay(1000);
}

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

11. Практика 5: сервопривод от потенциометра (8 мин)

#include <Servo.h>

#define SERVO_PIN 9
#define POT A0
Servo myServo;

void setup() {
  myServo.attach(SERVO_PIN);
}

void loop() {
  int value = analogRead(POT);   // 0..1023
  int angle = value / 6;         // 0..170
  myServo.write(angle);
  delay(15);
}

Задание: сделать так, чтобы при повороте ручки сервопривод плавно поворачивался. Подобрать делитель так, чтобы угол шёл от 0 до 180.

12. Практика 6: сигнализация (5 мин)

#include <Servo.h>

#define BUZZER 8
#define SERVO_PIN 9
#define BTN 2

Servo myServo;

void setup() {
  pinMode(BUZZER, OUTPUT);
  pinMode(BTN, INPUT_PULLUP);
  myServo.attach(SERVO_PIN);
}

void loop() {
  int state = digitalRead(BTN);

  if (state == LOW) {
    tone(BUZZER, 800);
    myServo.write(90);
  } else {
    noTone(BUZZER);
    myServo.write(0);
  }
}

13. Вопросы для обсуждения (5 мин)

  1. Чем отличается активный зуммер от пассивного?
  2. Что делает tone()? Что измеряется в герцах?
  3. Как выключить звук?
  4. Что такое библиотека? Зачем нужна Servo?
  5. Что делает myServo.attach() и myServo.write()?
  6. Почему сервопривод может дёргаться при питании от Arduino?
  7. Почему нельзя крутить сервопривод руками?
  8. Как перевести значение с потенциометра (0…1023) в угол (0…180)?

14. Итог и рефлексия (5 мин)


Ключевые слова для запоминания

Зуммер, активный, пассивный, tone, noTone, частота, герц, сервопривод, servo, SG-90, угол, #include, библиотека, Servo, attach, write, myServo, analogRead, digitalRead, INPUT_PULLUP, if, else, LED_R-стиль именования: BUZZER, SERVO_PIN, BTN, POT.