399

Кубико-генератор

Серия Байки из мастерской

Пост немного неформатный для моего профиля, но всё же решил поделиться поделкой.


Недавно снова ударился в настольные игры, но столкнулся с такой проблемой, что маленькие кубики из лап больших дядек норовят улететь куда угодно помимо стола. Поэтому родилась идея  сделать электронный вариант, но в классическом "семидырочном" исполнении.


Сделать решено было 2 кубика параллельно (чего уж размениваться?). Чтобы "дрыгать" 14-ю светодиодами, использовал 74HC595. За мозги взял ATtiny13A, его возможностей хватит за глаза. Светодиоды использовал недавно полученные прозрачные красные, они имеют яркое направленное свечение.


Схему накидал на листочке, потом перенес в старый добрый Sprint-Layout

Далее классика: ФЛУТ, лужение "жидким оловом" от Rexant (очень уж удобно), пайка, цапон-лак в 3 слоя.

Для прошивки Тиньки были выведены пины вокруг неё. Далее подключил UNO как программатор, запустил Arduino IDE и стал осваивать программную часть.

Прошивка получилась коротенькая, без использования индусского shiftOut занимает всего 50% от 1К памяти. Разумеется используется псевдо-рандом, берущий значения от тактов МК, но для генерации случайного числа этого вполне достаточно. При прошивке, сразу после компиляции, надо на UNO нажимать reset, иначе выдается ошибка.


Код с комментариями, может кому-то пригодится:

#define F_CPU 1200000UL

#include <avr/io.h>

#include <util/delay.h>

#define latchPin 1//8

#define clockPin 2//12

#define dataPin 0//11

char tik=0,tik2=3; //счётчик для генератора случайных чисел

#define RAND_MAX 5 //максимальное число


word myArr1[] = {0b0000000010000000,0b0000000000000010,0b1000000000000000,0b0000001000000000,0b0000010000000000,0b0100000000000000,0b0000000000000100,0b0000000001000000}; // массив для бегущей точки

byte dice[] = {0b00010000,0b10000100,0b10010100,0b11000110,0b11010110,0b11101110};

unsigned char display[2];

void write_display(unsigned char *data, unsigned char nbytes)

{

unsigned char mask,i;

for(i = 0; i < nbytes; i++)

{

mask = 0x80;

for(char k = 0; k < 8; k++)

{

// Сравниваем каждый бит с единицей

if(data[i] & mask)

{

PORTB |= (1 << PB0); // DATA 1

PORTB |= (1 << PB2); // CLK 1

PORTB &= ~(1 << PB2); // CLK 0

}

else

{

PORTB &= ~(1 << PB0); // DATA 0

PORTB |= (1 << PB2); // CLK 1

PORTB &= ~(1 << PB2); // CLK 0

}

mask = mask >> 1; // Сдвигаем биты

}

}

// Защелкиваем регистр

PORTB |= (1 << PB1);

PORTB &= ~(1 << PB1);

}

int main( void )

{

DDRB |= (1<<latchPin);

DDRB |= (1<<clockPin);

DDRB |= (1<<dataPin);

DDRB &= ~(1<<4);


display[0] = dice[0];

display[1] = dice[0];

write_display(display,2);


while(1)

{

tik++; //таймер для настройки генератора случайных чисел.

if(tik>RAND_MAX){tik=0;}

tik2--;

if(tik2<0){tik2=RAND_MAX;}

for (byte i=RAND_MAX; i>tik; i--){

tik2--;

if(tik2<0){tik2=RAND_MAX;}

}

if(!(PINB&(1<<4))) //Если нажата, то…

{

_delay_ms(100); //задержка для защиты от дребезга

while(!(PINB&(1<<4))); //Ждем, когда отпустят кнопку

for (byte i=0; i<8;i++){

display[0] = myArr1[i]>>8;

display[1] = myArr1[i];

write_display(display,2);

_delay_ms(100);

}

display[0] = dice[tik];

display[1] = dice[tik2];

write_display(display,2);

_delay_ms(100);

}}}

Переключатель оказался пока никак не задействован (планировал сделать 1d6/2d6), возможно в будущем придумаю какую-нибудь функцию и для него, как и еще для одной свободной ноги.

Собрал всё в любимой мной распаячной коробке, размер подошел отлично, даже не пришлось плату крепить на стойки (зажимается и держится коробочным саморезом). В корпусе тоже не стал делать отверстий, через него диоды смотрятся гораздо лучше и кнопка срабатывает нажатием на корпус. С автономным питанием не стал заморачиваться, вывел mini-USB, а дальше хош - от розетки, хош - от банки силы.

Кнопку в будущем можно повесить сенсорную, однако тут переделывать уже смысла не было.


Вот как это выглядит (получилось размыто, но суть понятна):

В планах перевести проект на SMD, тиньку в SOP8-корпусе. Не знаю как всё это буду паять, но всё уже заказано :) А вместо кучи резисторов использовать 9-пиновую DIP-"гребенку".


Всем бобра и творческих успехов! =)

Arduino & Pi

1.5K поста20.9K подписчиков

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

13
DELETED
Автор поста оценил этот комментарий

вот вот--что бы не повадно было кубики подкручивать

раскрыть ветку (1)
5
поток сознания
Автор поста оценил этот комментарий

ага, и "на ребро" не встанет :)

2
Автор поста оценил этот комментарий

Только что на Муське смотрел)

раскрыть ветку (1)
1
поток сознания
Автор поста оценил этот комментарий

тут негатива от комментаторов гораздо меньше

0
Автор поста оценил этот комментарий

Привет с муськи!

раскрыть ветку (1)
1
поток сознания
Автор поста оценил этот комментарий

согласись, здесь всё же негатива меньше

показать ответы
6
Автор поста оценил этот комментарий
В чип-дипе сборки по 4 есть
https://www.chipdip.ru/catalog/resistor-networks?x_410=Rcn&a...

Сборки на 8 резисторов посмотрю чуть позже.
Иллюстрация к комментарию
раскрыть ветку (1)
1
поток сознания
Автор поста оценил этот комментарий

спасибо, у "любимого" китайского продавца такого не нашел.

показать ответы
Автор поста оценил этот комментарий
А я скачал приложение для Андроида.
раскрыть ветку (1)
1
поток сознания
Автор поста оценил этот комментарий

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

показать ответы
0
Автор поста оценил этот комментарий

Идея для дальнейшего развития проекта, дарю :-) Встроить внутрь маленькую коробочку с мелкими железными шариками (хоть от подшипника). Это для звука "костей". Добавить датчик вибрации и небольшой аккумулятор все-таки. Трясешь коробочку - шарики отвечают за звук, датчик вибрации реагирует и запускаем процесс генерации "кубиков". Через заданное время светодиоды отключаются для экономии энергии

раскрыть ветку (1)
0
поток сознания
Автор поста оценил этот комментарий

Всегда есть азиат, который сделает это лучше :)

https://aliexpress.ru/item/32869776061.html

показать ответы
0
Автор поста оценил этот комментарий
Тоже когда то игрался с эл. кубиком. Так и не смог доказать друзьям, что подвоха нет, что распределение Гаусса идеальное...
Иллюстрация к комментарию
раскрыть ветку (1)
0
поток сознания
Автор поста оценил этот комментарий

а принцип действия какой?

показать ответы
0
Автор поста оценил этот комментарий
Здорово, но!
Звук бы прикрутить.
А то в нарды играешь, а из звуков только фишки передвигаются: шииик-шииик)
раскрыть ветку (1)
0
поток сознания
Автор поста оценил этот комментарий

Сделать не проблема, но раздражать будет

0
// TODO:
Автор поста оценил этот комментарий

АЦП хорошо шумит, хотел предложить, да начнется же опять. Ну его...

раскрыть ветку (1)
0
поток сознания
Автор поста оценил этот комментарий

а чего, хорошая идея. Надо будет обдумать потому что нынешний генератор всё же не очень устраивает.

1
Автор поста оценил этот комментарий
Я понимаю, но вот у меня есть на руках куча 595. Прям вот жопой их жую. И контроллеры есть. Никуда не надо идти, что-то покупать. За час набросал схему, лутом вытравил, собрал, включил. Не выходя из дома. А если оптимизировать, то чего-то может не оказаться, надо ехать в радиотовары, или в инете заказывать. Пока все компоненты получишь уже может и не стоять на проект и тупо забьёшь.
раскрыть ветку (1)
0
поток сознания
Автор поста оценил этот комментарий

именно так!

// TODO:
Автор поста оценил этот комментарий

Вы плату сосульки видели? Там 20 светодиодов и места гора-а-а-здо меньше. Вы хотите, чтобы я сам сделал этот проект? :)

раскрыть ветку (1)
0
поток сознания
Автор поста оценил этот комментарий

да. Ставим на поток, бабки поплам, выводим в оффшор и линяем на Канары!

показать ответы
3
// TODO:
Автор поста оценил этот комментарий

То бишь, только из-за "сложности" разводки Вы решили установить дополнительно две микросхемы и кучу резисторов? :)

раскрыть ветку (1)
0
поток сознания
Автор поста оценил этот комментарий

можно и так сказать. Ну так что, ожидать помощи в упрощении проекта? :) Не понадобится ли там двустороннее травление или вообще заказ из Китая?

показать ответы
1
// TODO:
Автор поста оценил этот комментарий

Чарлиплексинг, и не нужны будут никакие сдвиговые регистры. :) К тому же резко сократится количество токоограничивающих резисторов. Здесь теория и практика, если интересно: http://enabledevice.ru/gotovye-ustrojstva/svetodiodnaya-sosu...

раскрыть ветку (1)
0
поток сознания
Автор поста оценил этот комментарий

знаю про это. Плату под него разведешь? ;)

показать ответы
0
Автор поста оценил этот комментарий

Накуя такая длинная программа?

Два рандомных бита вывести на СИДы.

раскрыть ветку (1)
0
поток сознания
Автор поста оценил этот комментарий

код в студию

показать ответы
1
Автор поста оценил этот комментарий
Если уж делать все SMD, тогда и сопротивления тоже SMD. Есть же исполнения в 10 пиновом SOP, насколько я помню. А так - прикольный проект.
раскрыть ветку (1)
поток сознания
Автор поста оценил этот комментарий

можно ссылку? Я не нашел.

показать ответы
0
DELETED
Ну всё
Автор поста оценил этот комментарий

Круто, вот бы тоже научиться так

раскрыть ветку (1)
поток сознания
Автор поста оценил этот комментарий

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

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества