فهرست مطالب:

بیانگر احساسات گیاه مصنوعی (A.P.E.X.): 7 مرحله (همراه با تصاویر)
بیانگر احساسات گیاه مصنوعی (A.P.E.X.): 7 مرحله (همراه با تصاویر)

تصویری: بیانگر احساسات گیاه مصنوعی (A.P.E.X.): 7 مرحله (همراه با تصاویر)

تصویری: بیانگر احساسات گیاه مصنوعی (A.P.E.X.): 7 مرحله (همراه با تصاویر)
تصویری: خدا چه شکلی است؟ (از دید هوش مصنوعی) #shorts 2024, نوامبر
Anonim
Image
Image

اما صبر کنید … چیزهای بیشتری وجود دارد!

مرحله 1: مقدمه

معرفی
معرفی
معرفی
معرفی
معرفی
معرفی

APEX چیست؟

APEX یک دستگاه نظارت بر گیاهان هوشمند (و نه ناز) است. فقط آن را به هر گیاهی وصل کنید تا سطح "شادی" گیاه نشان داده شود! اگر عادت بدی دارید که آبیاری گیاهان را فراموش کرده اید ، این یک یادآوری عالی برای آبیاری آنها است.

چگونه کار می کند؟

شعبده بازي. فقط شوخی می کنم! APEX از آردوینو متصل به سنسور رطوبت استفاده می کند که در خاک گیاه قرار می گیرد. این سنسور میزان رطوبت خاک را می خواند و سپس آردوینو محاسبه می کند که چه رویی باید نمایش داده شود.

اما چرا؟

چرا که نه؟

مرحله 2: جمع آوری قطعات و ابزارها

جمع آوری قطعات و ابزار
جمع آوری قطعات و ابزار
جمع آوری قطعات و ابزار
جمع آوری قطعات و ابزار
جمع آوری قطعات و ابزار
جمع آوری قطعات و ابزار

اجازه دهید وارد آن شویم! برای این دستورالعمل ، شما به تعداد زیادی قطعه و ابزار نیاز دارید. خوشبختانه برای شما ، همه آنها در زیر فهرست شده اند:

با توجه به مسابقه میکروکنترلرها ، این پروژه به طور کامل توسط قطعات خریداری شده در آمازون ساخته شده است! (حمایت نمی شود)

فهرست قطعات:

  • آردوینو اونو
  • نمایشگر LED 8x8
  • سنسور لمسی خازنی
  • سنسور رطوبت
  • اتصال دهنده باتری 9 ولت
  • باتری 9 ولت

لیست ابزارها:

  • 22 سیم سنج
  • نوار الکتریکی
  • استریپرهای سیم
  • آهن لحیم کاری
  • پمپ جداسازی

وقتی همه تجهیزات لازم را جمع آوری کردید ، وقت آن رسیده که نرم افزار آردوینو را راه اندازی کنید!

مرحله 3: نصب Arduino IDE

نصب Arduino IDE
نصب Arduino IDE
نصب Arduino IDE
نصب Arduino IDE
نصب Arduino IDE
نصب Arduino IDE

برای عملکرد این پروژه ، ما باید بتوانیم Arduino را برنامه ریزی کنیم. این امر نیاز به بارگیری و نصب Arduino Integrated Development Environment (IDE) بر روی رایانه شما دارد. این یک توضیح نسبتاً ساده است ، اما من این روند را به شما نشان می دهم:

1. از وب سایت آردوینو دیدن کنید

2. به صفحه بارگیری ها بروید (نرم افزار> بارگیری ها)

3. روی پیوند بارگیری سیستم عامل خود کلیک کنید

نکته جانبی: این برنامه روی ویندوز ، مک و لینوکس کار می کند.

4. نصب بر روی ویندوز

  • روی فایل بارگیری شده دوبار کلیک کنید تا اجرا شود
  • برای موافقت با مجوز ، روی "موافقت" کلیک کنید
  • بقیه دستورات را دنبال کنید
  • اکنون برنامه باید نصب شود!

(در صورت گم شدن حتماً به اسکرین شات ها نگاه کنید)

5. نصب بر روی مک

  • روی فایل بارگیری شده کلیک کنید
  • "باز کردن" را انتخاب کنید
  • برنامه به طور خودکار نصب و اجرا می شود!

(در صورت گیج شدن حتماً تصاویر را بررسی کنید)

6. همین

و تمام شدی! اکنون Arduino IDE را روی سیستم خود بارگیری کرده اید!

مرحله 4: کد

کد
کد
کد
کد
کد
کد

این مرحله همه مربوط به کد است. این یک برنامه نسبتاً کوتاه است ، بنابراین من در مورد آن صحبت خواهم کرد و نحوه کار آن را توضیح خواهم داد. ابتدا مروری اجمالی ، سپس توضیحی عمیق ، و در نهایت نحوه هل دادن آن به آردوینو!

مروری مختصر

برای کسانی که علاقه ای به توضیح دقیق کد ندارند ، من یک بخش TL ؛ DR ارائه می کنم! در اینجا توضیح اساسی وجود دارد. آردوینو هر چند ثانیه مقادیری را از سنسور رطوبت می گیرد. سپس از این اطلاعات برای محاسبه و نمایش چهره خاصی استفاده می شود! همچنین کمی کد در انتها وجود دارد که اجازه دهید دکمه لمسی خازنی صفحه نمایش را روشن و خاموش کند. کاملاً ساده ، درست است؟

نیتی گریتی

این بخش از آموزش برای کسانی است که علاقه زیادی به نحوه عملکرد کل برنامه ، خط به خط دارند. من اسکرین شات های بالا را ارائه می دهم تا به شما در درک آنچه که من صحبت می کنم کمک کند ، و همچنین برخی از خطوط کد را در این توضیحات اضافه کنم.

این برنامه به پنج بخش تقسیم می شود:

  1. از جمله کتابخانه ها و ایجاد متغیرها
  2. تابع راه اندازی
  3. عملکردهای حالت چهره
  4. تابع نوشتن آردوینو در ماتریس
  5. تابع حلقه

شامل کتابخانه ها و ایجاد متغیرها:

بخش اول این کد در مورد متغیرها و کتابخانه هایی است که ما استفاده خواهیم کرد.

#شامل "LedControlMS.h"

#تعریف TouchSensor 7 LedControl lc = LedControl (12 ، 11 ، 10 ، 1) ؛ int sensorPin = A5؛ int sensorValue = 0؛ bool start = false؛ bool on = true؛ بولی فشرده = LOW؛

خط اول شامل کتابخانه ای به نام LedControlMS است. این کتابخانه ملزم به ارسال مقادیر به صفحه LED است. خط بعدی یک عبارت تعریف است که پین سنسور لمسی را روی 7 تنظیم می کند. پس از آن سه متغیر دیگر داریم که پایه های صفحه LED ، سنسور رطوبت و مقدار آن را مشخص می کند. سه خط آخر همه بولی هستند که وضعیت دکمه لمسی و صفحه نمایش را تنظیم می کنند. پس از این ، مقادیر بایت خود را داریم:

بایت لبخند [4] = {B00000100 ، B00110010 ، B01100100 ، B01100000} ؛ بایت غافلگیری [4] = {B00001110 ، B00001010 ، B01101110 ، B10010000} ؛ بایت مه [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 byte esmile [4] = {B00000010، B00101010، B01000100، B01000000}؛ بایت elaugh [4] = {B00000010 ، B00101010 ، B01100100 ، B01100000} ؛ بایت eplain [4] = {B00000010، B00101010، B00100100، B00100000}؛ byte eyell [4] = {B00000001 ، B01101001 ، B01100010 ، B01100000} ؛ بایت etalk [4] = {B00000001 ، B00101001 ، B01100010 ، B01100000} ؛

این مقادیر نشان دهنده تمام چهره های APEX هستند. هر بایت یک آرایه است که شامل چندین بیت است که وضعیت هر پیکسل را در یک ردیف مشخص دیکته می کند. "1" و "0" به ترتیب نشان دهنده روشن/خاموش هستند.

تابع راه اندازی:

با حرکت به بخش بعدی ، ما عملکرد راه اندازی خود را داریم.

void setup () {// MS Serial Output Serial.begin (9600)؛

pinMode (سنسور لمسی ، ورودی) ؛

// LED Matrix Setup lc.shutdown (0 ، false) ؛ lc.setIntensity (0 ، 4) ؛ lc.clearDisplay (0) ؛ }

نام آن را به خوبی توضیح می دهد. این جایی است که ما سنسور لمسی و صفحه نمایش خود را "تنظیم" می کنیم. دو خط اول خروجی سریال ما را شروع می کند (برای اشکال زدایی استفاده می شود). خط سوم پین سنسور لمسی را به عنوان ورودی تنظیم می کند و چهار خط آخر صفحه را راه اندازی می کند.

عملکردهای حالت چهره:

این احتمالاً طولانی ترین بخش در کل است ، اما همه آن بسیار ساده و تکراری است.

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 ، خطا [4]) ؛ lc.setRow (0 ، 5 ، خطا [5]) ؛ lc.setRow (0 ، 6 ، خطا [6]) ؛ lc.setRow (0 ، 7 ، خطا [7]) ؛ }

void happy () {

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 ، مه [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 ، سورپرایز [3]) ؛ lc.setRow (0 ، 5 ، سورپرایز [2]) ؛ lc.setRow (0 ، 6 ، سورپرایز [1]) ؛ lc.setRow (0 ، 7 ، شگفتی [0]) ؛ }

void dieing () {

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 ، اسمیل [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 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 استفاده می شود. این عبارت شامل مجموعه ای از دستورات if است که مقدار آب را بررسی می کنند و سپس با فراخوانی توابع مختلف از قسمت قبل ، صفحه را تنظیم می کنند.

void writeArduinoOnMatrix () {if (sensorValue> 0 && sensorValue 30 && sensorValue 100 && sensorValue 200 && sensorValue 400 && sensorValue 650 && sensorValue <= 800) {habit ()؛ } else {شکسته ()؛ }}

ممکن است توجه داشته باشید که ما صورتهای "شکسته" را اضافه کرده ایم در صورتی که سنسور از محدوده کار خارج شود. این از برخی خطاهای پوچ عجیب و غریب جلوگیری می کند و به ما درک بصری بهتری از آنچه در داخل کد می گذرد می دهد.

تابع حلقه:

آخرین و مهمترین کارکرد حلقه است. این کد دقیقاً همان چیزی را که نامش می گوید انجام می دهد ، حلقه می کند! اگرچه خطوط کمی در این تابع وجود دارد ، اما در واقع نسبتاً ساده است. کد ابتدا وضعیت دکمه را می خواند و می بیند که آیا صفحه نمایش "روشن" است یا خیر. اگر این امر درست باشد ، سپس تابع WriteArduinoOnMatrix را فراخوانی می کند ، که سپس چهره ای را در APEX ترسیم می کند. از آنجا که این عملکرد حلقه می شود ، صفحه نمایش را هر چند وقت که بخواهیم به روز می کند. این تأخیر توسط متغیر تاخیر تعیین می شود.

void loop () {if (start == true) {delaytime = 3000؛ } // دکمه خواندن فشرده = digitalRead (سنسور لمسی) ؛

اگر (فشرده) {

if (on == true) {lc.clearDisplay (0)؛ on = false؛ تاخیر (زمان تاخیر) ؛ } else {on = true؛ تاخیر (زمان تاخیر) ؛ }} sensorValue = analogRead (sensorPin)؛ تاخیر (زمان تاخیر) ؛ if (on == true) {// Draw Faces writeArduinoOnMatrix ()؛ }

شروع = درست؛

}

این همه کد است. امیدوارم در حال حاضر درک بهتری از نحوه عملکرد همه اینها داشته باشید و می توانید از این دانش برای سفارشی سازی آن برای پروژه خود استفاده کنید!

هل دادن کد به آردوینو

اکنون که تمام کد را پوشش داده ایم ، وقت آن است که آن را به آردوینو فشار دهیم! خوشبختانه IDE این کار را بسیار ساده کرده است. تنها کاری که باید انجام دهید این است که Arduino خود را با کابل USB به رایانه خود وصل کنید و سپس روی پیکان سمت راست در سمت چپ بالای IDE کلیک کنید. اجازه دهید کد فشار بیاورد ، و اگر شما آن را درست انجام داده اید ، باید یک پیام موفقیت آمیز در پایین برنامه مشاهده کنید!

مرحله 5: نمودار مدار

مدار
مدار

مشابه کد ، نمودار مدار نیز چندان پیچیده نیست. این دستگاه فقط از سه سنسور و آردوینو تشکیل شده است ، بنابراین من پین های مربوط به هر کدام را به شما می گویم و اگر به کمک دیگری نیاز دارید ، فقط به نمودار بالا مراجعه کنید.

نمایشگر LED:

  • VCC -> 5 ولت
  • GRD -> GRD
  • DIN -> پین 12
  • CS -> پین 10
  • CLK -> پین 11

سنسور رطوبت:

  • مثبت -> 5 ولت
  • منفی -> GRD
  • سیگنال -> A5

سنسور لمسی خازنی:

  • VCC -> 5 ولت
  • GRD -> GRD
  • SIG -> 7

خیلی سخت نیست ، درست است؟ اگر با این پین کردن مشکلی دارید ، حتماً به فیلم زیر مراجعه کنید که در آن نحوه اتصال آن را توضیح می دهم.

مرحله 6: همه چیز را با هم ترکیب کنید

همه اش را بگذار کنار هم
همه اش را بگذار کنار هم
همه اش را بگذار کنار هم
همه اش را بگذار کنار هم
همه اش را بگذار کنار هم
همه اش را بگذار کنار هم

توضیح اینکه چگونه همه چیز با هم متناسب است توضیح داده نمی شود ، بنابراین من قطعاً پیشنهاد می کنم ویدیوی این قسمت را مشاهده کنید. من در واقع نمی خواهم دقیقاً توضیح دهم که چگونه خودم را کنار هم قرار داده ام ، خیلی سخت است. اما برای توضیح مبهم ، اتصالات سیم را لحیم کردم و آنها را در پشت تخته پیچیدم. سپس سنسورها را قرار دادم و از نوار برقی برای نگه داشتن همه آنها در کنار هم استفاده کردم. در نهایت ، من آن را با باتری 9 ولت آزمایش کردم ، و پس از آن که فهمیدم کار می کند ، باتری را در پشت قرار دادم و آن را نیز چسباندم. همانطور که قبلاً گفتم ، ویدئو را برای این مرحله بررسی کنید ، دارای یک قسمت لحیم کاری خوب است که سرعت آن بالا رفته و به شما کمک می کند سیم ها را به درستی بپیچید. در صورت گم شدن ، می توانید آن را متوقف کنید یا با سرعت نصف بازی کنید.

تبریک می گویم! اگر همه چیز با موفقیت پیش رفت ، اکنون باید یک واحد APEX کاملاً کاربردی داشته باشید!

برای آزمایش واحد خود ، گیاه آبیاری شده را پیدا کرده و آن را وصل کنید! باید متوجه شوید که یا خوشحال است یا متعجب و این بدان معناست که باید کار کند !!! کار عالی برای تکمیل پروژه!

مرحله 7: نتیجه گیری

نتیجه
نتیجه

و این کل دستورالعمل است! با تشکر از شما برای بررسی پروژه! هر گونه س questionsال و نظری را در زیر بگذارید و مطمئن شوید که برای آموزشهای جالب تر مانند این ، Urban Farming Guys را دنبال کنید! ما دوست داریم در مورد نحوه ساخت APEX شما بشنویم و تصاویر بسیار مورد استقبال قرار می گیرد! باز هم از حضورتان سپاسگزارم ، روز خوبی داشته باشید!

(این دستورالعمل با الهام از یک پروژه قدیمی ، Poj Emoji!)

P. S. این دستورالعمل در مسابقه Microcontrollers شرکت کرده است ، بنابراین فراموش نکنید که به ما رای دهید! ما بسیار قدردانی می کنیم:)

P. P. S. بیایید APEX را در مجله Make دریافت کنیم! اینجا رای بده! با تشکر:)

توصیه شده: