Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
products:laboratory_iot:exp24 [2020/05/17 12:51] – создано labuser29products:laboratory_iot:exp24 [2020/05/18 15:41] (текущий) – [Программный код эксперимента] labuser29
Строка 1: Строка 1:
 +===== Эксперимент 24. Музыкальный автомат =====
 +
 +Теперь создадим настоящий музыкальный автомат. Мы подготовим для него запись мелодии, а он будет ее воспроизводить. Возьмем всем известную мелодию "В лесу родилась ёлочка"
 +
 +{{ :products:esp-iot:v_lesu_rodilas_jolochka7.png?nolink |}}
 +//Рисунок 1. Ноты мелодии "В лесу родилась ёлочка"//
 +
 +Если ты не разбираешься в музыкальной грамоте, то не беда. Эксперимент получится и без этого, ведь мы уже перевели эту нотную запись в "язык" для нашего музыкального автомата. Но если тебе интересно, и ты хочешь сделать запись другой мелодии, то [[https://soundtimes.ru/uroki-muzyki/notnaya-gramota-dlya-nachinayushchikh-muzykantov|начать знакомство с нотной грамотностью можно, например, здесь]].
 +
 +
 +==== Схема эксперимента ====
 +
 +{{ :products:esp-iot:exp7_sch.png?nolink |}}
 +//Рисунок 1. Электрическая принципиальная схема эксперимента//
 +
 +{{ :wiki:exp7_mont.png?direct&600 |}}
 +//Рисунок 2. Монтажная схема эксперимента//
 +
 ==== Программный код эксперимента ==== ==== Программный код эксперимента ====
 +<file python Exp24.py[enable_line_numbers="2", start_line_numbers_at="1"]>
 +from machine import Pin, PWM
 +import time
 +_init()
  
-<file python Exp24.py[enable_line_numbers="​2",​ start_line_numbers_at="​1"​]>+tempo = 2
  
-<​file>+tones = { 
 +    'c': 262, 
 +    'd': 294, 
 +    'e': 330, 
 +    'f': 349, 
 +    'g': 392, 
 +    'a': 440, 
 +    'b': 494, 
 +    'C': 523 
 +}
  
 +speaker = PWM(Pin(15, Pin.OUT))
 +
 +melody = 'caagafcccaabgCCddbbagfcaagafCddbbagfcaagaf'
 +rhythm = [8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 8, 8, 8, 8, 8, 8, 8, 
 +8, 8, 8, 8, 8, 8, 3, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 2]
 +
 +for tone, length in zip(melody, rhythm):
 +    speaker.duty(512)
 +    speaker.freq(tones[tone])
 +    time.sleep(tempo/length)
 +    speaker.duty(0)
 +    time.sleep(tempo/length/4)
 +</file>
 +
 +В перменной ''melody'' записаны ноты мелодии, а в массиве ''rhythm'' их длительности.
 ==== Дополнительное задание ==== ==== Дополнительное задание ====
 <WRAP center round tip 60%> <WRAP center round tip 60%>
- * Попробуй записать и воспроизвести другую мелодию,​ например "В траве сидел кузнечик"​ +  * Попробуй записать и воспроизвести другую мелодию,​ например "В траве сидел кузнечик"​ 
-</WRAP>+</WRAP> 
 +