فهرست مطالب:

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

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

تصویری: آردوینو مورس کد نویسنده: 7 مرحله (همراه با تصاویر)
تصویری: Morse Code Converter with arduino 2024, جولای
Anonim
Image
Image
آردوینو مورس کد نویسنده
آردوینو مورس کد نویسنده

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

تدارکات

برد آردوینو Uno Stepper motor Micro servo SG90ULN2003 پله موتور راننده ماژول منبع تغذیه ماژول منبع تغذیه Breadboard4 w Jumper wires6 × سیم زن dupont 9V1A آداپتور USB کابل 2 ow رولپلاک چوبی 2 × چشمه کاغذ سفید کاغذ چسب لگو قلم گیر) قیچی برش

مرحله 1: ساختن پایگاه

ساختن پایگاه
ساختن پایگاه
ساختن پایگاه
ساختن پایگاه
ساختن پایگاه
ساختن پایگاه

با ساختن پایه شروع کنید. معدن من 4 گل میخ عرض دارد و 20 میخ طول دارد ، پس از ساختن یک لایه با این طول ، من یک چارچوب بزرگ عرض در اطراف آن ایجاد کردم که از یک طرف فاصله ایجاد می کند تا فضا برای موتور پله ای باقی بماند ، سپس اضافه کردم قطعات کاشی را به قسمت میانی که نوار کاغذ در آن قرار دارد ، بکشید. استفاده از Lego باعث شده است که بسیار محکم و آسان برای تغییر باشد. برای ایجاد کاغذ رول ، نوارهای کاغذ A4 را با عرض 1.2 سانتی متر برش دادم (من این عرض را انتخاب کردم زیرا عرض آن برابر با چرخه لگو است ، می توانید بسته به چرخ خود را بزرگتر یا کوچکتر کنید) و انتهای آنها را به هم چسباندم برای تشکیل یک نوار بسیار بلند ، سپس آن را دور چرخ پیچیدم.

مرحله 2: قطعه سروو

تکه سروو
تکه سروو
تکه سروو
تکه سروو
تکه سروو
تکه سروو

برای این مرحله شما نیاز دارید:

  • دو رولپلاک چوبی به طول 4 سانتی متر
  • دو چشمه به طول 2 سانتی متر
  • یک کاه به دو تکه به طول 2 سانتیمتر برش دهید
  • یک عدد مقوا 12 در 4 سانتی متر
  • دو عدد مقوا 4 سانتی متر در 1.5 سانتی متر
  • یک عدد مقوا 4 سانتی متر در 2 سانتی متر

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

دوم ، قطعه 4 سانتی متر در 2 سانتی متر را روی نی ها بچسبانید.

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

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

من در نهایت 3 سانتی متر از قسمت پایین قطعه 12 سانتی متر در 4 سانتی متر بریدم و دو قطعه دیگر 4 سانتی متر در 1.5 سانتی متر به آن چسباندم ، سپس آن را با یک قطعه 5.5 سانتی متر در 4 سانتی متر از مقوا پوشاندم. و برای نگه داشتن نشانگر ، یک عدد کوچک تهیه کردم یک حلقه از نوار الاستیک بچسبانید و آن را به یک تکه مقوا بچسبانید ، سپس آن را به قطعه 4 سانتی متر در 2 سانتی متر چسبانیدم که با شروع سروو به سمت پایین حرکت می کند. این افزودنیها باعث می شوند که نشانگر از حرکت به پهلو به پهلو در هنگام بازگشت فنرها جلوگیری کند.

مرحله 3: اضافه کردن سروو موتور و کاغذ رول به پایه

افزودن سروو موتور و کاغذ رول به پایه
افزودن سروو موتور و کاغذ رول به پایه
افزودن سروو موتور و کاغذ رول به پایه
افزودن سروو موتور و کاغذ رول به پایه

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

مرحله 4: ساخت قاب موتور پله ای

ساخت قاب موتور پله ای
ساخت قاب موتور پله ای
ساخت قاب موتور پله ای
ساخت قاب موتور پله ای
ساخت قاب موتور پله ای
ساخت قاب موتور پله ای

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

مرحله 5: تکمیل لمس

لمس های نهایی
لمس های نهایی
لمس های نهایی
لمس های نهایی
لمس های نهایی
لمس های نهایی
لمس های نهایی
لمس های نهایی

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

مرحله ششم: الکترونیک

الکترونیک
الکترونیک
الکترونیک
الکترونیک

در نهایت ، باید موتورها را به آردوینو متصل کرده و کد را بارگذاری کنید.

ما با سروو موتور شروع می کنیم ، سیم قهوه ای (سیم زمین) را به پین GND و سپس سیم قرمز (سیم برق) را به پین 5 ولت و سیم نارنجی (سیم سیگنال) را به Dig #5 وصل می کنیم. سنجاق کردن در مرحله بعد ، موتور پله ای ، 1N1 را به حفاری #11 ، 1N2 را به حفاری #10 ، 1N3 را به حفاری #9 ، 1N4 را به حفاری #9 ، 1N4 را به حفاری #8 ، 5V را به سمت مثبت تخته نان و پین زمین را به سمت منفی آن متصل کنید. تخته نان و فراموش نکنید که ماژول منبع تغذیه را به تخته نان متصل کنید تا مطمئن شوید که جنبه های مثبت و منفی آن به درستی با طرف های مربوطه در تخته نان هم تراز است. اگر این کار را فراموش کنید ، قدرت پروژه خود را معکوس می کنید و نمی خواهید این کار را انجام دهید.

برای کد ، چهار روش نوشتم ، یکی برای نوشتن نقطه ، یکی برای نوشتن خط تیره و دو روش برای فاصله بین هر حرف و هر کلمه. به این ترتیب ، من می توانم به جای نوشتن مجدد آن برای هر حرف ، فقط در صورت نیاز به این روش ها تماس بگیرم. سپس یک حلقه for نوشتم که از هر حرف متن عبور می کند و آن را بنویسید ، در داخل آن ، یک دستور if برای هر حرف نوشتم ، اما اگر ترجیح می دهید می توانید آن را در یک عبارت switch بنویسید. البته می توانید به کد اضافه کنید تا برنامه بتواند اعداد را بخواند. هنگامی که تمام سیم کشی آماده است ، فقط کافی است کد را در IDE خود کپی و جایگذاری کنید. نصب کتابخانه های stepper ، servo و string را فراموش نکنید. بعد از آن ، خوب است بروید.

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

هنگامی که آردوینو شروع می شود ، برنامه به اولین حرف متن نگاه می کند و بسته به اینکه کدام یک باشد ، توابع را که در کد مورس می نویسد فرا می خواند. به عنوان مثال ، هنگامی که عملکرد نقطه فراخوانی می شود ، موتور سروو روی 160 تنظیم می شود که قلم را به سمت پایین حرکت می دهد ، سپس روی 90 تنظیم می شود که به فنرها اجازه می دهد تا قلم را با آنها حرکت دهند. و در صورت فراخوانی تابع خط ، سروو قلم را به سمت پایین حرکت می دهد ، سپس موتور پله ای چرخ را می چرخاند که کاغذ را می کشد و قلم را خط خطی می کند. و اگر یکی از عملکردهای فضایی نامیده می شود موتور پله ای می چرخد اما با قلم به بالا ، کاغذ را می کشد و بین حروف یا کلمات فاصله ایجاد می کند. پس از اتمام کار ، به حرف بعدی می رود و همان روند را تکرار می کند. امیدوارم ازش خوشتان بیاید ؛)

کد

#عبارتند از

#Include #include #include const int stepsPerRevolution = 150؛ // این متغیر برای موتور پله ای است String جمله = "*سلام"؛ // این متغیر را برای نوشتن کلمات مختلف تغییر دهید اما فقط با حروف کوچک بنویسید و کلمه خود را با "*" Stepper myStepper شروع کنید (مراحلPerRevolution ، 8 ، 10 ، 9 ، 11) ؛ Servo myServo؛ // این روشی است که باعث می شود ربات یک نقطه خالی نقطه () {Serial.println ("شروع نقطه") بنویسد ؛ myServo.write (160)؛ تاخیر (1000) ؛ myServo.write (90)؛ تاخیر (1000) ؛ myStepper.step (stepsPerRevolution) ؛ تاخیر (1000) ؛ Serial.println ("نقطه انجام شد") ؛ } // این روشی است که باعث می شود ربات خط تیره void dash () {Serial.println ("شروع خط تیره") را بنویسد. myServo.write (160)؛ تاخیر (1000) ؛ myStepper.step (stepsPerRevolution) ؛ تاخیر (1000) ؛ myServo.write (90)؛ تاخیر (1000) ؛ myStepper.step (stepsPerRevolution) ؛ تاخیر (1000) ؛ Serial.println ("خط کش انجام شد")؛ } // این روشی است که باعث می شود ربات بین هر حرف فاصله خالی () {Serial.println ("شروع فضا") بگذارد ؛ myServo.write (90)؛ تاخیر (1000) ؛ myStepper.step (200)؛ تاخیر (1000) ؛ Serial.println ("فضای انجام شده") ؛ } // این روشی است که باعث می شود ربات فاصله بیشتری بین هر کلمه بین هر کلمه بگذارد void bigSpace () {myServo.write (90)؛ myStepper.step (250)؛ تاخیر (1000) ؛ } void setup () {// کد راه اندازی خود را در اینجا قرار دهید تا یکبار اجرا شود: Serial.begin (9600)؛ myStepper.setSpeed (100) ؛ myServo.attach (5) ؛ int first = sentences.indexOf ('*')؛ // این حلقه for از هر حرف رشته عبور می کند و سپس روش های مناسب برای نوشتن آن را برای (int i = 0؛ i <fjal.length ()؛ i ++) {if (hevok.charAt (اول+i) فراخوانی می کند. == 'a') {Serial.print (".-")؛ نقطه()؛ خط تیره()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'b') {Serial.print ("-…")؛ خط تیره()؛ نقطه()؛ نقطه()؛ نقطه()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'c') {Serial.print ("-.-.")؛ خط تیره()؛ نقطه()؛ خط تیره()؛ نقطه()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'd') {Serial.print ("-..")؛ خط تیره()؛ نقطه()؛ نقطه()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'e') {Serial.print (".")؛ نقطه()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'f') {Serial.print ("..-.")؛ نقطه()؛ نقطه()؛ خط تیره()؛ نقطه()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'g') {Serial.print ("-.")؛ خط تیره()؛ خط تیره()؛ نقطه()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'h') {Serial.print ("…")؛ نقطه()؛ نقطه()؛ نقطه()؛ نقطه()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'i') {Serial.print ("..")؛ نقطه()؛ نقطه()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'j') {Serial.print (".---")؛ نقطه()؛ خط تیره()؛ خط تیره()؛ خط تیره()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'k') {Serial.print ("-.-")؛ خط تیره()؛ نقطه()؛ خط تیره()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'l') {Serial.print (".-..")؛ نقطه()؛ خط تیره()؛ نقطه()؛ نقطه()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'm') {Serial.print ("-")؛ خط تیره()؛ خط تیره()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'n') {Serial.print ("-.")؛ خط تیره()؛ نقطه()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'o') {Serial.print ("---")؛ خط تیره()؛ خط تیره()؛ خط تیره()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'p') {Serial.print (".--.")؛ نقطه()؛ خط تیره()؛ خط تیره()؛ نقطه()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'q') {Serial.print ("--.-")؛ خط تیره()؛ خط تیره()؛ نقطه()؛ خط تیره()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'r') {Serial.print (".-.")؛ نقطه()؛ خط تیره()؛ نقطه()؛ فضا()؛ } else if (sentences.charAt (first + i) == 's') {Serial.print ("…")؛ نقطه()؛ نقطه()؛ نقطه()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 't') {Serial.print ("-")؛ خط تیره()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'u') {Serial.print ("..-")؛ نقطه()؛ نقطه()؛ خط تیره()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'v') {Serial.print ("…-")؛ نقطه()؛ نقطه()؛ نقطه()؛ خط تیره()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'w') {Serial.print (".--")؛ نقطه()؛ خط تیره()؛ خط تیره()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'x') {Serial.print ("-..-")؛ خط تیره()؛ نقطه()؛ نقطه()؛ خط تیره()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'y') {Serial.print ("-.--")؛ خط تیره()؛ نقطه()؛ خط تیره()؛ خط تیره()؛ فضا()؛ } else if (hevok.charAt (اول + i) == 'z') {Serial.print ("-..")؛ خط تیره()؛ خط تیره()؛ نقطه()؛ نقطه()؛ فضا()؛ } else if (hevok.charAt (اول + i) == '') {Serial.print ("/")؛ bigSpace ()؛ }}} void loop () {// اینجا چیزی ننویسید}

مرحله 7: عیب یابی

چرخ حرکت نمی کند

ممکن است اصطکاک زیادی بین چرخ و کاغذ وجود داشته باشد ، سعی کنید کمی چرخ را بالا بیاورید یا آن را تغییر دهید.

چرخ کاغذ را می کشد اما سپس بدون کشیدن کاغذ به چرخش خود ادامه می دهد

مطمئن شوید که چرخ را در مرکز موتور پله ای چسبانده اید

نقاط و خطوط به هم متصل هستند

بررسی کنید که آیا توابع نقطه ، خط فاصله و فاصله به درستی نوشته شده اند ، باید اینگونه باشند:

// این روشی است که باعث می شود ربات یک نقطه dotvoid () {Serial.println ("نقطه شروع") بنویسد ؛ myServo.write (160)؛ تاخیر (1000) ؛ myServo.write (90)؛ تاخیر (1000) ؛ myStepper.step (stepsPerRevolution) ؛ تاخیر (1000) ؛ Serial.println ("نقطه انجام شد")؛ }

// این روشی است که باعث می شود ربات خط تیره بنویسد

void dash () {Serial.println ("شروع خط تیره")؛ myServo.write (160)؛ تاخیر (1000) ؛ myStepper.step (stepsPerRevolution) ؛ تاخیر (1000) ؛ myServo.write (90)؛ تاخیر (1000) ؛ myStepper.step (stepsPerRevolution) ؛ تاخیر (1000) ؛ Serial.println ("خط کش انجام شد")؛ }

// این روشی است که باعث می شود ربات بین هر حرف فاصله بیندازد

void space () {Serial.println ("شروع فضا")؛ myServo.write (90)؛ تاخیر (1000) ؛ myStepper.step (200)؛ تاخیر (1000) ؛ Serial.println ("فضای انجام شده") ؛ }

توصیه شده: