Электронное устройство для тренировки памяти - Своими руками
Своими руками

Электронное устройство для тренировки памяти

>

Этот устройство представляет из себя панель с четырьмя кнопка, четырьмя светодиодами и цифровым дисплеем.
Светодиоды загораются в рандомном порядке, а пользователь должен в этом же порядке нажать кнопки. С каждым разом (уровнем) сложность возрастает, и уровень отображается на цифровом дисплее.
Как это работает можно посмотреть на видео.

Инструменты и материалы:-4 кнопки;-12 резисторов 10 кОм;-18 резисторов по 470 Ом;
-8 диодов;
-7-сегментный дисплей -2 шт;-Две интегральных схемы 4511;-Монтажная плата;-Адаптер питания 5 В;-Ардуино Нано;
-Плата расширения Arduino Nano;
-Светодиоды -4 шт;
-Сверлильный станок;
-Торцовочная пила;-Зажимы;-Лазерный резак;-Паяльник;-Стриппер;-Компьютер;-ПВА;
-Древесина;
-Крепеж;
-Черный акрил;
Электронное устройство для тренировки памятиШаг первый: разработка модели
Сначала мастер разработал проект устройства в программе Fusion 360. Для корпуса мастер выбрал тиковое дерево, а для лицевой панели – черный акрил.
Электронное устройство для тренировки памятиЭлектронное устройство для тренировки памятиЭлектронное устройство для тренировки памятиЭлектронное устройство для тренировки памятиШаг второй: корпус
Дальше нужно сделать корпус. Как уже говорилось ранее, материал для корпуса – тиковое дерево. Толщина планок 10 мм, ширина 40 мм. Согласно чертежам производит распиловку деталей.
Электронное устройство для тренировки памятиЭлектронное устройство для тренировки памятиЭлектронное устройство для тренировки памятиВ планках вырезает пазы для акриловой пластины.
Электронное устройство для тренировки памятиЭлектронное устройство для тренировки памятиСклеивает детали корпуса,кроме одной верхней планки.
Электронное устройство для тренировки памятиЭлектронное устройство для тренировки памятиЭлектронное устройство для тренировки памятиШаг третий: лазерная резка
Отверстия в лицевой панели (для кнопок, светодиодов и дисплея) и отверстия в верхней панели (для крепежа) мастер вырезает на лазерном резаке.
Файлы для резки прилагаются.
UI.svgTestCut.svg
Электронное устройство для тренировки памятиЭлектронное устройство для тренировки памятиЭлектронное устройство для тренировки памятиЗадняя акриловая пластинка просто прикручивается к корпусу шурупами. Для этого в ней необходимо просверлить четыре отверстия.
Электронное устройство для тренировки памятиЭлектронное устройство для тренировки памятиЭлектронное устройство для тренировки памятиШаг четвертый: печатная плата
Для этого проекта мастер использовал ранее разработанную плату для другого проекта. В данном случае на печатной плате установлены две микросхемы 4511. Интегральная схема 4511 помогает управлять каждым дисплеем с помощью двоичного кода, для чего требуется только четыре входа на дисплей. В результате общее количество портов ввода-вывода достигает 16. Это позволяет использовать всего одну плату Arduino Nano.

Файлы Gerber для изготовления платы можно скачать ниже.
7Segment.brd
Электронное устройство для тренировки памятиЭлектронное устройство для тренировки памятиЭлектронное устройство для тренировки памятиШаг пятый: схема
Можно не изготавливать печатную плату, а собрать схему на перфорированной плате. Нумерация и соответствие портов основаны на коде, приведенном на следующем шаге.
Первое, что нужно иметь в виду при монтаже, это компактность. Нужно чтобы все эти компоненты могли поместиться внутри корпуса.
Все проводные соединения необходимо заизолировать.
Электронное устройство для тренировки памятиЭлектронное устройство для тренировки памятиШаг шестой: код
Ниже прилагается файл, содержащий весь код проекта. Все, что нужно сделать, это загрузить файл, IDE Arduino и загрузить код в Arduino Nano.
Код работает следующим образом

Программа начинается с создания случайного списка из 99 целых чисел в диапазоне от 1 до 4. Уровень устанавливается на 1, и отображается первый бит шаблона. Как только пользователь вводит ожидаемое количество нажатий кнопки (например, уровень 1 = 1 нажатие кнопки), код проверяет ввод по списку из 99 целых чисел. Если он совпадает, код повторяется, и уровень увеличивается до 2 (и так далее). Если ввод неверен, код перезапустится.
Электронное устройство для тренировки памяти Показать / Скрыть текст//Written by Rehaan Irani, July 2021

int list[99];
int list2[99];
int x = 1;
int y = 0;
int z = 0;
int level = 1;
int w;
int c;
int d;
int e;
int f;
int g;
int i;
int j;
int h;

void setup() {

//Declaring all our pins
Serial.begin(9600);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);

pinMode(14, OUTPUT);
pinMode(15, OUTPUT);
pinMode(17, OUTPUT);
pinMode(18, OUTPUT);

pinMode(10, INPUT);
pinMode(11, INPUT);
pinMode(12, INPUT);
pinMode(13, INPUT);

//This loop creates the random sequence of 99 random numbers between 1 and 4
for (int i=0; i <= 98; i++){
list[i] = random(1, 5);
}
}

//Reset function that we will call if the user inputs the incorrect pattern
void(* resetFunc) (void) = 0;

//Main Loop
void loop() {

//Condition set to ensure the user makes an input before the next sequence is shown
if (x == 1) {

//For loop displays the pattern on the LEDs – depends on the level
for (int i = 0; i <= level; i++) {

//Each if statement operates an LED which is triggered depending on if the integer is 1,2,3 or 4
if (list[i] == 1) {
digitalWrite(15, HIGH);
delay(1000);
digitalWrite(15, LOW);
}

if (list[i] == 2) {
digitalWrite(14, HIGH);
delay(1000);
digitalWrite(14, LOW);
}

if (list[i] == 3) {
digitalWrite(17, HIGH);
delay(1000);
digitalWrite(17, LOW);
}

if (list[i] == 4) {
digitalWrite(18, HIGH);
delay(1000);
digitalWrite(18, LOW);
}

}

//If x is 0, the above code will not run again until x is set back to 1
x = 0;
}
/////////////////////////////////////////

//These IF statements record the users input depending on which button they press
if (digitalRead(12) == 1) {
list2[y] = 1;
y += 1;
delay(500);
}

if (digitalRead(18) == 1) {
list2[y] = 2;
y += 1;
delay(500);
}

if (digitalRead(10) == 1) {
list2[y] = 3;
y += 1;
delay(500);
}

if (digitalRead(13) == 1) {
list2[y] = 4;
y += 1;
delay(500);
}

/////////////////////////////////////////////////////////////////

//This IF statements set the condition for running the check which only happens when the number of user inputs = level
if (y == level + 1) {

//This for loop checks each user input against the random list
for (int i = 0; i <= level; i++) {

//If the lists match, nothing happens, the program continues
if (list2[i] == list[i]) {
Serial.print("h");

//ELSE, if the lists do not match, the program calls on the reset function to restart from the beginning
} else {
Serial.print("FUNCTION RESTART");
resetFunc();
}
//x is set to one because the lists match and the next sequence can be shown
} x = 1;

//level is increased by one to display one more number on the random list
level += 1;

//y is 0 to reset the users inputs
y = 0;
}
//The rest of the code deals with displaying the level on the 7 segment displays

//This part below separates numbers into its two digits (e.g. 43 = 4 and 3)
int v;
int randomNumber = level%10;
v = level – randomNumber;
int randomNumber2 = v/10;

//The first digit is converted to binary
if (z > 7) {// 1st Digit Write
f = HIGH;
randomNumber = randomNumber % 8;
} else {
f = LOW;
}

if (randomNumber > 3) {
e = HIGH;
randomNumber = randomNumber % 4;
} else {
e = LOW;
}

if (randomNumber > 1) {
d = HIGH;
randomNumber = randomNumber % 2;
} else {
d = LOW;
}

if (randomNumber > 0) {
c = HIGH;
randomNumber = randomNumber % 1;
} else {
c = LOW;
}

//The second digit is converted to binary
if (randomNumber2 > 7) {// 2nd Digit Write
j = HIGH;
randomNumber2 = randomNumber2 % 8;
} else {
j = LOW;
}

if (randomNumber2 > 3) {
i = HIGH;
randomNumber2 = randomNumber2 % 4;
} else {
i = LOW;
}

if (randomNumber2 > 1) {
h = HIGH;
randomNumber2 = randomNumber2 % 2;
} else {
h = LOW;
}

if (randomNumber2 > 0) {
g = HIGH;
randomNumber2 = randomNumber2 % 1;
} else {
g = LOW;
}
//The binary output is sent and displayed on the 7 segment displays
digitalWrite(2, j);
digitalWrite(3, i);
digitalWrite(4, h);
digitalWrite(5, g);

digitalWrite(6, f);
digitalWrite(7, e);
digitalWrite(8, d);
digitalWrite(9, c);

}
Электронное устройство для тренировки памятиЭлектронное устройство для тренировки памятиШаг седьмой: питание
Для питания устройства используется адаптер питания 5 В. Плюс адаптера подключается к Vin, а минус к GND на Arduino Nano.
Электронное устройство для тренировки памятиЭлектронное устройство для тренировки памятиВсе готово.
Электронное устройство для тренировки памяти

SitesReady

Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного. - Альберт Эйнштейн

Follow us

Don't be shy, get in touch. We love meeting interesting people and making new friends.