Эмоция роботы
Жоба Эмоциялар Қабаттар Қимылдар Дауыс Жабдық
Arduino Uno · LCD1602 · 17 эмоция

Эмоция роботы

Сілкісең ашуланады, сипасаң күледі, ұзақ тиіспесең мұңаяды. Он алты таңбалы экранда, екі килобайт жадта.

17эмоция
20×16нүкте, бір бет
124дыбыс буыны
18 КБфлэш жады

Не істейді

MPU-6050 · DHT11

Роботтың ішінде гироскоп пен акселерометр бар. Ол 400 миллисекундтық терезеде қозғалысты жинап, оның түрін ажыратады: ақырын сипау ма, оң-солға сілку ме, бір бағытта бұрау ма, кенет көтеру ме, әлде саусақпен қағу ма. Әрқайсысына өз эмоциясы бар.

Бір қимыл — бір эмоция. Келесі қимыл саналу үшін алдымен тыныштық болуы керек, әйтпесе бір сілкігенге бірнеше эмоция қатарынан шығып кетеді.

Бұдан бөлек, робот ауаны сезеді. Температура 30 градустан асса қабағы салбырап ентігеді, 10 градустан төмен түссе бүрісіп қалтырайды.

Экранның шегі

8 таңба · 320 нүкте

LCD1602 — әріп шығаратын экран, сурет салуға арналмаған. Оған небәрі сегіз өз таңбаңды жүктеуге болады, әрқайсысы 5×8 нүкте. Барлығы 320 нүкте, басқа ештеңе жоқ.

Шешімі: бет 20×16 нүктелік кенепке салынады, сосын сол кенеп сегіз таңбаға бөлінеді де, экранда қатар екі рет салынады. Сондықтан екі көз әрқашан бірдей — бұл шектеу емес, сол шектеуден туған мінез.

Жоғарғы сегіз жол — қас, төменгі сегіз жол — көз. Әр кадр 100 миллисекунд сайын қайта есептеліп, сегіз таңба қайта жүктеледі.

Эмоциялар →келесі бөлім

Он жеті эмоция

тірі анимация
Қабаттар →келесі бөлім

Төрт қабат

әр кадрда қатар

Эмоция — дайын бейнетаспа емес. Әр кадр төрт қабаттан жиналады, олардың әрқайсысы өз бетінше жүреді. Тетіктерді өшіріп-жағып, қайсысы не беретінін көруге болады.

Қарау 0

Бет экранды шетінен шетіне дейін алып тұр, сондықтан көзді жылжытуға болмайды — жиектегі нүктелер қырқылып қалады. Оның орнына көздің қабырғасы қайта бөлінеді: қараған жақ қалыңдайды, қарсы жағы жұқарады.

Қимылдар →келесі бөлім

Қимылдан эмоцияға

400 мс терезе
ҚимылШартЖауабы
Ақырын сипауshyn > 2000 Күлу → Қуаныш → Сүю. Қатарынан сипаса көтеріледі.
Оң-солға шайқауsum > 1200 · osX басым Таңырқау → Ашу → Қатты ашу
Саусақпен қағуshyn > 30000 · az > 150 Есеңгіреу → Шошу → Қатты ашу
Екі рет қағу1 сек ішінде Температура экранға шығады, 4 секунд
Бір бағытта бұрауүш ось те > 400 Басы айналу
Кенет көтеруaz > 150 Қорқу, кейде Таңырқау
Ештеңе істемеу25 сек Жалығу, Ойлану, Мұң кезектесіп. 50 секундта ұйықтайды.
Ауа ыстықDHT11 ≥ 30°CЫстықтау
Ауа суықDHT11 ≤ 10°CТоңу
Дауыс →келесі бөлім

Дауыс

пассив пьезо

Алғашқы нұсқада үндер жеке ноталардан тұратын, яғни әуен болатын. Құлақ оны ән деп естиді, робот деп емес. Сөйлеу олай жүрмейді.

Қазір әр үн буыннан құралған, ал әр буынның бес өрісі бар:

[бастапқы Гц, соңғы Гц, ұзақтық, діріл %, қырылдақ Гц]

Үш нәрсе қатар жүреді. Буын бір жиіліктен екіншісіне сырғанайды — Таңырқау 2000-нан 3900 Гц-ке дейін бір тыныста көтеріледі. Үстіне діріл қосылады. Ең бастысы — үн секундына 20-70 рет үзіліп-қосылып тұрады. Пьезо тек таза квадрат толқын шығарады, қарлыққан дауыс бере алмайды. Бірақ үнді жиі үзіп отырсаң, құлақ ол үзілісті бөлек дыбыс деп емес, дауыстың қырылдағы деп естиді.

Жиілігі мағына береді: ұйқыда 18 Гц — баяу әрі ауыр, ашуда 62 Гц — тітіркенген ырылдау, шошығанда 70 Гц — ең өткір.

Жабдық →келесі бөлім

Шешілген үш мәселе

жол бойы

Қырқылған пикселдер

Бет экранның екі жиегіне де тиіп тұрады. Қозғалыс сызу кезінде қолданылатын, ал шеттен асқан нүктелер үнсіз жоғалатын. Он төрт эмоцияның он бірінде нүкте жоғалып жүрген.

Шешімі: бет кең кенепке салынады, сосын өлшеніп, сыятындай жылжытылып қиылады. Бір өту, ештеңе жоғалмайды.

Теріс жарты пиксель

Браузердегі Math.round(-0.5) нөл береді, ал C-дің lround(-0.5) минус бір. Бір ғана пиксель, бірақ ол эллипсті шеттен шығарып, бүкіл Қуаныш суретін жылжытып жіберген.

Екі жүйені 2040 кадр бойынша салыстырғанда ғана көрінді.

Көз қалай бұрылады

Көзді жылжыту мүмкін емес — орын жоқ. Оның орнына көздің қабырғасы қайта бөлінеді: қараған жақтың қабырғасы қалыңдап, қарсы жағы жұқарады.

Сыртқы контур бір нүктеге қозғалмайды, сондықтан қырқылатын да ештеңе жоқ. Ал көз шынымен бұрылып тұрғандай көрінеді.

Жабдық

бәрі бір I2C шинада
Arduino UnoATmega328P · 32 КБ флэш · 2 КБ жад
LCD1602 I2C0x27 · 8 өз таңбасы
MPU-60500x68 · гироскоп + акселерометр
DHT11D7 · температура мен ылғал
Пассив пьезоD8 · 900–4600 Гц

Қалкөз Ернат Маратұлы. Код таза ASCII, кітапханалары стандартты: LiquidCrystal_I2C, DHT sensor library, Wire.