Лекција 22/31: Користење на седумсегментен дисплеј со Arduino и електронски коцки | SunFounder Robojax
Во оваа лекција истражуваме како да контролираме седум-сегментен дисплеј со Arduino. Наместо да користиме десетина или повеќе I/O пинови за директно напојување на секој LED сегмент, користиме паметен трик: shift register. Овој мал, евтин чип ни овозможува да контролираме сите седум сегменти (плус децималната точка) користејќи само три жици од Arduino. Ова е основна техника во електрониката што ви овозможува да го проширите бројот на излези достапни на вашиот микроконтролер, правејќи можно да изградите посложени проекти без надградба на вашата плоча.
Покрај основниот бројач, ќе изградиме електронска коцка. Овој проект не само што го зајакнува контролирањето на дисплејот, туку воведува и кориснички влез преку копче и концептот на прекини (interrupts), создавајќи одговорен и интерактивен уред. Овој водич е базиран на лекција од Robojax Arduino курсот, кој го користи SunFounder 3-во-1 Arduino комплетот.
Еве неколку практични идеи што можете да ги изградите со ова знаење:
- Направете едноставен резултат-табло за игри како пинг-понг или кошарка.
- Изградете дигитален тајмер за друштвени игри или кујнски одбројувачки тајмер.
- Направете генератор на случајни броеви за игри или донесување одлуки.
- Конструирајте основен дигитален термометар со додавање сензор за температура.
Хардвер и компоненти
Пред да започнеме, да ги собереме потребните компоненти. Јадрото на овој проект е 74HC595 shift register, кој е клучот за минимизирање на бројот на потребни пинови. Наместо да го поврзувате секој од седумте сегменти директно на Arduino, ги поврзувате на shift register-от. Arduino потоа ги испраќа податоците за цифрата сериски (еден бит во исто време) до чипот, кој потоа излегува со правилната шема за да ги осветли сегментите.
- Arduino Uno (или компатибилна плоча)
- Седум-сегментен дисплеј (модел 5161AS, заедничка катода)
- 74HC595 shift register IC
- Копче (push button)
- Отпорници (220Ω - 330Ω)
- Поврзувачки жици (jumper wires)
- Breadboard
5161AS дисплејот е тип со заедничка катода. Ова значи дека сите катоди (негативните страни) на внатрешните LED диоди се поврзани заедно на заеднички пин за земја. За да осветлите сегмент, обезбедувате позитивен напон на неговиот специфичен аноден пин. 74HC595 делува како мост, земајќи сериски податоци од Arduino и излегувајќи ги паралелните сигнали потребни за напојување на овие аноди.
Водич за поврзување
Поврзувањето на shift register-от и дисплејот може да изгледа незгодно, но следењето на дијаграмот чекор по чекор е клучно. Видеото (на 04:48) дава детален преглед на овој процес. Чипот 74HC595 има засек на едниот крај за да се идентификува пин 1. Пиновите се нумерирани спротивно од стрелките на часовникот од засекот (1-8 на едната страна, 9-16 на другата).
Еве го резимето на поврзувањето од видеото:
- Напојување и земја: Поврзете го пин 8 и пин 13 од 74HC595 на шината за земја. Поврзете го пин 10 и пин 16 на шината од 5V.
- Линии за податоци: Поврзете ги дигиталните пинови на Arduino со пиновите за податоци на shift register-от: Пин 12 (STcp) на пин 12 од чипот, Пин 8 (SHcp) на пин 11 од чипот, и Пин 11 (DS) на пин 14 од чипот.
- Дисплеј на shift register: Ова е најкомплексниот дел. Видеото (на 07:18) ги детализира секоја врска. На пример, сегментот 'a' на дисплејот се поврзува на пин 6 од чипот, сегментот 'b' на пин 5, и така натаму. Заедничките катодни пинови на дисплејот се поврзани на земја преку отпорник.
За визуелен и прецизен водич, ве молиме погледнете го официјалниот дијаграм за поврзување:
Точните врски на пиновите се критични и лесно е да се направи грешка. Одвојте време и проверете ја секоја жица според дијаграмот. Видеото е одличен ресурс за следење.
Објаснување на кодот
Два примери на код се обезбедени во оваа лекција. Првиот е едноставен бројач, а вториот го надградува за да создаде електронска коцка. И двата ја делат истата основна логика за контролирање на дисплејот.
Еве го кодот за основниот бројач:
const int STcp = 12;//Пин поврзан на ST_CP од 74HC595
const int SHcp = 8;//Пин поврзан на SH_CP од 74HC595
const int DS = 11; //Пин поврзан на DS од 74HC595
int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
На врвот на кодот, можете да ги конфигурирате трите пинови поврзани на shift register-от. STcp, SHcp, и DS се доделени на Arduino пиновите 12, 8 и 11, соодветно. datArray[] е клучен дел. Тоа е табела за пребарување што ги содржи хексадецималните вредности за цифрите од 0 до 9. Секоја вредност ја претставува шемата на сегменти што треба да се осветлат за таа специфична цифра.
Функцијата loop() го извршува бројачот. Таа користи for јамка за да брои од 0 до 9. Внатре во јамката, кодот ги испраќа податоците за тековниот број до регистарот за поместување. delay(1000) на крајот ја поставува брзината на бројачот во милисекунди. Променете ја оваа вредност на 100 за побрзо броење, или на 500 за побавно.
Кодот за електронските коцки воведува нов елемент: внес од корисникот преку копче. Клучните промени во конфигурацијата се:
const int buttonPin = 2;
//...
pinMode(buttonPin, INPUT);
attachInterrupt(digitalPinToInterrupt(buttonPin), rollDice, FALLING);
Овде, buttonPin е поставен на дигитален пин 2. Овој пин е посебен затоа што може да се користи како прекин (interrupt). Прекинот му овозможува на Arduino веднаш да престане со она што го прави кога ќе се притисне копчето, обезбедувајќи брз и сигурен одговор. Режимот FALLING го активира прекинот кога копчето е притиснато (сигналот преминува од HIGH на LOW).
Функцијата rollDice се повикува од прекинот. Таа ја менува променливата state помеѓу 0 и 1. Кога state е 0, коцката се „врти“ и главната loop() јамка случајно прикажува броеви. Кога копчето ќе се притисне повторно, state се менува на 1, запирајќи ја јамката и прикажувајќи го конечниот резултат. Функцијата showNumber() е иста како логиката на бројачот, но прима број како аргумент за прикажување.
Жив проект и демонстрација
Откако кодот ќе се постави, бројачот ќе започне да работи, прикажувајќи броеви од 0 до 9 со пауза од една секунда (во видеото на 15:04). Видеото демонстрира промена на паузата за да се направи бројачот да работи многу побрзо.
Демонстрацијата на електронските коцки (во видеото на 20:15) го покажува копчето во акција. Кога ќе го притиснете еднаш, екранот почнува брзо да ги менува броевите. Притискањето повторно го запира менувањето, оставајќи случаен број помеѓу 1 и 6 прикажан, исто како вистинска коцка.
Поглавја
- [00:00] Вовед во проектот со седумсегментен дисплеј
- [01:25] Разбирање на седумсегментниот дисплеј
- [03:51] Технички податоци и спецификации на дисплејот 5161AS
- [04:48] Поврзување на дисплејот и регистарот за поместување
- [12:24] Arduino код за бројачот од 0-9
- [15:04] Демонстрација на бројачот и прилагодување на брзината
- [16:27] Изработка на проектот за електронски коцки
- [20:15] Демонстрација на електронските коцки и отстранување на треперење (debouncing)
/*
Lesson 23/31: Using Seven Segment Display
Get this code and watch video Download and resource page https://robojax.com/RJT605
YouTube video https://www.youtube.com/watch?v=3qoGAYh0lbc
*/
const int STcp = 12;//Pin connected to ST_CP of 74HC595
const int SHcp = 8;//Pin connected to SH_CP of 74HC595
const int DS = 11; //Pin connected to DS of 74HC595
int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void setup ()
{
//set pins to output
pinMode(STcp,OUTPUT);
pinMode(SHcp,OUTPUT);
pinMode(DS,OUTPUT);
}
void loop()
{
for(int num = 0; num <10; num++)
{
digitalWrite(STcp,LOW); //ground ST_CP and hold low for as long as you are transmitting
shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
digitalWrite(STcp,HIGH); //pull the ST_CPST_CP to save the data
delay(1000);
}
}
/*
Lesson 23/31: Electronic Dice
Get this code and watch video Download and resource page https://robojax.com/RJT605
YouTube video https://www.youtube.com/watch?v=3qoGAYh0lbc
*/
const int STcp = 12;//Pin connected to ST_CP of 74HC595
const int SHcp = 8;//Pin connected to SH_CP of 74HC595
const int DS = 11; //Pin connected to DS of 74HC595
const int buttonPin = 2;
int datArray[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
int number = 0;
int state = 0;
void setup ()
{
//set pins to output
pinMode(STcp, OUTPUT);
pinMode(SHcp, OUTPUT);
pinMode(DS, OUTPUT);
pinMode(buttonPin, INPUT);
attachInterrupt(digitalPinToInterrupt(buttonPin), rollDice, FALLING);
}
void loop()
{
if (state == 0) {
showNumber((int)random(1, 7));
delay(50);
}
}
void showNumber(int num) {
digitalWrite(STcp, LOW); //ground ST_CP and hold low for as long as you are transmitting
shiftOut(DS, SHcp, MSBFIRST, datArray[num]);
//return the latch pin high to signal chip that it
//no longer needs to listen for information
digitalWrite(STcp, HIGH); //pull the ST_CPST_CP to save the data
}
void rollDice() {
state = !state;
}
Common Course Links
Common Course Files
Работи што можеби ќе ви требаат
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Ресурси и референци
-
ДокументацијаDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
НадворешноPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Датотеки📁
Arduino библиотеки (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB