Как удивить гостей и напугать детей

Мастер назвал свою самоделку «Заколдованная книга». Если дотронутся до нее, то она будет дрожать, смеяться*, а страницы будут светиться зеленым светом. Крышка попытается открыть, и иногда внутренняя часть книги будет светиться жутко-синим.
*К сожалению, на видео звук почти не слышен.
[media=https://youtu.be/0CINZ-moScY]
Инструменты и материалы:
-Книга;
-Arduino Nano;
-Модуль записи голоса ISD1820;
-Динамик 8 Ом;
-Серводвигатель;
-Реле;
-Двигатель постоянного тока 5В;
-Металлический грузик;
-Три светодиода (два зеленых и один синий);
-Одна палочка для мороженого;
-Два маленьких винта;
-Резисторы 220 Ом — 3 шт;
-Резистор 1 МОм;
-Пьезокерамический элемент;
-Переключатель;
-Провода;
-Деревянная планка;
-Прозрачный акрил;
-Клей;
-Термоусадочная трубка;

Шаг первый: подготовка
Теперь начинаем подготовку материала.
1.Сначала нужно открыть книгу и отсчитать 25 листов. Первые 25 страниц должны оставаться целыми и не склеенными. Дальше нужно отступить от каждой стороны по 1,5 см и вырезать прямоугольное отверстие до обложки. Затем нужно вырезать и прикрутить к обложки планку по размерам отверстия.

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

3. Звуковой модуль ISD1820 позволяет записывать и затем воспроизводить звук. Мастер записал на него смех.
Для записи нужно выполнить следующие действия:
Подключите ISD1820 к 5В и GND Nano. Подключите Nano к USB-порту и воспроизводите звук, который вы хотите записать, рядом с микрофоном ISD1820. Теперь звук загружен в память рекордера.

4. Сервомотор поставляется с несколькими маленькими белыми рычагами. Нужно просверлить два отверстия в палочке для мороженого и прикрутите ее к одному из рычагов. Лучше всего подойдет рычаг, у которого одна штанга. Затем нужно повернуть рычаг серводвигателя по часовой стрелке до упора. Также можно написать короткую программу для установки сервопривода на 0 градусов.

5. Реле предназначено для двигателя постоянного тока. Подключаем основной провод питания к общему разъему, а положительный провод двигателя постоянного тока к нормально разомкнутому разъему.

6. Припаиваем резисторы 220 Ом к светодиодам, как показано на схеме.

7. У пьезодиска один провод припаян к центральной контактной площадке, второй к боковой. Для подключения нужно один провод подключить к земле, а другой — к аналоговому выводу Nano. Провода должны быть достаточно длинными, чтобы и можно было протянуть через страницы к внутренней обложке книги. Между проводами нужно припаять резистор 1 МОм.

Шаг второй: программирование
Из-за ограниченного пространства нужно загрузить программу на Ардуино, прежде чем помещать плату в книгу.
В коде для демонстрационного видео мастер установил задержку между действиями в одну секунду (1000 миллисекунд). Для лучшего эффекта следует устанавливать время от 30 до 60 секунд (от 30000 до 60000 миллисекунд).
Код можно скачать ниже.
/* Bewitched Book Sketch by John Shute (not a pro by any stretch of the imagination). I declare
this code to be public domain and I except no responsibility for anything.
The code will control several functions intended to make a book appear to be haunted.
*/
#include <Servo.h> //Library
Servo servo; //declare the servo motor
int pos = 0; //position variable
int i = 0; // count variable
int val = 0; //value for knock sensor
const int KnockSensor = A0; //knock sensor
const int THRESHOLD = 350; //How hard a Knock to start Cases (o to 1023)
int pwmLED = 5; //Green Fading Leds
int pwmLED2 = 6; // " " "

void setup() {

Serial.begin (9600); //for debugging
pinMode(A0, INPUT); // Knocksensor Pin
pinMode(3, OUTPUT); // Open book
pinMode(4, OUTPUT); // Rumble Motor
pinMode(7, OUTPUT); // Blue light
pinMode(8, OUTPUT); // Evil Laugh
pinMode(pwmLED, OUTPUT); // Green Fade (pin 5)
pinMode(pwmLED2, OUTPUT); // Green fade (pin 6)

}

void loop() {
sensor(); // check the sensor
haunt(); // start the program
}
void sensor() {
val = analogRead(KnockSensor); // read the knock sensor
if (val < THRESHOLD) { // if sensor not activated,
sensor(); // keep checking
}
else { // if the sensor is disturbed
haunt(); // go to haunting actions
}
}
void haunt() { //begin actions

delay(5000); //wait 5 seconds

// Rumble Motor, Relay to rumble motor turned on, book vibrates
digitalWrite(4, HIGH); //turn on the rumble motor
delay(700); //run 7 milliseconds
digitalWrite(4, LOW); // stop

delay(20000); //wait——CHANGE THIS VALUE TO ADJUST THE DELAY BETWEEN ACTIONS.
//(1000); IS 1 SECOND. (60000); IS 1 MINUTE).

// Evil Laugh, recording plays
digitalWrite(8, HIGH); // recording plays
delay(3000); // time for recording to play
digitalWrite(8, LOW); // stop

delay(17000); //wait…The delay between actions.

// Pages Glow Green Fade in, then out.
for (int i = 0; i < 255; i++) { //set the rate of fade in-increas i by 1
analogWrite(pwmLED, i); //write the i value to pin 5
analogWrite(pwmLED2, i); //and 6
delay(5); //time between iterations
analogWrite (pwmLED, HIGH); //after 255 write high
analogWrite (pwmLED2, HIGH); //
}

for (int i = 255; i > 0; i—) { //decrease i by 1
analogWrite(pwmLED, i); // see above
analogWrite(pwmLED2, i);
delay(5);
analogWrite (pwmLED, LOW);
analogWrite (pwmLED2, LOW);

}
delay(20000); //wait…The delay between actions.

// Book Open and Close, blue LED on
servo.attach(3); //turn the servo on
for (pos = 0; pos <= 35; pos += 1) { // goes from 0 degrees to 35 degrees in steps of 1 degree
digitalWrite (7, HIGH); // bue led on
servo.write(pos); // tell servo to go to position in variable 'pos'
delay(100); // set the speed it moves, relatively slow
}
for (pos = 35; pos >= 0; pos -= 1) { // return to 0 degrees
servo.write(pos);
digitalWrite (7, LOW); // tell servo to go to position in variable 'pos'
delay(15); // close quickly
}
servo.detach(); // servo off

delay(14000); //wait…The delay between actions.

// Rumble With Green light,
digitalWrite(4, HIGH); //turn on the rumble motor
digitalWrite (pwmLED, HIGH); //green light on too
digitalWrite(pwmLED2, HIGH);
delay(500);
digitalWrite(4, LOW); //turn them off
digitalWrite(pwmLED, LOW);
digitalWrite(pwmLED2, LOW);

delay(21000); //wait…The delay between actions.

// Evil Laugh
digitalWrite(8, HIGH); // recording plays
delay(3000); // time for recording to play
digitalWrite(82, LOW); // stop

delay(20000); //wait…The delay between actions.

// Book Opens with no light
servo.attach(3);
for (pos = 0; pos <= 35; pos += 1) { // goes from 0 degrees to 35 degrees Steps in steps of 1 degree
servo.write(pos); // tell servo to go to position in variable 'pos'
delay(100); // go slowly in this direction

}
delay(500);
for (pos = 35; pos >= 0; pos -= 1) { // return to 0 degrees
servo.write(pos);

delay(15); // waits 15ms for the servo to reach the position

}
servo.detach();

delay(19000); //wait…The delay between actions.

// Green Fade
for (int i = 0; i < 255; i++) {
analogWrite(pwmLED, i); //write the i value to pin 5 and 8
analogWrite(pwmLED2, i);
delay(5); //wait 5 ms then do the for loop again
analogWrite (pwmLED, HIGH);
analogWrite (pwmLED2, HIGH);

}
for (int i = 255; i > 0; i—) { //decrease i by 1
analogWrite(pwmLED, i);
analogWrite(pwmLED2, i);
delay(5);
analogWrite (pwmLED, LOW);
analogWrite (pwmLED2, LOW);
}
delay (20000); //wait…The delay between actions.

//Rumble
digitalWrite(4, HIGH); //turn on the rumble motor
delay(500);
digitalWrite(4, LOW);

delay(20000); //wait…The delay between actions.

// Evil Laugh
digitalWrite(8, HIGH); // recording plays
delay(3000); // time for recording to play
digitalWrite(8, LOW); // stop

delay (15000); //wait…The delay between actions.

// Book Open
servo.attach(3);
for (pos = 0; pos <= 35; pos += 1) { // goes from 0 degrees to 35 degrees Steps in steps of 1 degree
servo.write(pos); // tell servo to go to position in variable 'pos'

delay(100); // go slowly in this direction
}
delay(500);
for (pos = 35; pos >= 0; pos -= 1) { // return to 0 degrees
servo.write(pos);

delay(15); // waits 15ms for the servo to reach the position
}
servo.detach();

delay(20000); //wait…The delay between actions.

//Book Open with Blue Light and Laugh
servo.attach(3); //turn the servo on
for (pos = 0; pos <= 35; pos += 1) { // goes from 0 degrees to 35 degrees in steps of 1 degree
digitalWrite (7, HIGH);
digitalWrite (8, HIGH);
servo.write(pos); // tell servo to go to position in variable 'pos'
delay(100);
}
for (pos = 35; pos >= 0; pos -= 1) { // return to 0 degrees
servo.write(pos);
digitalWrite (7, LOW);
digitalWrite (8, LOW); // tell servo to go to position in variable 'pos'
delay(15);
}
servo.detach(); // turn the servo off

delay(140000); //wait…The delay between actions.

haunt(); //Go back to the Haunt loop
}

Шаг третий: сборка и подключение
Теперь нужно собрать устройство. Мастер приклеивает к валу двигателя грузик, он нужен для вибрации книги. Затем закрепляет двигатель и сервопривод. Палочка от мороженного, закрепленная на рычаге сервопривода, будет приподнимать обложку книги. Дальше нужно сделать небольшую прорезь в верхних 25 страницах, чтобы пропустить пьезодиск и прикрепить диск к задней части верхней обложки.

Светодиоды должны находится ближе к лицевой стороне книги.
Мастер предоставил две схемы. При монтаже сначала собирается схема линии питания, а затем линия управления.

Шаг четвертый: работа устройства
Как только будет подано питание, книга может совершить несколько действий, например, шум двигателя постоянного тока и воспроизведение звука. Nano требуется секунда или две, чтобы начать все контролировать. После этого ничего не должно происходить, пока мы не постучим по верней крышке. Затем через пять секунд книга начинает производить различные действия.

Обложка книги должна лишь немного приподниматься. Это можно отрегулировать, перемещая палочку на рычаге выше или ниже.

Последним шагом нужно «состарить» книгу. Как это сделать можно узнать, посмотрев видео ниже.

Источник (Source)

Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.

Источник: usamodelkina.ru

Понравилась статья? Поделиться с друзьями:
KIA