فهرست مطالب:

کنترلرهای آردوینو: 10 مرحله (همراه با تصاویر)
کنترلرهای آردوینو: 10 مرحله (همراه با تصاویر)

تصویری: کنترلرهای آردوینو: 10 مرحله (همراه با تصاویر)

تصویری: کنترلرهای آردوینو: 10 مرحله (همراه با تصاویر)
تصویری: آموزش برد آردوینو (Arduino) با انجام پروژه های عملی قسمت نهم 2024, جولای
Anonim
کنترلرهای آردوینو
کنترلرهای آردوینو
کنترلرهای آردوینو
کنترلرهای آردوینو

یک سیستم کنترل بازی آردوینو با استفاده از آردوینو و کتابخانه p5.js. ایده این کار ایجاد یک پروژه آردوینو است که به راحتی قابل تکرار و توسعه است. اتصالات کنترل کننده به گونه ای طراحی شده اند که از حسگرها و ورودی های مختلفی استفاده کنند که بسته به هر کنترل کننده قابل تعویض هستند.

این پروژه همچنین برای استفاده از کتابخانه جاوا اسکریپت p5.js به همراه کتابخانه p5.play طراحی شده برای p5.js. این کتابخانه ها به ما امکان می دهند بازی های خود را با سهولت برنامه ریزی کنیم. وب سایت p5.play دارای مجموعه ای از آموزش ها و مثال هایی است که کاربران می توانند برای آن بازی بسازند. این پروژه به کاربران امکان می دهد مهارت های توسعه سخت افزاری و نرم افزاری خود را تمرین کنند.

مرحله 1: آنچه شما نیاز دارید

آنچه شما نیاز خواهید داشت
آنچه شما نیاز خواهید داشت

ابزارها:

  • آهن لحیم کاری
  • لحیم کاری
  • استریپرهای سیم
  • برش های جانبی
  • انبر

سخت افزار:

  • برد سازگار با آردوینو (من از تخته Sparkfun Redboard و همچنین Arduino Uno و Leonardo استفاده کردم)
  • تابلوی عالی:

    • تخته های سبز رنگ 8 در 6 سانتی متر
    • برد برد Aduino Uno shield
  • سنسورهای مختلف

    • جوی استیک
    • دکمه ها (با مقاومت ، 10k اهم ، همراه آنها)
    • پتانسیومترها
    • سنسورهای فلکس
    • سنسورهای فشار
    • و غیره…
  • سیم:

    • تک سیم (من از 26 AWG Solid استفاده کردم)
    • سیم روبان و چین
  • سرفصل های Break Away (حداقل 20 مورد از این موارد)
  • سخت افزار اختیاری (به جای آن می توانید از مقوا و کراوات فشرده/زیپ استفاده کنید):

    • تخته نان و کابل های بلوز برای نمونه سازی
    • محوطه های چاپ سه بعدی
    • اتصال دهنده های سخت افزاری (من از پیچ M2.5 استفاده کردم)

نرم افزار:

  • آردوینو IDE
  • کتابخانه p5.js

    P5. بازی کتابخانه نیز هست

  • p5. کنترل سریال
  • Node.js

مرحله 2: ساختن: مرکز کنسول ، راه اندازی سپر

ساختمان: مرکز کنسول ، راه اندازی سپر
ساختمان: مرکز کنسول ، راه اندازی سپر

سرصفحه ها را روی تخته perf Arduino Uno shield لحیم کنید.

  • من با سربرگ های محافظ (قدرت ، آنالوگ و دیجیتال) شروع کردم
  • بعد پین های هدر 2x5 هستند. می توانید از هدرهای 2x5 یا فقط 2 ردیف 5 سرصفحه جداگانه استفاده کنید. من آنها را با A3 و A4 به صورت عمودی ردیف کردم و 2 فاصله بین آنها گذاشتم.

مرحله 3: ساختمان: مرکز کنسول ، سیم کشی سپر

ساختمان: مرکز کنسول ، سیم کشی سپر
ساختمان: مرکز کنسول ، سیم کشی سپر
ساختمان: مرکز کنسول ، سیم کشی سپر
ساختمان: مرکز کنسول ، سیم کشی سپر
ساختمان: مرکز کنسول ، سیم کشی سپر
ساختمان: مرکز کنسول ، سیم کشی سپر

در مرحله بعد ، ما می خواهیم سیم های خود را روی سپر هدایت کنیم. راه اندازی سیم ها در بالا آسان تر است ، اما اگر می خواهید ظاهر تمیزتری داشته باشید ، می توانید آنها را در قسمت پایین اجرا کنید.

می خواهید هنگام مسیریابی این سیم ها به شماتیک (شماتیک عقاب برای بارگیری در دسترس است) توجه کنید. همچنین می توانید از راهنمای رنگ دیدن کنید تا در این زمینه به شما کمک کند.

ایده این طراحی سپر این است که از هر کنترلر 3 ورودی آنالوگ و 5 ورودی دیجیتال اجازه دهد. این به طور کامل از تمام ورودی های آنالوگ در Arduino Uno و سیمهای باقی مانده روی کابل روبان ما استفاده می کند.

مرحله 4: ساختن کنترلرها ، تنظیم قطعات شما

ساختمان: کنترل کننده ها ، تنظیم قطعات شما
ساختمان: کنترل کننده ها ، تنظیم قطعات شما
ساختمان: کنترل کننده ها ، تنظیم قطعات شما
ساختمان: کنترل کننده ها ، تنظیم قطعات شما
ساختمان: کنترل کننده ها ، تنظیم قطعات شما
ساختمان: کنترل کننده ها ، تنظیم قطعات شما

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

اگر می خواهید این را تکرار کنید ، می توانید تصاویر من را برای قرار دادن مشاهده کنید.

مرحله بعدی این است که کابل روبان خود را به تخته پرف لحیم کنید.

  1. کابل روبان را بچسبانید و قلع کنید
  2. کابل روبان را به مرکز بالای تخته ورق خود بچسبانید.

مرحله بعدی مسیریابی سیم های خود است. من ابتدا سیم (5 ولت/سیم قرمز) و زمین (سیم قهوه ای) را به سنسورها وصل کردم. سپس ورودی های آنالوگ را سیم کشی کردم. استفاده از کابل نارنجی (آنالوگ A0 یا A3) برای حرکت افقی و کابل زرد (آنالوگ A1 یا A4) برای حرکت عمودی آسان بود.

برای یکنواخت نگه داشتن همه چیز ، من یک دکمه کوچک فشار به رنگ بنفش روی همه کنترلرهایم وصل کردم. این مورد برای مواردی مانند بستن پورت سریال (بعداً به این موضوع می پردازم) و همچنین منوها یا گزینه ها مفید است.

اگر مایل هستید به این مورد نگاه کنید ، یک طرح کلی از کنترلر جوی استیک خود را بارگذاری کرده ام. از نمودار خروجی ما می توانید امکان اتصال هر کنترلر (3 ورودی آنالوگ و 5 دیجیتال) را مشاهده کنید.

مرحله 5: اختیاری: محوطه

اختیاری: محوطه
اختیاری: محوطه
اختیاری: محوطه
اختیاری: محوطه
اختیاری: محوطه
اختیاری: محوطه

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

می توانید مدلهای سه بعدی من را که به این مرحله متصل شده اند ، بیابید. من محفظه هایی را برای مرکز برای Arduino Uno/Leonardo و Sparkfun RedBoard ایجاد کرده ام (این برد کمی گسترده تر است و از مینی USB استفاده می کند).

برای کنترل کننده ها ، می توانید آنها را با پیچ M2.5 وصل کنید. مهره را در کنار PCB نگه داشتم و از واشر و پیچ در پایین استفاده می کنم.

من همچنین مدل سه بعدی لغزنده های دستگیره را برای پتانسیومترهایی که استفاده کردم قرار داده ام.

همه فایلهای سه بعدی را می توانید در GitHub پیدا کنید.

مرحله ششم: برنامه نویسی: آردوینو

برنامه نویسی: آردوینو
برنامه نویسی: آردوینو

بیایید با تنظیم یک طرح ساده برای آزمایش شروع کنیم. پیشنهاد می کنم از آموزش ایجاد شده توسط ITP در NYU استفاده کنید. برای انجام این آموزش ، باید p5.serialcontroll و node.js را نصب کرده باشید. در این آموزش ، شما با راه اندازی Arduino برای ارسال داده های سریال که توسط کتابخانه جاوا اسکریپت ما قابل استفاده است ، p5.js. برای این کار می توانید از هاب و کنترلری که در مراحل قبل ایجاد کردیم استفاده کنید ، یا می توانید مدارهای نشان داده شده در آموزش را تکرار کنید. این آموزش از پین ورودی آنالوگ A0 در Arduino Uno استفاده می کند که روی سیم نارنجی اولین کنترلر شما نقشه برداری شده است.

آموزش بعدی که می خواهید دنبال کنید را می توانید در اینجا پیدا کنید. این آموزش شما را از طریق تنظیم چندین ورودی و استفاده از آنها در p5.js. در آموزش ، ورودی های آنالوگ A0 و A1 استفاده می شود. اینها با سیمهای نارنجی و زرد کنترلر 1 سیستم ما مطابقت دارد.

پس از گذراندن آموزش های بالا ، می توانیم آردوینو را برنامه ریزی کنیم. کد مورد نظر ما در زیر آمده است:

// کنترل کننده 1const int dig2 = 2؛ // blue const int dig3 = 3؛ // بنفش const int dig4 = 4؛ // خاکستری const int dig5 = 5؛ // سفید const int dig6 = 6؛ // سیاه // کنترل کننده 2 const int dig7 = 7؛ // blue const int dig8 = 8؛ // بنفش const int dig9 = 9؛ // خاکستری const int dig10 = 10؛ // سفید const int dig11 = 11؛ // سیاه

void setup () {

Serial.begin (9600)؛ while (Serial.available () <= 0) {Serial.println ("سلام")؛ // ارسال پیام شروع تأخیر (300) ؛ // منتظر 1/3 ثانیه} pinMode (dig2 ، INPUT) باشید ؛ pinMode (dig3 ، INPUT) ؛ pinMode (dig4 ، INPUT) ؛ pinMode (dig5 ، INPUT) ؛ pinMode (dig6 ، INPUT) ؛ pinMode (dig7 ، INPUT) ؛ pinMode (dig8 ، INPUT) ؛ pinMode (dig9 ، INPUT) ؛ pinMode (dig10 ، INPUT) ؛ pinMode (dig11 ، INPUT) ؛ }

حلقه خالی () {

if (Serial.available ()> 0) {// بایت ورودی را بخوانید: int inByte = Serial.read ()؛ // سنسور را بخوانید:

// ANALOG Controller 1

int analog0 = analogRead (A0) ؛ int analog1 = analogRead (A1) ؛ int analog2 = analogRead (A2) ؛ // ANALOG Controller 2 int analog3 = analogRead (A3)؛ int analog4 = analogRead (A4) ؛ int analog5 = analogRead (A5) ؛ // DIGITAL Controller 1 int digital2 = digitalRead (dig2)؛ int digital3 = digitalRead (dig3)؛ int digital4 = digitalRead (dig4) ؛

int digital5 = digitalRead (dig5)؛

int digital6 = digitalRead (dig6)؛ // DIGITAL Controller 2 int digital7 = digitalRead (dig7)؛ int digital8 = digitalRead (dig8)؛ int digital9 = digitalRead (dig9) ؛ int digital10 = digitalRead (dig10)؛ int digital11 = digitalRead (dig11)؛ // چاپ نتایج: Serial.print (analog0)؛ // [0] Serial.print ("،") ؛ Serial.print (analog1) ؛ // [1] Serial.print ("،") ؛ Serial.print (analog2) ؛ // [2] Serial.print ("،") ؛ // Start Controller 2 data Serial.print (analog3)؛ // [3] Serial.print ("،") ؛ Serial.print (analog4) ؛ // [4] Serial.print ("،") ؛ Serial.print (analog5)؛ // [5] Serial.print ("،") ؛ Serial.print (digital2)؛ // [6] Serial.print ("،") ؛ Serial.print (digital3)؛ // [7] Serial.print ("،") ؛ Serial.print (digital4)؛ // [8] Serial.print ("،") ؛ Serial.print (digital5)؛ // [9] Serial.print ("،") ؛ Serial.print (digital6)؛ // [10] Serial.print ("،") ؛ // شروع كنترلر 2 داده Serial.print (digital7)؛ // [11] Serial.print ("،") ؛ Serial.print (digital8)؛ // [12] Serial.print ("،") ؛ Serial.print (digital9)؛ // [13] Serial.print ("،") ؛ Serial.println (digital10)؛ // [14] Serial.print ("،") ؛ Serial.println (digital11)؛ // [15]}}

این کد داده های سریال هر دو کنترلر ما را به عنوان یک آرایه 16 عددی ارسال می کند. 6 عدد اول از این اعداد ورودی های آنالوگ ما (بین 0-1023) و 10 مقدار باقی مانده مقادیر دیجیتال ما (0 یا 1) هستند.

هنگامی که کد ما بارگذاری شد ، می توانیم آن را با باز کردن مانیتور سریال و تایپ مقدار در مانیتور سریال مان ، همانطور که در آموزش دوم از ITP انجام دادیم ، آزمایش کنیم. ما باید رشته ای از مقادیر خود را با کاما جدا کنیم.

مرحله 7: برنامه نویسی: HTML

هنگامی که Arduino خود را راه اندازی کردیم و کار کردیم ، می توانیم برنامه نویسی موارد وب خود را شروع کنیم. کد HTML بسیار ساده است.

بدن {padding: 0؛ حاشیه: 0؛}

کد html به سادگی فایل های جاوا اسکریپت ما را به هم پیوند می دهد. بیشتر کد ما در واقع در فایل skj.js ما اتفاق می افتد.

مرحله 8: برنامه نویسی: P5.js و Javascript

هنگامی که HTML خود را تنظیم کردیم ، می توانیم روی JavaScript خود کار کنیم. اگر قبلاً این کار را نکرده اید ، باید p5.js و p5.play را بارگیری کرده و آنها را به پوشه کتابخانه های خود در فهرست وب سایت خود اضافه کنید.

  • p5.js
  • p5. بازی

در مرحله قبل ، ما فایل HTML خود را طوری تنظیم کردیم که کتابخانه های p5.js و p5.play خود را فراخوانی کند. ما همچنین آن را برای استفاده از فایل sketch.js خود تنظیم کرده ایم که در آن بیشتر برنامه نویسی خود را انجام می دهیم. در زیر کد اسکلت ما آمده است. شما همچنین می توانید آن را در اینجا پیدا کنید.

// سریال Variablesvar سریال؛ // متغیر برای نگهداری نمونه ای از کتابخانه سریال پورت varName = 'COM4'؛ // نام پورت سریال خود را در اینجا پر کنید // متغیرهای جهانی بازی ---------------

// تابع راه اندازی ----------------------

function setup () {createCanvas (640 ، 480) ؛ سریال = جدید p5. SerialPort ()؛ // نمونه جدیدی از کتابخانه serialport serial.on ('list'، printList) ایجاد کنید؛ // یک عملکرد بازخوانی برای رویداد لیست سریال serial.on ('متصل' ، serverConnected) ؛ // تماس برای اتصال به سرور serial.on ("باز" ، portOpen) ؛ // فراخوانی برای باز شدن پورت serial.on ('data'، serialEvent)؛ // فراخوانی برای ورود داده های جدید serial.on ('error'، serialError)؛ // فراخوانی خطاها serial.on ('close'، portClose)؛ // callback برای بستن درگاه serial.list ()؛ // لیست پورت های سریال serial.open (portName) ؛ // بازکردن پورت سریال} // تابع رسم ----------------------- تابع draw () {پس زمینه (0)؛ // black background} // داده های سریال را در اینجا تفسیر کنید ---------- تابع serialEvent () {// یک رشته را از پورت سریال بخوانید // تا زمانی که بازگشت و خط جدید new new: var inString = سریال را دریافت کنید. readStringUntil ('\ r / n')؛ // بررسی کنید که آیا در واقع یک ssetring در آنجا وجود دارد: if (inString.length> 0) {if (inString! == 'hello') {// در صورت سلام ، آن را نادیده بگیرید var sensors = split (inString، '، ') ؛ // رشته را در کاما if (sensors.length> 16) {// در صورت وجود شانزده عنصر (6 آنالوگ ، 10 دیجیتال) تقسیم کنید // از داده های حسگر در اینجا استفاده کنید:

}

} serial.write ('x')؛ // ارسال یک بایت با درخواست داده های سریال بیشتر}} // دریافت لیست پورت ها: function printList (portList) {// portList مجموعه ای از نامهای پورت سریال برای (var i = 0؛ i <portList.length؛ i ++) است {// لیست کنسول را نمایش دهید: print (i + "" + portList )؛ }} function serverConnected () {print ('متصل به سرور.')؛ } function portOpen () {print ('پورت سریال باز شد.')} function serialError (err) {print ('در پورت سریال مشکلی پیش آمد.' + err)؛ } function portClose () {print ('پورت سریال بسته شد.')؛ } تابع closeCode () {serial.close (portName)؛ بازگشت null؛ } window.onbeforeunload = closeCode؛

هنگامی که اسکلت را ذخیره کردید. شما می توانید از این مقادیر مشابه نحوه انجام آن در آموزش ITP استفاده کنید. رشته ای از مقادیری که ما در مرحله 6 از آردوینو ارسال کردیم ، به عنوان یک آرایه 16 عددی ارسال می شود. در زیر جایی است که ما این آرایه را تجزیه می کنیم.

// تفسیر داده های سریال در اینجا ----------

تابع serialEvent () {// یک رشته را از پورت سریال بخوانید // تا زمانی که کارتریج بازگشت و newline دریافت کنید: var inString = serial.readStringUntil ('\ r / n')؛ // بررسی کنید که آیا در واقع یک ssetring در آنجا وجود دارد: if (inString.length> 0) {if (inString! == 'hello') {// در صورت سلام ، آن را نادیده بگیرید var sensors = split (inString، '، ') ؛ // رشته را روی کاما if (sensors.length> 16) {// اگر شانزده عنصر (6 آنالوگ ، 10 دیجیتال) وجود دارد // در اینجا از داده های حسگر استفاده کنید:}} serial.write ('x')؛ // ارسال یک بایت با درخواست داده های سریال بیشتر}}

اکنون می توانیم برنامه خود را اجرا کنیم تا ببینیم آیا کار می کند یا خیر!

مرحله 9: اجرای برنامه

اجرای برنامه شما
اجرای برنامه شما

اکنون می توانیم برنامه خود را اجرا کنیم تا ببینیم آیا کار می کند یا خیر. شما می توانید بازی خود را با استفاده از فایل skeleton.js در فایل قبلی ما ایجاد کنید یا از بازی ساده Pipe که در اینجا یافت می شود استفاده کنید.

مشابه آزمایشگاه ITP ، برای اجرای برنامه خود ، مراحل زیر را دنبال می کنیم.

  • آردوینو را با کنترلرهایی که قصد استفاده از آنها را دارید وصل کنید.
  • p5.serialcontrol را باز کنید
  • پورت طرح p5 خود را به پورت مورد استفاده تغییر دهید (اگر از اسکلت استفاده می کنید ، این در خط 3 است)
  • فایل HTML را که به طرح p5 شما پیوند دارد باز کنید

اگر رسانه های خارجی مانند تصاویر یا فونت های بارگیری شده دارید ، می خواهید این را روی سرور اجرا کنید. در صورت تمایل می توانید یک سرور پایتون محلی ساده را اجرا کنید.

مرحله دهم: جلو رفتن

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

توصیه شده: