Мазмуну:
- 1 -кадам: Киришүү
- 2 -кадам: Бөлүктөрдү жана шаймандарды чогултуу
- 3 -кадам: Arduino IDE орнотуу
- 4 -кадам: Код
- 5 -кадам: Райондук диаграмма
- 6 -кадам: Бардыгын бириктирүү
- 7 -кадам: Жыйынтык
Video: Жасалма өсүмдүк эмоциясы экспрессору (A.P.E.X.): 7 кадам (Сүрөттөр менен)
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:42
Бирок күтө туруңуз … Дагы бар!
1 -кадам: Киришүү
APEX деген эмне?
APEX - бул өсүмдүктөрдү көзөмөлдөөчү акылдуу (сүйкүмдүү сөз эмес). Жөн гана аны каалаган өсүмдүккө сайсаңыз, ал өсүмдүктүн "бакыт" деңгээлин көрсөтөт! Бул сиздин өсүмдүктөрүңүздү сугарууну унутуп койгон жаман адатыңыз болсо, аны сугаруу үчүн эң сонун эскертүү.
Бул кантип иштейт?
Magic. Тамашалап жатам! APEX өсүмдүктүн кыртышына салынган ным сенсоруна тиркелген Arduino колдонот. Бул сенсор топурактын нымдуулугун окуйт, андан кийин Arduino кайсы бетти көрсөтүү керектигин эсептейт.
Бирок эмне үчүн?
Эмне үчүн жок?
2 -кадам: Бөлүктөрдү жана шаймандарды чогултуу
Келгиле, ага кирели! Бул көрсөтмө үчүн сизге бир топ бөлүктөр жана шаймандар керек болот. Бактыга жараша, алардын баары төмөндө келтирилген:
Микроконтроллерлер Конкурсунун духунда, бул долбоор толугу менен Амазонкадан сатып алынган бөлүктөр тарабынан жасалган! (демөөрчү эмес)
Бөлүктөр тизмеси:
- Arduino Uno
- 8x8 LED дисплей
- Capacitive Touch Sensor
- Ным сенсору
- 9V батарея туташтыргычы
- 9V батарея
Куралдардын тизмеси:
- 22 Gauge Wire
- Электр тасмасы
- Wire Stripers
- Кандооч
- Тазалоочу насос
Бардык керектүү жабдууларды чогулткандан кийин, Arduino программасын орнотууга убакыт келди!
3 -кадам: Arduino IDE орнотуу
Бул долбоордун иштеши үчүн, биз Arduino программалай алышыбыз керек. Бул жүктөө жана Arduino комплекстүү өнүктүрүү чөйрөсүн (IDE) компьютериңизге орнотууну талап кылат. Бул абдан жөнөкөй түшүндүрмө, бирок мен сизге процесстин жүрүшүн көрсөтөм:
1. Arduino вебсайтына баш багыңыз
2. Жүктөөлөр барагына өтүңүз (Программалык камсыздоо> Жүктөөлөр)
3. Иштетүү тутумуңуз үчүн Жүктөө шилтемесин басыңыз
Эскертүү: Программа Windows, Mac жана Linuxто иштейт.
4. Windowsто орнотуу
- Аны иштетүү үчүн жүктөлүп алынган файлды эки жолу чыкылдатыңыз
- Лицензияга макул болуу үчүн "Макул" баскычын басыңыз
- Калган көрсөтмөлөрдү аткарыңыз
- Программа азыр орнотулушу керек!
(Адашып калсаңыз скриншотторду караңыз)
5. Macка орнотуу
- Жүктөлүп алынган файлды чыкылдатыңыз
- "Ачууну" тандаңыз
- Программа автоматтык түрдө орнотулат жана иштейт!
(Адашып калсаңыз скриншотторду текшериңиз)
6. Мына ушул
А сиз бүттүңүз! Сиз азыр Arduino IDE тутумуңузга жүктөп алдыңыз!
4 -кадам: Код
Бул кадамдын баары код жөнүндө. Бул абдан кыска программа, ошондуктан мен аны сиз менен бирге карап, анын кантип иштээрин түшүндүрөм. Биринчиден, кыскача сереп, андан кийин терең түшүндүрүү жана акырында аны Arduinoго кантип түртүү керек!
Кыскача баяндама
Коддун деталдуу түшүндүрмөсүнө кызыкпагандар үчүн мен TL; DR сегментин берем! Бул жерде негизги түшүндүрмө. Arduino ным сенсорунан бир нече секунд сайын баалуулуктарды алат. Бул маалымат кийин белгилүү бир жүздү эсептөө жана көрсөтүү үчүн колдонулат! Дагы бир аз код бар, ал сыйымдуу сенсордук баскычты дисплейди күйгүзүп жана өчүрүп коёлу. Абдан жөнөкөй, туурабы?
Nitty Gritty
Үйрөткүчтүн бул бөлүгү программанын саптары боюнча кантип иштээрине абдан кызыккандар үчүн. Мен эмнени айтып жатканымды түшүнүүгө жардам берүү үчүн жогорудагы скриншотторду берем, ошондой эле бул сыпаттамага коддун кээ бир саптарын киргизем.
Бул программа беш бөлүмгө бөлүнөт:
- Анын ичинде китепканалар жана өзгөрмөлөрдү түзүү
- Орнотуу функциясы
- Мимиканын функциялары
- Жазуу Arduino On Matrix Function
- Loop Function
Анын ичинде китепканалар жана өзгөрмөлөрдү түзүү:
Бул коддун биринчи бөлүмү биз колдоно турган өзгөрмөлөр жана китепканалар жөнүндө.
#"LedControlMS.h" кошуу
#define TouchSensor 7 LedControl lc = LedControl (12, 11, 10, 1); int sensorPin = A5; int sensorValue = 0; bool башталды = жалган; bool on = true; логикалык пресс = LOW;
Биринчи сапка LedControlMS деп аталган китепкана кирет. Бул китепкана LED дисплейине баалуулуктарды жөнөтүү үчүн талап кылынат. Кийинки сап - бул сенсордун пинин 7ге орноткон аныктамасы. Андан кийин бизде LED дисплейинин, нымдуулуктун сенсорунун жана анын маанисинин учтарын аныктоочу дагы үч өзгөрмө бар. Акыркы үч сызык сенсордук баскычтын жана дисплейдин абалын жөнгө салуучу логикалык мааниге ээ. Андан кийин бизде байт баалуулуктарыбыз бар:
байт жылмаюусу [4] = {B00000100, B00110010, B01100100, B01100000}; байт сюрприз [4] = {B00001110, B00001010, B01101110, B10010000}; байт meh [4] = {B00000100, B00100100, B00100100, B00100000}; байт сад [4] = {B00000010, B01100100, B00110010, B00110000}; өлгөн байт [6] = {B00001010, B00100100, B00101010, B00100000, B01100000, B01101010}; байт катасы [8] = {B00111100, B01000010, B10100001, B10010001, B10001001, B10000101, B01000010, B00111100}; // Evil Faces байт esmile [4] = {B00000010, B00101010, B01000100, B01000000}; байт elaugh [4] = {B00000010, B00101010, B01100100, B01100000}; байт эплайн [4] = {B00000010, B00101010, B00100100, B00100000}; байт eyell [4] = {B00000001, B01101001, B01100010, B01100000}; байт эталк [4] = {B00000001, B00101001, B01100010, B01100000};
Бул баалуулуктар APEXтин бардык жүздөрүн билдирет. Ар бир байт - бул бир катардагы ар бир пикселдин абалын белгилеген бир нече биттерди камтыган массив. "1" жана "0" тиешелүүлүгүнө жараша күйгүзүүнү/өчүрүүнү билдирет.
Орнотуу функциясы:
Кийинки бөлүмгө өтүү менен бизде орнотуу функциясы бар.
void setup () {// MS Serial Output Serial.begin (9600);
pinMode (TouchSensor, INPUT);
// LED Matrix Setup lc.shutdown (0, false); lc.setIntensity (0, 4); lc.clearDisplay (0); }
Аты муну абдан жакшы түшүндүрөт. Бул жерде сенсордук сенсорубузду жана дисплейибизди "орнотобуз". Биринчи эки сап биздин сериялык чыгууну баштайт (мүчүлүштүктөрдү оңдоо үчүн колдонулат). Үчүнчү сап сенсордук пинди киришке коёт жана акыркы төрт сап дисплейди баштайт.
Мимиканын функциялары:
Бул, балким, баарынан узун бөлүм, бирок баары абдан жөнөкөй жана кайталанат.
void broken () {lc.setRow (0, 0, ката [0]); lc.setRow (0, 1, ката [1]); lc.setRow (0, 2, ката [2]); lc.setRow (0, 3, ката [3]); lc.setRow (0, 4, ката [4]); lc.setRow (0, 5, ката [5]); lc.setRow (0, 6, ката [6]); lc.setRow (0, 7, ката [7]); }
void бактылуу () {
lc.setRow (0, 0, жылмайуу [0]); lc.setRow (0, 1, жылмайуу [1]); lc.setRow (0, 2, жылмайуу [2]); lc.setRow (0, 3, жылмайуу [3]); lc.setRow (0, 4, жылмайуу [3]); lc.setRow (0, 5, жылмайуу [2]); lc.setRow (0, 6, жылмайуу [1]); lc.setRow (0, 7, жылмайуу [0]); }
void plain () {
lc.setRow (0, 0, meh [0]); lc.setRow (0, 1, meh [1]); lc.setRow (0, 2, meh [2]); lc.setRow (0, 3, meh [3]); lc.setRow (0, 4, meh [3]); lc.setRow (0, 5, meh [2]); lc.setRow (0, 6, meh [1]); lc.setRow (0, 7, meh [0]); }
таң калуу () {
lc.setRow (0, 0, сюрприз [0]); lc.setRow (0, 1, сюрприз [1]); lc.setRow (0, 2, сюрприз [2]); lc.setRow (0, 3, сюрприз [3]); lc.setRow (0, 4, сюрприз [3]); lc.setRow (0, 5, сюрприз [2]); lc.setRow (0, 6, сюрприз [1]); lc.setRow (0, 7, сюрприз [0]); }
жараксыз өлүм () {
lc.setRow (0, 0, өлгөн [0]); lc.setRow (0, 1, өлгөн [1]); lc.setRow (0, 2, өлгөн [2]); lc.setRow (0, 3, өлгөн [3]); lc.setRow (0, 4, өлгөн [4]); lc.setRow (0, 5, өлгөн [5]); lc.setRow (0, 6, өлгөн [1]); lc.setRow (0, 7, өлгөн [0]); }
бош ыйлоо () {
lc.setRow (0, 0, кайгылуу [0]); lc.setRow (0, 1, кайгылуу [1]); lc.setRow (0, 2, кайгылуу [2]); lc.setRow (0, 3, кайгылуу [3]); lc.setRow (0, 4, кайгылуу [3]); lc.setRow (0, 5, кайгылуу [2]); lc.setRow (0, 6, кайгылуу [1]); lc.setRow (0, 7, кайгылуу [0]); }
void evilsmile () {
lc.setRow (0, 0, esmile [0]); lc.setRow (0, 1, esmile [1]); lc.setRow (0, 2, esmile [2]); lc.setRow (0, 3, esmile [3]); lc.setRow (0, 4, esmile [3]); lc.setRow (0, 5, esmile [2]); lc.setRow (0, 6, esmile [1]); lc.setRow (0, 7, esmile [0]); }
void evillaugh () {
lc.setRow (0, 0, elaugh [0]); lc.setRow (0, 1, elaugh [1]); lc.setRow (0, 2, elaugh [2]); lc.setRow (0, 3, elaugh [3]); lc.setRow (0, 4, elaugh [3]); lc.setRow (0, 5, elaugh [2]); lc.setRow (0, 6, elaugh [1]); lc.setRow (0, 7, elaugh [0]); }
void evilplain () {
lc.setRow (0, 0, eplain [0]); lc.setRow (0, 1, eplain [1]); lc.setRow (0, 2, eplain [2]); lc.setRow (0, 3, eplain [3]); lc.setRow (0, 4, eplain [3]); lc.setRow (0, 5, eplain [2]); lc.setRow (0, 6, eplain [1]); lc.setRow (0, 7, eplain [0]); }
void evilyell () {
lc.setRow (0, 0, eyell [0]); lc.setRow (0, 1, eyell [1]); lc.setRow (0, 2, eyell [2]); lc.setRow (0, 3, eyell [3]); lc.setRow (0, 4, eyell [3]); lc.setRow (0, 5, eyell [2]); lc.setRow (0, 6, eyell [1]); lc.setRow (0, 7, eyell [0]); }
void eviltalk () {
lc.setRow (0, 0, etalk [0]); lc.setRow (0, 1, etalk [1]); lc.setRow (0, 2, etalk [2]); lc.setRow (0, 3, etalk [3]); lc.setRow (0, 4, etalk [3]); lc.setRow (0, 5, etalk [2]); lc.setRow (0, 6, etalk [1]); lc.setRow (0, 7, etalk [0]); }
Бул функциялар биринчи бөлүмдөгү байт баалуулуктарыбызды колдонуу менен ар бир мимиканы аныктоо үчүн колдонулат. Ар бир сап x позициясын жана байт маанилерин аныктайт, андан кийин ошол мамычага маанилерди колдонот. Кээ бир функциялар көбүрөөк саптарды талап кылат, анткени ошол жүздүн маанилерин көрсөтүү үчүн дагы көп саптар колдонулат. Ар бир бет симметриялуу, ошондуктан биз саптарды кайталайбыз.
WriteArduinoOnMatrix функциясы:
Төртүнчү бөлүм LED дисплейине туура келген жүздөрдү эсептөө жана жазуу үчүн колдонулат. Бул суу баалуулуктарын текшерип, андан кийин мурунку бөлүмдөгү ар кандай функцияларды чакырып, дисплейди орноткон башка бир катар билдирүүлөрдөн турат.
жараксыз WriteArduinoOnMatrix () {if (sensorValue> 0 && sensorValue 30 && sensorValue 100 && sensorValue 200 && sensorValue 400 && sensorValue 650 && sensorValue <= 800) {таң калган (); } else {broken (); }}
Сенсор сенсордун чегинен чыгып кеткен учурда, биз "сынган" жүздөрдү кошконубузду байкасаңыз болот. Бул кээ бир кызыктай нөлдүк каталардын алдын алат жана бизге коддун ичинде эмне болуп жатканын жакшыраак түшүнүүгө жардам берет.
Цикл функциясы:
Акыркы, бирок жок дегенде, цикл функциясы. Бул код анын аталышын так аткарат, ал илмек кылат! Бул функцияда бир нече саптар бар болсо да, бул чындыгында абдан жөнөкөй. Код алгач баскычтын абалын окуйт жана дисплей "On" экенин көрөт. Эгерде бул чындык деп табылса, анда ал WriteArduinoOnMatrix функциясын чакырат, ал APEXке жүзүн тартат. Бул функция илингендиктен, дисплей биз каалагандай тез -тез жаңыртылып турат. Бул кечигүү кечигүү убактысынын өзгөрмөсү менен шартталган.
void loop () {if (begin == true) {delaytime = 3000; } // Окуу баскычы басылды = digitalRead (TouchSensor);
эгер (басылган) {
if (on == true) {lc.clearDisplay (0); боюнча = жалган; кечигүү (кечигүү убактысы); } else {on = true; кечигүү (кечигүү убактысы); }} sensorValue = analogRead (sensorPin); кечигүү (кечигүү убактысы); if (on == true) {// Draw Faces writeArduinoOnMatrix (); }
башталды = чындык;
}
Бул жерде коддун баары бар. Эми сиз мунун баары кантип иштээрин жакшыраак түшүнөсүз жана бул билимди колдонуп, аны долбооруңузга ылайыкташтыра аласыз!
Кодду Arduinoго түртүү
Эми биз бардык коддорду камтып койгондон кийин, аны Arduinoго түртүү убактысы келди! Бактыга жараша, IDE муну абдан жөнөкөй кылат. Ардуинону USB кабели менен компьютерге туташтырышыңыз керек, андан кийин IDEдин жогорку сол жагындагы оң жебени чыкылдатыңыз. Кодду түртсүн, эгер сиз туура кылган болсоңуз, программанын түбүндө ийгиликтүү билдирүүнү көрүшүңүз керек!
5 -кадам: Райондук диаграмма
Окшош кодго окшоп, схема өтө татаал эмес. Ал үч гана сенсордон жана Arduinoдон турат, андыктан мен сизге ар биринин пин-чыккандарын айтып берем, эгер сизге башка жардам керек болсо, жөн гана жогорудагы диаграммага кайрылыңыз.
LED дисплейи:
- VCC -> 5V
- GRD -> GRD
- DIN -> Pin 12
- CS -> Pin 10
- CLK -> Pin 11
Нымдуулук сенсору:
- Оң -> 5V
- Терс -> GRD
- Сигнал -> A5
Capacitive Touch сенсор:
- VCC -> 5V
- GRD -> GRD
- SIG -> 7
Өтө кыйын эмес, туурабы? Эгерде сизде бул көйгөй бар болсо, анда мен аны кантип туташтыруу керек экенин көрсөткөн видеого кайрылууну унутпаңыз.
6 -кадам: Бардыгын бириктирүү
Бул тексттин баарына кантип туура келерин түшүндүрүү кыйын, ошондуктан мен бул бөлүктүн видеосун карап көрүүнү сунуштаар элем. Мен чындыгында меникин кантип бириктиргенимди түшүндүрбөйм, бул өтө кыйын. Бирок бүдөмүк нерселерди түшүндүрүү үчүн, мен зым байланыштарын ширетип, тактанын артына ороп койдум. Андан кийин мен сенсорлорду жайгаштырып, бардыгын чогуу кармоо үчүн электр лентасын колдондум. Акырында, мен аны 9В батарейкасы менен сынап көрдүм, анан анын иштээрин билгенден кийин, батареяны арткы жагына коюп, ошондой эле скотч менен чаптадым. Жогоруда айтканымдай, бул кадам үчүн видеону текшериңиз, анда кичинекей ширетүүчү жакшы сегмент бар жана ал зымдарды туура ороого жардам берет. Адашып калсаңыз, аны тындырыңыз же жарым ылдамдыкта ойноңуз.
Куттуктайм! Эгерде баары ийгиликтүү болсо, анда сизде азыр толук кандуу APEX бирдиги болушу керек!
Бирдигиңизди сынап көрүү үчүн, сугарылган өсүмдүктү таап, аны сайыңыз! Сиз бул бактылуу же таң калыштуу экенин билишиңиз керек жана бул иштеши керек дегенди билдирет !!! Долбоорду аяктоо үчүн эң сонун иш!
7 -кадам: Жыйынтык
Жана бул бүт Нускамалык! Долбоорду текшергениңиз үчүн рахмат! Төмөндө бардык суроолорду жана комментарийлерди калтырыңыз жана ушул сыяктуу сонун сабактарды алуу үчүн Urban Farming Guysтин артынан ээрчип кетиңиз! Биз сиздин APEXтин курулушу кандай өткөнүн уккубуз келет жана сүрөттөр абдан бааланат! Дагы бир жолу токтогонуңуз үчүн рахмат, күнүңүз жакшы өтсүн!
(Бул Нускамалык эски долбоордун, Эмодзи Өсүмдүктөрүнүн жетеги менен жазылган!)
P. S. Бул Instructable Микроконтроллерлер конкурсуна кирген, андыктан бизге добуш берүүнү унутпаңыз! Биз аны абдан баалайбыз:)
P. P. S. Келгиле, Make журналында APEXке ээ бололу! Бул жерде добуш бериңиз! Рахмат:)
Сунушталууда:
Акылдуу жабык өсүмдүк монитору - Өсүмдүгүңүз качан сугарууга муктаж экенин билиңиз: 8 кадам (сүрөттөр менен)
Акылдуу жабык өсүмдүктөрдүн монитору - Сиздин өсүмдүгүңүз качан сугарууга муктаж экенин билиңиз: Бир нече ай мурун мен батарейка менен иштеген топурактын нымдуулугун көзөмөлдөөчү таякчаны жасадым жана сизге жабык өсүмдүктүн казанындагы топуракка тыгылып, сизге топурак жөнүндө пайдалуу маалымат бериш үчүн. нымдуулуктун деңгээли жана жаркыраган LEDлар сизге качан керектигин айтышат
Автоматташтырылган өсүмдүк казаны - Кичи бак: 13 кадам (сүрөттөр менен)
Автоматташтырылган өсүмдүк казаны - Кичинекей бак: Мен Howest Kortrijkте мультимедия жана коммуникация технологияларынын студентимин. Акыркы тапшырмабыз үчүн биз өзүбүз тандаган IoT долбоорун иштеп чыгышыбыз керек болчу. Идеяны издеп, мен чоңойууну жакшы көргөн апама пайдалуу бир нерсе жасоону чечтим
Эмоция экспрессору: 4 кадам
Сезим экспрессору: Киришүү: Бул машина эмоция билдирүүчү болуп саналат, ал сезимдерин билдирүүдө жакшы эмес адамдарга өз сезимдерин билдирүүгө жардам берүү менен иштейт. Бул машина жардамга муктаж болгон же жардамга муктаж адамдарга жардам бере алат, алар болгон нерселерге нааразычылыгын угат
Cleverbotтун жардамы менен тандоо жана жасалма интеллект менен баарлашуу: 14 кадам (сүрөттөр менен)
Cleverbotтун жардамы менен Pick жана Жасалма Интеллект Чаты менен сүйлөшүңүз: Бул жерде мен үн буйругун гана эмес, Cleverbotтун жардамы менен ЭЭМ менен Жасалма Интеллект Чатын да сынап көрөм. Чынында, идея балдардын түсүн бир түстөн эң жакынына чейин алганда, боёк кутусуна түстөрдү аралаштырганда пайда болгон. Бирок акыры ишке ашпай жатат
Жасалма/жасалма камера жасаңыз: 3 кадам
Жасалма/жасалма камера жасаңыз: Сизде кимдир бирөө " корпус " Сиздин үйүңүз. Балким, кимдир бирөө сиздин эшигиңизди титиретип жаткандыр жана сиз аларга жардам бере аласызбы деп сурасаңыз, алар сизден бул үйдүн ------- үйү экенин сурашкан. Сиз жок дейсиз, алар адашып кетет. The