Зуммер и сервопривод SG-90
Тема: Вывод звука с помощью зуммера и управление сервоприводом SG-90. Библиотека Servo, функция tone().
Цель: освоить два новых типа вывода — звук и механическое движение; научиться подключать зуммер и сервопривод, использовать библиотеку Servo, управлять углом поворота и частотой звука; закрепить работу с #define, вводом с потенциометра и кнопки.
Оборудование: Arduino UNO, USB-кабель, макетная плата, провода, зуммер, сервопривод SG-90, потенциометр, кнопка, резистор 10 кОм.
#define, pinMode, digitalRead, analogRead, analogWrite, if ... else, INPUT_PULLUP.digitalWrite(BUZZER, HIGH).tone().HIGH зуммер молчит — он пассивный. Если пищит — активный.tone():
tone(BUZZER, 440); // включить звук частотой 440 Гц (нота «ля»)
delay(500);
noTone(BUZZER); // выключить звук
tone — от англ. tone — «тон, звук». Включает звук заданной частоты.noTone — «нет тона». Выключает звук.Servo. Библиотека — от англ. library — «хранилище». Это готовый набор команд, который подключают к скетчу.#include <Servo.h> // подключаем библиотеку
Servo myServo; // создаём объект — «наш сервопривод»
setup():
myServo.attach(SERVO_PIN); // привязываем сервопривод к пину
loop():
myServo.write(90); // повернуть на 90°
#include — от англ. include — «включать». Подключает библиотеку.attach — от англ. attach — «прикрепить, привязать». Сообщает, к какому пину подключён сервопривод.write — «записать». Передаёт угол поворота.
#define BUZZER 8
void setup() {
pinMode(BUZZER, OUTPUT);
}
void loop() {
tone(BUZZER, 440);
delay(500);
noTone(BUZZER);
delay(500);
}
Задание: изменить частоту: 262, 330, 494. Сравнить, как звучит.
#define BUZZER 8
void setup() {
pinMode(BUZZER, OUTPUT);
}
void loop() {
tone(BUZZER, 400);
delay(300);
tone(BUZZER, 800);
delay(300);
}
Задание: сделать «пожарную сирену», «звук капли», «звук робота» — меняя частоты и задержки.
#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);
}
Задание: сыграть «Чижик-пыжик» или другую простую мелодию.
#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);
}
Задание: изменить углы и задержки. Сделать так, чтобы сервопривод двигался как маятник часов.
#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.
#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);
}
}
tone()? Что измеряется в герцах?Servo?myServo.attach() и myServo.write()?Зуммер, активный, пассивный, tone, noTone, частота, герц, сервопривод, servo, SG-90, угол, #include, библиотека, Servo, attach, write, myServo, analogRead, digitalRead, INPUT_PULLUP, if, else, LED_R-стиль именования: BUZZER, SERVO_PIN, BTN, POT.