برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

داده هایی در مورد برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

تبلیغات
آخرین نظرات

۴۵ مطلب با موضوع «برق الکترونیک رباتیک :: آردوینو و سایربردها» ثبت شده است

ساختن کتابخانه (Library) در Arduino (آردوینو)

ShahBaz | جمعه, ۴ اسفند ۱۳۹۶، ۱۰:۴۷ ب.ظ

ساختن کتابخانه (Library) در Arduino (آردوینو)

ساختن کتابخانه (Library) در Arduino (آردوینو)

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

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

در پلت فرم آردوینو برای نوشتن بدنه برنامه از زبان سی و کتابخانه ها از سی ++ استفاده می شه. برای شروع ابتدا به مسیر زیر بروید و یک پوشه با نام مثلا test ایجاد کنید.

C:\Users\your-username\Documents\Arduino\libraries

 برای نوشتن کتابخانه نیاز به دو فایل با پسوند h و cpp می باشد که در فایل با پسوند h (header) کلاس و اعلان های توابع رو تعریف می کنید و در فایل cpp بدنه توابع رو تعریف می کنید.

حالا دو فایل test.h و test.cpp رو در پوشه ایجاد کنید. بعد آردوینو رو اجرا کنید و کتابخانه رو همانند تصویر زیر در خط اول وارد و فراخوانی کنید سپس کامپایل کنید تا از صحت مراحل فوق اطمینان حاصل کنید.

import

حالا دو کتابخانه زیر رو در خط اول فایل h وارد کنید:
#include <SoftwareSerial.h>
#include "Arduino.h"
1
2
    
#include <SoftwareSerial.h>
#include "Arduino.h"

بعد کلاس رو تعریف کنید:
class testlib
{
 public:
  //توابعی که در همه جا میتوان استفاده کرد
 private:
  //توابعی که فقط در خود کتابخانه می شه استفاده کرد
};
1
2
3
4
5
6
7
    
class testlib
{
public:
  //توابعی که در همه جا میتوان استفاده کرد
private:
  //توابعی که فقط در خود کتابخانه می شه استفاده کرد
};

توی این فایل شما فقط اعلان های توابع رو تعریف می کنید و بدنه توابع رو در فایل cpp ایجاد می کنید. حالا مثلا ایجاد من می خوام یه تابع تعریف کنید که با ارسال کلمه hello در سریال به میکرو یا ماژول کلمه hi رو به ما برگردونه.

اول باید توی قسمت public اعلان های توابع رو تعریف کنید به عنوان مثال
testlib(int rxPin, int txPin);
void check(String comm);
1
2
    
testlib(int rxPin, int txPin);
void check(String comm);

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

و در قسمت private هم یه پورت به صورت نرم افزار تعریف کنید مثل زیر (اسم پورت رو اینجا TPORT گذاشتم شما هر اسمی رو می تونید بزارید ولی توجه کنید که کامپایلر به بزرگ و کوچک بودن حروف حساس است)
SoftwareSerial * TPORT;
1
    
SoftwareSerial * TPORT;

بعد میریم سراغ فایل cpp و سه خط زیر رو اضافه می کنید.
#include <SoftwareSerial.h>
#include "Arduino.h"
#include "test.h"
1
2
3
    
#include <SoftwareSerial.h>
#include "Arduino.h"
#include "test.h"

سپس بدنه توابع رو اضافه کنید….
testlib::testlib(int txPin, int rxPin) {
    TPORT = new SoftwareSerial(rxPin, txPin);
    TPORT->begin(9600);
}

void testlib::check(String comm) {
 
}
1
2
3
4
5
6
7
8
    
testlib::testlib(int txPin, int rxPin) {
    TPORT = new SoftwareSerial(rxPin, txPin);
    TPORT->begin(9600);
}
 
void testlib::check(String comm) {

}

دقت کنید که testlib نام کلاسی هست که اعلان های توابع در آن تعریف شده و باید با ۲ کالن قبل از تابع قرار بگیره.

در تابع اول که config نام داره و در بدنه برنامه می توانیم استفاده کنیم ، TPORT رو می تونیم به صورت نرم افزاری پایه های tx و rx رو به دلخواه تعیین کنیم. و در خط بعدش پورت روی باود ریت ۹۶۰۰ تنظیم شده و باز می شود.

در تابع دوم دستورات دلخواه رو می نویسیم ، به عنوان مثال کدهای زیر رو به تابع اضافه کنید:
if (TPORT->available()){
        String str = TPORT->readString();
        if (str == comm){
           TPORT->println("hi");
        }
}
1
2
3
4
5
6
    
if (TPORT->available()){
        String str = TPORT->readString();
        if (str == comm){
           TPORT->println("hi");
        }
}

توی چند خط کد بالا گفتیم اگه به بافر پورت سریال چیزی ارسال شد مقدار اونو در متغیر str بریز و در یک شرط گفتیم اگر مقدار str برابر با comm (که مقدار تعیین شده توسط شما در بدنه برنامه است) بود رشته hi رو به پورت سریال ارسال کن.

حالا به آردوینو برید و قبل از تابع setup خط زیر رو اضافه کنید:
testlib serial(1, 3);
1
    
testlib serial(1, 3);

 

با این خط serial رو از نوع testlib که پورت سریال تعریف شده قرار می دید و پایه های tx و rx رو هم مشخص می کنید. در حلقه loop هم خط زیر رو اضافه کنید و بعد برنامه رو کامپایل سپس آپلود کنید ، تست کنید.
serial.check("hello");
1
    
serial.check("hello");

بعد از تست کدها برنامه رو با نام دلخواه ذخیره کنید و در پوشه ایی به نام examples در پوشه کتابخانه test قرار بدید تا نمونه کد شما در آردوینو به قسمت Examples اضافه باشه. شاید نیاز باشه یکبار آردوینو رو ببندید بعد باز کنید. کتابخانه رو اینجا می تونید دانلود کنید.

امیدوارم مفید واقع شده باشه
در تاریخ ۱۵/مرداد/۱۳۹۵ یک دیدگاه برچسب ها : ،arduino،library،آردوینو،کتابخانه،

نوشته شده توسط امیر امرایی

  • ShahBaz

نوشتن کتابخانه برای آردوینو (قسمت دوم)

ShahBaz | جمعه, ۴ اسفند ۱۳۹۶، ۱۰:۴۰ ب.ظ

نوشتن کتابخانه برای آردوینو (قسمت دوم)

جمعه, 29 دی 1396 ساعت 19:57

این مورد را ارزیابی کنید
(1 رای)

این آموزش توضیح می‌دهد که چگونه برای آردوینو یک کتابخانه بسازیم. این آموزش با یک طرح از کد flashing Morse شروع می‌کند و توضیح می‌دهد که چگونه عملکردش را به یک کتابخانه تغییر دهیم.

در قسمت اول این آموزش در "نوشتن کتابخانه برای آردوینو (قسمت اول)" فایل هدر کتابخانه مدنظر را ساختیم. اکنون به قسمت‌های مختلف فایل منبع Morse.cpp می‌رویم.

در ابتدا تعدادی دستور #include می‌آید. این‌ها اجازه دسترسی بقیه کد را به توابع استاندارد آردوینو می‌دهد و فایل هدر خود را تعریف می‌کند:

#include "Arduino.h"
#include "Morse.h"

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

Morse::Morse(int pin)
{
  pinMode(pin, OUTPUT);
  _pin = pin;
}

تعدادی دستور عجیب در این کد وجود دارد. اول اینکه Morse:: قبل از نام تابع آمده است. این دستور می‌گوید که تابع بخشی از کلاس Morse است. شما این را دوباره در دیگر توابع در کلاس می‌بینید. دومین چیز غیرعادی خط تیره در کنار اسم متغیر خصوصی ماست،  _pin. درواقع این  متغیر می‌تواند هر نامی که شما بخواهید را داشته باشد تا زمانی که با تعریف موجود در فایل هدر همخوانی داشته باشد. قرار دادن خط تیره قبل از اسم متغیر روش معمولی است که متغیرهای خصوصی را مشخص می‌کند و هم‌چنین اسم را ازآنچه در تابع موردبحث آمده است متمایز می‌سازد (که در این مورد آن را از pin جدا می‌سازد).

سپس کد واقعی از طرح که شما آن را به کتابخانه تبدیل کرده‌اید می‌آید. این خیلی شبیه به قبل است با این تفاوت که Morse:: قبل از اسم توابع قرار می‌گیرد و _pin به‌جای pin می‌نشیند:

void Morse::dot()
{
  digitalWrite(_pin, HIGH);
  delay(250);
  digitalWrite(_pin, LOW);
  delay(250);  
}

void Morse::dash()
{
  digitalWrite(_pin, HIGH);
  delay(1000);
  digitalWrite(_pin, LOW);
  delay(250);
}

درنهایت بسیار رایج است که در بالای فایل منبع نیز کامنت بیاید. بیایید همه‌چیز را ببینیم:

/*
  Morse.cpp - Library for flashing Morse code.
  Created by David A. Mellis, November 2, 2007.
  Released into the public domain.
*/

#include "Arduino.h"
#include "Morse.h"

Morse::Morse(int pin)
{
  pinMode(pin, OUTPUT);
  _pin = pin;
}

void Morse::dot()
{
  digitalWrite(_pin, HIGH);
  delay(250);
  digitalWrite(_pin, LOW);
  delay(250);  
}

void Morse::dash()
{
  digitalWrite(_pin, HIGH);
  delay(1000);
  digitalWrite(_pin, LOW);
  delay(250);
}

و این همه‌چیزی است که شما نیاز دارید (چیزهای اختیاری دیگری نیز وجود دارد، اما ما بعداً درباره آن‌ها صحبت می‌کنیم) اکنون ببینیم که چگونه از کتابخانه استفاده کنیم.

اول یک کتاب راهنمای Morse در زیرشاخه‌های کتاب راهنمای کتابخانه‌های مربوط به کتاب راهنمای sketchbook خود بسازید. کد Morse.h و Morse.cpp را به آن کتاب راهنما جابه‌جا و یا کپی کنید. اکنون محیط آردوینو راه‌اندازی کنید. از منو sketch>Import Library را بازکنید باید Morse را درون آن ببینید. کتابخانه با طرح‌هایی که از آن استفاده می‌شود کامپایل می‌شود. اگر به نظر می‌رسد کتابخانه ساخته نشده است اطمینان حاصل کنید که فایل‌ها با .h و  .cpp پایان‌یافته‌اند (بدون هیچ‌گونه افزودنی اضافی مانند .tet یا .pde)

اکنون ببینیم چگونه ما می‌توانیم طرح قدیمی SOS خود را با استفاده از کتابخانه جدید شبیه‌سازی کنیم:

#include <Morse.h>

Morse morse(13);

void setup()
{
}

void loop()
{
  morse.dot(); morse.dot(); morse.dot();
  morse.dash(); morse.dash(); morse.dash();
  morse.dot(); morse.dot(); morse.dot();
  delay(3000);
}

تعداد کمی تغییر نسبت به طرح قدیمی وجود دارد (هم‌چنین مقداری از کد به کتابخانه انتقال داده‌شده است).

در ابتدا ما یک دستور #include به بالای طرح اضافه کرده‌ایم. این موجب می‌شود تا کتابخانه مورس برای طرح در دسترس باشد و شامل کدها می‌شود و به برد فرستاده می‌شود. این به این معنی است که اگر شما دیگر به کتابخانه نیاز ندارید باید #include را پاک‌کنید تا مقداری فضا ذخیره کنید.

ما اکنون یک مثال از کلاس Morse به نام morse ساختیم:

Morse morse(13);

وقتی این خط اجرا می‌شود (که درواقع این حتی قبل از تابع setup() اتفاق می‌افتد) سازنده کلاس Morse فراخوانده می‌شود و آرایه‌ای که شما در اینجا آورده‌اید را منتقل می‌کند (در این مورد فقط 13).
توجه داشته باشید که setup() ما اکنون خالی است، این به این دلیل است که فراخوانی pinMode() درون کتابخانه اتفاق می‌افتد. (زمانی که نمونه ساخته‌شده است).

در آخر، برای فراخوانی توابع dot() و dash() ما نیاز داریم که پیشوند morse. را به آن‌ها بیفزاییم. (اسم مثالی که ما می‌خواهیم از آن استفاده کنیم). ما می‌توانیم چند نمونه از کلاس Morse داشته باشیم، هرکدام از آن‌ها روی پین خود ذخیره‌شده‌اند در این مثال در متغیر خصوصی _pin ذخیره می‌شوند. با فراخوانی یک تابع در یک نمونه خاص، ما مشخص می‌کنیم که کدام‌یک از متغیرهای مثال باید در طول فراخوانی یک تابع استفاده شود. اگر ما هر دو را داشته باشیم به‌صورت زیر می‌شود:

Morse morse(13);
Morse morse2(12);

پس در یک فراخوانی morse2.dot()، -pin، 12 خواهد بود.

اگر شما طرح جدیدی امتحان کردید، احتمالاً متوجه شدید که هیچ‌چیزی از کتابخانه ما توسط محیط شناخته‌شده نیست و به‌صورت رنگی مشخص‌شده است. متأسفانه نرم‌افزار آردوینو نمی‌تواند به‌طور خودکار چیزی را که شما در کتابخانه خود تعریف کرده‌اید شناسایی کند (هرچند این می‌تواند یک ویژگی خوب باشد)؛ بنابراین، شما باید اندکی به آن کمک کنید. به این منظور یک فایلی را به نام keywords.txt در کتاب راهنمای Morse ایجاد کنید. این باید مشابه زیر باشد:

Morse   KEYWORD1
dash    KEYWORD2
dot     KEYWORD2

هر خط به نام یک کلیدواژه است که به دنبال آن‌یک tap آمده است (نه space) و بعد از یک نوع کلیدواژه دیگر آمده است. کلاس‌ها باید KEYWORD1 باشند و رنگ آن‌ها نارنجی است. توابع باید KEYWORD2 باشند و رنگ آن‌ها قهوه‌ای است. شما باید آردوینو را مجدداً راه‌اندازی کنید تا بتواند کلیدواژه‌های جدید را شناسایی کند.

این بسیار خوب است طرحی فراهم آورید تا مردم با استفاده از آن از کتابخانه شما استفاده کنند. برای انجام این کار، یک کتاب راهنمای مثال‌ها را درون کتاب راهنمای Morse ایجاد کنید. سپس کتاب راهنمای شامل طرح را (بیایید آن را SOS بنامیم) که ما در بالا آن را نوشتیم به کتاب راهنمای مثال‌ها منتقل و یا کپی کنید. (شما می‌توانید طرح را با استفاده از فرمان Sketch> Show sketch Folder بیابید) اگر محیط آردوینو را مجدداً راه‌اندازی کنید یک کتابخانه Morse را درون منو File>Sketchbook>Examples شامل مثال‌هایتان ببینید. ممکن است شما بخواهید برای توضیح چگونگی استفاده از کتابخانه خود کامنتی بگذارید.

اگر شما می‌خواهید که یک کتابخانه کامل را بررسی کنید (با کلمات کلیدی و مثال‌ها) می‌توانید فایل زیر را دانلود کنید:

Morse.zip

نظرات و سؤالات خود را با ما مطرح کنید. اگر کتابخانه‌ای را به این روش نوشتید برای استفاده با ما هم در اشتراک بگذارید.

 

 

نظرات، پیشنهادات و انتقادات خود را برای بهتر شدن محتوای مطالب با ما در میان بگذارید...

 


ترجمه شده توسط تیم الکترونیک صنعت بازار | منبع: سایت arduino.cc

  • ShahBaz

نوشتن کتابخانه برای آردوینو (قسمت اول)

ShahBaz | جمعه, ۴ اسفند ۱۳۹۶، ۱۰:۳۸ ب.ظ

نوشتن کتابخانه برای آردوینو (قسمت اول)

پنج شنبه, 28 دی 1396 ساعت 19:47

این مورد را ارزیابی کنید
(2 رای‌ها)

این آموزش توضیح می‌دهد که چگونه برای آردوینو یک کتابخانه بسازیم. این آموزش با یک طرح از کد flashing Morse شروع می‌کند و توضیح می‌دهد که چگونه عملکردش را به یک کتابخانه تغییر دهیم. این اجازه می‌دهد دیگران به‌راحتی از کدی که شما نوشته‌اید استفاده کنند همچنین شما به‌راحتی آن را به‌روزرسانی کنید و کتابخانه را بهبود ببخشید.

ما با یک طرح که کد مورس ساده‌ای است، شروع می‌کنیم:

int pin = 13;

void setup()
{
  pinMode(pin, OUTPUT);
}

void loop()
{
  dot(); dot(); dot();
  dash(); dash(); dash();
  dot(); dot(); dot();
  delay(3000);
}

void dot()
{
  digitalWrite(pin, HIGH);
  delay(250);
  digitalWrite(pin, LOW);
  delay(250);
}

void dash()
{
  digitalWrite(pin, HIGH);
  delay(1000);
  digitalWrite(pin, LOW);
  delay(250);
}

اگر شما این طرح را اجرا کنید، فلاش می‌زند تا کد ساده مورس برای SOS را روی پین 13 اجرا کند.

این کد چندین قسمت مختلف دارد که ما نیاز داریم آن‌ها را به کتابخانه خود بیاوریم. اول، ما توابع dot() و dash() را داریم که کار چشمک زدن را بر عهده‌دارند. دوم، متغیر ledPin وجود دارد که تابعی است که برای تعیین اینکه کدام پین استفاده شود، مورداستفاده قرار می‌گیرد. درنهایت یک فراخوانی pinMode() وجود دارد که پین را به‌عنوآن‌یک خروجی تنظیم می‌کند.

حال بیاید تا این کد را به کتابخانه تبدیل کنیم!

شما حداقل به دو فایل برای کتابخانه نیاز دارید: یکی فایل هدر یا header file و یا (w/the extension.h) و دیگری فایل منبع یا source file یا w/extension.cpp. فایل هدر دارای تعاریف برای کتابخانه است: اساساً فهرستی از همه‌چیزهایی است که درون آن قرار دارد، درحالی‌که فایل منبع کد واقعی را در بردارد. ما کتابخانه خود را “Morse” می‌نامیم، بنابراین فایل هدر ما Morse.h می‌شود. بیایید ببینیم چه چیزهایی در آن قرار دارد: در ابتدا ممکن است مقداری عجیب به نظر برسد اما زمانی که فایل منبع را با آن همراه کنید، معنی‌دار می‌شود.

هسته فایل هدر شامل یک خط برای هر تابع موجود در کتابخانه می‌شود که در یک کلاس به همراه هر متغیری که نیاز دارید بسته‌بندی می‌شود:

class Morse
{
  public:
    Morse(int pin);
    void dot();
    void dash();
  private:
    int _pin;
};

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

شما به چندین چیز دیگر در فایل هدر نیاز دارید. اول یک دستور #include که به شما دسترسی به انواع زبان استاندارد و ثابت آردوینو را می‌دهد. (این به‌طور خودکار به طرح‌های نرمال اضافه می‌شود، اما به کتابخانه‌ها اضافه نمی‌شود). این دستور مانند زیر است:

#include "Arduino.h"

درنهایت، رایج است که همه فایل هدر را در یک ساختار عجیب‌وغریب قرار دهید:

#ifndef Morse_h
#define Morse_h

// the #include statment and code go here...

#endif

اساساً، اگر کسی تصادفاً کتابخانه شمارا دو بار #include کند، این کار از بروز مشکلات جلوگیری می‌کند.

درنهایت شما کامنتی در بالای هر کتابخانه به همراه اسم آن، توضیح کوتاهی درباره اینکه چه می‌کند، جه کسی آن را نوشته است، تاریخ و لایسنس آن می‌گذارید.

بیایید به یک فایل هدر کامل نگاهی بیندازیم:

/*
  Morse.h - Library for flashing Morse code.
  Created by David A. Mellis, November 2, 2007.
  Released into the public domain.
*/
#ifndef Morse_h
#define Morse_h

#include "Arduino.h"

class Morse
{
  public:
    Morse(int pin);
    void dot();
    void dash();
  private:
    int _pin;
};

#endif

 در قسمت دوم این آموزش در "نوشتن کتابخانه برای آردوینو (قسمت دوم)" به قسمت‌های مختلف فایل منبع Morse.cpp می پردازیم.

نظرات، پیشنهادات و انتقادات خود را برای بهتر شدن محتوای مطالب با ما در میان بگذارید...

 


ترجمه شده توسط تیم الکترونیک صنعت بازار | منبع: سایت arduino.cc

  • ShahBaz

آموزش نحوه راه اندازی درایور MD5 با آردوینو Arduino

ShahBaz | سه شنبه, ۱ اسفند ۱۳۹۶، ۱۰:۴۷ ب.ظ

آموزش نحوه راه اندازی درایور MD5 با آردوینو Arduino

توسط محمود حسن پور دهنوی · تیر ۱۰, ۱۳۹۵

مقدمه

در این مقاله  قصد داریم نحوه راه اندازی درایور MD5 را با برد آموزشی Arduino توضیح دهیم. آردوینو یک بورد آموزشی پلتفرم می ­باشد که به صورت Open-Source و بر مبنای سادگی استفاده از سخت افزار و نرم افزار طراحی شده است. بورد آردوینو می ­تواند ورودی ­های مختلف از قبیل انواع سنسور و پیام ­های صوتی و متنی را دریافت کرده و متناسب با آن خروجی­ های مطلوبی را به منظور کنترل یک موتور، روشن کردن یک LED، انتشار پیام به صورت آنلاین و… تولید نماید.

درایور MD5

درایور MD5 قادر است سرعت یک موتور DC را از طریق دریافت پالس PWM کنترل نماید. رنج ولتاژ کاری درایور از ۵٫۵ تا ۳۶ ولت و قابلیت جریان دهی آن تا ۱۰ آمپر می ­باشد. در شکل زیر نمایی از درایور و شماتیک آن را مشاهده می ­کنید.

md5

شکل۱: درایور موتور MD5

شماتیک مدار کنترلی

برای تولید پالس PWM راه­ حل­ های مختلفی وجود دارد که یکی از آن­ها استفاده از بورد آردوینو می ­باشد. در شکل زیر می ­توانید نحوه اتصال بورد آردوینو به درایور MD5 را مشاهده نمایید.

Ciruit

شکل۲: شماتیک مدار کنترلی

همان طور که در شکل بالا مشاهده می ­کنید درایور MD5 شامل سه قسمت می­ باشد. بخش یک وروردی توان درایور می­ باشد که بایستی به منبع توان جریان مستقیم در رنج ولتاژ ۵٫۵ تا ۳۶ ولت متصل شود. بخش سه خروجی درایور بوده که باید به موتور DC متصل شود. در بخش دو ورودی­ های فعال ساز، کنترلی و تعیین جهت قرار دارند.

مطابق شکل بالا ابتدا بایستی ولتاژ +۵V و GND را از بورد آردوینو به برد بورد منتقل کنیم. سپس پایه +۵V در درایور را به خط ولتاژ مثبت پنج ولت در برد بورد متصل می ­کنیم، با اتصال پایه +۵V درایور به ولتاژ مثبت پنج ولت، درایور فعال خواهد شد. در گام بعد پایه PWM درایور را به پین سه آردوینو و پایه­ های تعیین جهت INB و INA را به ترتیب به پایه­ های ۸ و ۹ آردوینو متصل می ­کنیم.

نوشتن کد آردوینو

در زیر می ­توانید کدهای برنامه را مشاهده کنید.
int motorPin = 3;
int DirPin8  = 8;
int DirPin9  = 9;
void setup()
{
  pinMode(motorPin,OUTPUT);
  pinMode(DirPin8,OUTPUT);
  pinMode(DirPin9,OUTPUT);
  digitalWrite(DirPin8, LOW);
  digitalWrite(DirPin9, LOW);
  Serial.begin(9600);
  while(! Serial);
  Serial.println("Speed 0 to 255");
}
 
void loop()
{
  if(Serial.available())
  {
     int speed = Serial.parseInt();
     if(speed >= 0 && speed<= 127)
     {
        speed = speed*2;
        digitalWrite(DirPin8, LOW);
        digitalWrite(DirPin9, HIGH);
        analogWrite(motorPin,speed);
     }
     else
     {
        speed = (255-speed)*2;
        digitalWrite(DirPin8, HIGH);
        digitalWrite(DirPin9, LOW);
        analogWrite(motorPin,speed);
     }
  }  
}
int motorPin = 3;
int DirPin8  = 8;
int DirPin9  = 9;
void setup()
{
  pinMode(motorPin,OUTPUT);
  pinMode(DirPin8,OUTPUT);
  pinMode(DirPin9,OUTPUT);
  digitalWrite(DirPin8, LOW);
  digitalWrite(DirPin9, LOW);
  Serial.begin(9600);
  while(! Serial);
  Serial.println("Speed 0 to 255");
}

void loop()
{
  if(Serial.available())
  {
     int speed = Serial.parseInt();
     if(speed >= 0 && speed<= 127)
     {
        speed = speed*2;
        digitalWrite(DirPin8, LOW);
        digitalWrite(DirPin9, HIGH);
        analogWrite(motorPin,speed);
     }
     else
     {
        speed = (255-speed)*2;
        digitalWrite(DirPin8, HIGH);
        digitalWrite(DirPin9, LOW);
        analogWrite(motorPin,speed);
     }
 

کد فوق می­ تواند سرعت موتور DC را در دو جهت کنترل کند. بدین منظور بایستی از قمست Tools در نرم افزار آردوینو وارد Serial Monitor شوید، سپس با وارد کردن یک عدد بین ۰ تا ۲۵۵ می تواند سرعت موتور را کنترل کنید بدین صورت که از عدد ۰ تا ۱۲۷ سرعت موتور در جهت مستقیم و از عدد ۱۲۸ تا ۲۵۵ سرعت موتور در جهت برعکس کنترل خواهد شد.  توضیح کد برنامه و نحوه عملکرد آن را می ­توانید در فیلم آموزشی زیر مشاهده کنید.


انجمن پرسش و پاسخ ربات سازان

  • ShahBaz

مینی کامپیوترها،امبدد بردها

ShahBaz | سه شنبه, ۳ اسفند ۱۳۹۵، ۰۸:۴۰ ق.ظ

Here is a list of a few devices that are being used for computer vision use-cases:

1. Nvidia Jetson TX1

Loaded with 64-bit quad-core ARM Cortex-A57 CPU with a 256-core Maxwell GPU, Nvidia Jetson TX1 is one of the most powerful devices in the market for embedded computer vision. What makes it more impressive is that it consumes just 10W of power to deliver 1 Teraflop 16FP performance. At $495, it is slightly pricey, but with Nvidia putting all its force behind it, you have a growing eco-system to make this the right choice for high-end computer vision applications.

2. Nvidia Jetson TK1

Nvidia Jetson TK1 is the predecessor of Jetson TX1 and is available at $192. If you think the pricing is odd, think again. With 192-core Kepler GK20a GPU, it is priced at $1 per CUDA core and it delivers a performance of 300 GigaFlops. Tk1 doesn’t have onboard WiFi or Bluetooth. However, these can be added via USB or the mini-PCIe port.

3. Raspberry Pi 3

Raspberry Pi 3 (RasPi3) has been a significant upgrade on Raspberry Pi 2. With 1.2 GHZ quad-core ARM Cortex A53, new RasPi3 is the go-to device for traditional computer vision on a budget applications (usually using OpenCV). It can output a video at full 1080p. Not only has Google hinted on betting on RaPi3, it has also provided Tensorflow support for it. An active and growing community and recent interest shown by Google makes this a real viable choice for computer vision.

4. Beagleboard: BeagleBone Black

BeagleBone Black is popular for IoT applications. As compared to Raspberry Pi which has a single 26-pin header that can be used as 8 GPIO pins, or as a serial bus, the Beaglebone Black has two 48-socket headers that can be utilized for virtually limitless I/O hardware. It also includes a number of analog I/O pins that allow it to connect to a variety of sensor hardware that can’t be used with an out-of-the-box Raspberry Pi. With double the price and inferior performance, BeagleBone Black isn’t an excellent choice for computer vision as video decoding, 3D rendering, and general GUI performance is much better on Raspberry Pi 3.

5. Orange Pi

Orange Pi has slightly better hardware than Raspberry Pi for the price point. It also has some features missing from Raspberry Pi like SATA, Gigabit Ethernet, IR, and mic. However, the lack of an eco-system and the unavailability of support has kept this otherwise decent piece of hardware away from the computer vision community.

6. ODROID-C2

Sold by Hardkernel, At $39, this is a serious contender against Raspberry Pi. It packs double the ram and much faster processor than RasPi 3. Features like Gigabit Ethernet and 4K video support make it superior to Raspberry Pi 3. Software support and the strength of the community is nowhere close to Raspberry Pi. However, this card boasts of a small but dedicated community and that is always a good sign. Another plus point for ODROID-C2 is its easy availability as opposed to Raspberry Pi.

7. Banana Pi

Banana Pi has the same processing per dollar as that of Raspberry Pi. However, the eco-system around Raspberry Pi doesn’t make it worth trying to do computer vision on Banana Pi.

Note: There are a few more devices like Intel Edison that are more suitable for IoT use cases and hence have been ignored for this post. Arduino board is another device that is extremely popular and a lot of hobbyists and students run some computer vision algorithms on it. However, we believe that Arduino is more suitable for Internet of Things but not computer vision due to its lower technical specifications(specifically very low RAM availability). Also, solutions providers like Movidius have not been included.

Conclusion

All in all, Raspberry Pi 3, Jetson TK1 and Jetson TX1 are clearly ahead of the game today with huge communities and companies behind them. ODROID-C2 is the dark horse that could be a good alternative to Raspberry Pi. Still, the market is quite nascent with too many big companies still working hard to make a dent in this market. Please let us know in comments which device are you using for computer vision.

Subscribe & Download Code

If you liked this article and would like to download code (C++ and Python) and example images used in all posts of this blog, please subscribe to our newsletter. You will also receive a free Computer Vision Resource Guide. In our newsletter, we share OpenCV tutorials and examples written in C++/Python, and Computer Vision and Machine Learning algorithms and news.

Subscribe Now


Asus Tinker Board specs and features – 6 things you need to know about the Raspberry Pi rival

Read more at

Asus Tinker Board Specs and Features: Move over, Raspberry Pi, there’s a new, more powerful single-board computer in town, and it’s built by Asus. Meet the 4K-capable, Kodi-ready Asus Tinker Board.

The Asus Tinkerboard is official, giving Raspberry Pi a brand new rival to butt heads with. But what is the Tinkerboard, and can it really compete? Here’s what you need to know.

Related: Raspberry Pi 3 review

1. Tinker Board is a single-board computer

The Tinker Board is a single-board computer (SBC). That means all of the Tinkerboard’s functions and features are on a single printed-circuit board (PCB), so it’s small, cheap, and easy to build into projects or devices you’re trying to create.

Basically, it’s an ideal solution for hobbyists looking to make something ‘smart’, but who don’t need significant amounts of computing heft.

2. It’s a lot like the Raspberry Pi

And when we say a lot, we mean a lot. The layout of both devices is very similar, and they do basically the same thing too. That’s no surprise, but it’s important to note nonetheless.

For instance, both are powered by a Micro USB port positioned on the bottom of the board. And like the Pi, this sits next to a 3.5mm audio jack and a HDMI port. The top edge, meanwhile, houses a 40-pin GPIO connector; the right side has a Gbit Ethernet connector and four USB 2.0 ports, and the left side has a display input. There’s a camera input too, which sits next to the audio jack.

All in all, it’s a capable and well connected Pi rival.

Related: Raspberry Pi 3 vs Pi 2

image: http://static.trustedreviews.com/94/00003cab8/77b2/asus-tinkerboard-1.jpg

asus tinkerboard

3. Tinker Board’s specs look solid – and it's 4K-ready

It should offer a decent amount of grunt, too. The real heft comes courtesy of a quad-core 1.8GHz ARM Cortex-A17 processor that’s built by Rockchip. It’s not 64-bit (unlike the Raspberry Pi 3), but has a higher clock speed (up from 1.2GHz). The Tinker Board also wins out on RAM, offering 2GB of LPDDR3 dual-channel memory, up from the 1GB of SDRAM (shared with the GPU) that the Raspberry Pi 3 boasts.

There’s also built-in support for 802.11/b/g/n Wi-Fi connections and Bluetooth 4.0, the option to upgrade to an external anetnna, and the Tinker Board has an HDMI 2.0 for 4K support, and a DSI port for HD content.

4. It’s available right now...

The good news is that you can buy it right now. Sort of. Asus is selling the device in the UK, but the only place we’ve been able to find it is at online retailer CPC.

At time of writing, it was sold out, but you can still order it – it just won't ship to you until more units become available, and the site isn't listing an expected delivery date.

5. But it’s more expensive than the Pi

The bad news is that it’s quite a bit more expensive than the Raspberry Pi.

Including tax, the Asus Tinker Board will cost you a heft £55. That’s far higher than the £34 that the rival Raspberry Pi 3 costs. That said the Tinker Board has – on paper – more computing heft than the Pi. So if you’re looking to get a bit more done then perhaps the Tinker Board is the SBC for you.

6. Kodi is a killer feature

Asus' Tinker Board runs the Debian Linux distro, which means it's fully supportive of Kodi, an open-source media player that rivals the likes of Plex and is increasingly popular in mainstream circle.

Combine this with the 4K support and you've got a single-board computer that sounds ideal for powering a DIY home media suite.

Related: Best Raspberry Pi projects

Watch: MWC 2017 – What to expect


Read more at http://www.trustedreviews.com/news/asus-tinkerboard-release-date-price-specs-buy#Oultj4z1e2202DP1.99

Rhomb PCBs, Cores and Modules has been designed for high reliability, know-how and low power consumption, to bring you the best platform for your products. Always with the best materials and state of the art technology available

Rhomb PCBs, Cores and Modules has been designed for high reliability, know-how and low power consumption, to bring you the best platform for your products. Always with the best materials and state of the art technology available.

Rapid leaning and agility as a competitive advantage. Perhaps “rapid learning” and agility is the only true sustainable competitive advantage.

Every module and core are able to connect, interact or exchange resources, through standardized rhomb interface. Feel free to select your device features. Change whatever you want to build you new product, even expands the range of product only changing module. Rhomb offers to your company a modular platform of hardware and firmware for the development and manufacture of devices. The limits are only in your hands. Rhomb is an open source platform, if you need some different module (feature) what we don’t have in rhomb’s family, feel free to design and develop your own module or ask us for our custom designs.

There are no secrets to success. It is the result of preparation, hard work and learning from a failure “colin Powell”. We’re all working together; that’s the secret “Sam Walton” The secret of business is the experience, know-how and to know something that nobody else knows. “Aristotle Onassis” In the business world, everyone is paid in two coins: cash and experience. Taje the experience first; the cash will come later. “Harold s. geneen”

We know how the markets, strategy and organization operate as a system of interdependent structures rather than as a collection of independent elements. For that, rhomb provides your company the tools what you need to.


http://www.udoo.org/udoo-x86/

SUMMARY

UDOO X86 is the New PC: the most powerful x86 maker board ever and an Arduino™ 101-compatible platform, all embedded on the same board.

On UDOO X86 you can run all the software available for the PC world, from gaming to video streaming, from graphical editors to professional development platforms, plus all the software or the Arduino™ 101 world, including all the sketches, libraries and the official Arduino™ 101 IDE.

You won’t ever worry about lack of drivers or stuff like that. This is a true next-generation computer.

It is based on Quad Core 64-bit new-generation x86 processors made by Intel®, designed for the PC domain. Prodigious processors concentrated in 14 nm, with an amount of energy consumption of 5 or 6 Watt.

You can check out our Kickstarter Campaign.

Download the UDOO X86 datasheet here.

Download the UDOO X86 3D Design File.


https://www.toradex.com/products

At Toradex, your product vision becomes an affordable and immediate reality!

Using a Computer on Module (CoM) or Customized Single Board Computers (SBC) offers flexibility to system developers to focus on their application development by using an off-the-shelf product which has generic hardware and comes with production-ready software to kick start the development of a variety application. This approach greatly reduces the time-to-market and your development cost.

  • ShahBaz

library arduino in linux ubuntu

ShahBaz | چهارشنبه, ۷ مهر ۱۳۹۵، ۰۹:۱۰ ب.ظ

ADD library in linux

/home/elinux/Arduino/libraries


error upload program:

avrdude: ser_open(): can't open device "/dev/ttyACM0": Permission denied
Problem uploading to board. 

answer:

If you want the app to always run as root

1) Pin the application to the launcher as normal.

2) Locate the applications .desktop file which will be in either:

  • /usr/share/applications/APPNAME.desktop
  • ~/.local/share/applications/APPNAME.desktop
  • or somewhere else, use locate .desktop|grep APPAME

3) Open with gedit:

gksudo gedit /usr/share/applications/APPNAME.desktop

4) Then change the line

Exec=APP_COMMAND

to

Exec=gksudo -k -u root APP_COMMAND

5) Save

This command will also keep your environment which is very usefull if you need to connect to others servers and use your private key.

To add a quicklist option to 'Run as root'

Follow steps 1, 2 and 3 above

If the launcher currently doesn't have any other quicklist options, just append this to the end of the document

X-Ayatana-Desktop-Shortcuts=Runroot

[Runroot Shortcut Group]
Name=Run as root
Exec=gksudo -k -u root APP_COMMAND
TargetEnvironment=Unity

AND

[Desktop Entry]
Type=Application
Name=Arduino IDE
GenericName=Arduino IDE
Comment=Open-source electronics prototyping platform
Exec=gksudo -k -u root /media/ProgLinux/arduino64linux/arduino-1.6.9/arduino
Icon=arduino-arduinoide
Terminal=false
Categories=Development;IDE;Electronics;
MimeType=text/x-arduino
Keywords=embedded electronics;electronics;avr;microcontroller;
StartupWMClass=processing-app-Base


  • ShahBaz

آموزش جامع کار با lcd کاراکتری در ARDUINO

ShahBaz | جمعه, ۱۹ شهریور ۱۳۹۵، ۰۸:۳۱ ب.ظ

به نام خدا

http://dmf313.ir/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%ac%d8%a7%d9%85%d8%b9-%da%a9%d8%a7%d8%b1-%d8%a8%d8%a7-lcd-%da%a9%d8%a7%d8%b1%d8%a7%da%a9%d8%aa%d8%b1%db%8c-%d8%af%d8%b1-arduino/

آموزش جامع کار با lcd کاراکتری در ARDUINO : سلام خدمت شما دوستان گل ، تو این مطلب از آموزش آردوینو  میخوام نحوه راه اندازی lcd کاراکتری با آردوینو(آردینو) یه سری توضیحات بدم ، که من از سایت ARDUINO یادش گرفتم و دارم اینجا براتون آموزش میدم و چند تا پروژه آردوینو براتون میزارم(پروژه که نمیشه اسمش رو گزاشت ولی…بگذریم)

آموزش جامع کار با lcd کاراکتری در ARDUINO

کتابخانه lcd کاراکتری برای ARDUINO

این کتاب خونه ۲۰ تا تابع داره که در زیر میبینید ، و در زیر اینا توضیحشون میدم laugh

lcd.LiquidCrystal
lcd.begin
lcd.clear
lcd.home
lcd.setCursor
lcd.write
lcd.print
lcd.cursor
lcd.noCursor
lcd.blink

lcd.noBlink
lcd.display
lcd.noDisplay
lcd.scrollDisplayLeft
lcd.scrollDisplayRight
lcd.autoscroll
lcd.noAutoscroll
lcd.leftToRight
lcd.rightToLeft
lcd.createChar

 

LiquidCrystal Library

در اینجا میخوام تک تک توابع رو براتون بگم…

 

lcd.LiquidCrystal

lcd.LiquidCrystal : این تابع کارش تعیین اتصالات هستش ، یعنی این که هر کدوم از پایه های lcd کاراکتری ما به کدوم یک از پایه های برد آردوینو مون وصل هستش.

همچنین میتونیم توسط این تابع میتونیم تعیین کنیم که lcd رو تو مد ۴ بیتی راه اندازی کنیم یا ۸ بیتی.

 

سوال : داستان ۴ و ۸ بیتی چیه؟

جواب :  lcd کاراکتری رو اگه دیده باشین حدود ۱۶ تا پایه داره که از این ۱۶ تا ۸ تاشون پایه دیتا هستن ، به نام D0 تا D7 که اگه از D4 تا D7 (که میشه ۴ تا پایه) استفاده کنی میگن LCD رو تو مد ۴ بیتی راه اندازی کردی و اگه از هر ۸ تا پایه (D0 تا D7) استفاده کنیم میگن که LCD رو تو مد ۸ بیتی راه اندازی کردی

و با توجه به این که تو مد ۸ بیتی نسبت به مد ۴ بیتی به ۴ تا پایه بیشتر نیاز دارم تا به LCD اطلاعات رو بدیم لذا تو تمون پروژه ها LCD رو تو مد ۴ بیتی راه اندازی میکنن تا پایه کمتری از برد آردوینو مون مصرف بشه. lcd کاراکتری با ARDUINO

 

میگفتم ، این تابع lcd.LiquidCrystal رو میشه به ۴ حالت نوشت ، که در زیر میبینید۲ تای اول برا مد ۴ بیتی و ۲ تای آخر برا مد ۸ بیتی هستش.

به جای d0 , d1 , d2 , d3 , d4 , d5 , d6 ,d7 , enable , rw , rs باید عدد پایه مورد نظر از برد آردوینو رو قرار بدید ، مثلا به جای rs بنویسید ۵ که یعنی پایه شماره ۵ برد آردوینو باید به پایه rs نمایشگر مون (همون lcd منظورمه blum ) وصل بشه…. ok???

 

سوال : مثلا تو مد ۴ بیتی فرق مورد اول با دومی چیه؟؟؟
جواب : اگه توجه کنید مورد اول گزینه rw رو نداره ، یعنی ما باید پایه rw نمایشگر مون رو مستقیما به gnd وصل کنیم و دیگه نیازی نیست به یکی از پایه های برد آردوینو مون وصل کنیم و یه پایه رو اشتغال کنیم الکی (البته تو اکثر پروژه ها باس به زمین وصل بشه چون این پایه برا تعیین مد خوندن اطلاعات از نمایشگر یا نوشتن اطلاعات هستش که اگه به gnd وصل بشه یعنی lcd تو مد نوشتن هستش و ما میتونیم توش اطلاعاتمون رو بنویسیم و نمایش بدیم ، زیاد با مد خوندن اطلاعات کاری نداریم ما ، به همین خاطره که اگه مستقیم این پایه رو به gnd وصل کنیم بهتره و دیگه ۱ پایه از بردمون الکی اشغال نمیشه)

ولی اگه از حالت دومی(کد های بالا رو میگم) بخوایم استفاده کنیم باید پایه rw رو هم به آردوینو وصل کنیم و نمیتونیم دیگه به gnd وصلش کنیم.

که این داستان برا مد ۸ بیتی هم به همین منوال هستش.

نتیجه : بهتره که همیشه از راه اندازی lcd به صورت ۴ بیتی استفاده کنیم و از اون تابعی استفاده کنیم که گزینه rw رو نداره ، یعنی همیشه از کد زیر استفاده کنیم.

 

lcd.begin

lcd.begin : این تابع برا راه اندازی lcd مون هستش ، به وسیله این تابع اندازه lcd مون رو به آردوینو میگیم ، اینم بگم که این کتاب خونه میشه تمام lcd هایی که درایورشون(اون هسته مرکزی crazy رو میگم) hitachi HD44780 هستش رو راه اندازی کرد. و lcd هایی که درایورشون hitachi HD44780 هستش ماشاالله یکی دو تا نیستن که ، اندازه این lcd ها با هم فرق داره ، حالا ما هر کدوم رو که بخوایم راه اندازی کنیم اندازش رو مثل تابع زیر مینویسیم و تعیین میکنیم.

۱۶ یعنی تعداد ستون نمایشگر و ۲ یعنی تعداد سطر های نمایشگرمون.

اینم از این ، بریم سراغ تابع بعدی ، خدا رحم کنه ، هنوز ۱۸ تای دیگه مونده… bomb

 

lcd.clear

lcd.clear : این تابع برا پاک کردن نمایش گر هستش ، هر چی توی نمایشگر باشه پاک میشه و مکان نما به ۰،۰ میره(سطر ۰ و ستون ۰)

و به صورت زیر استفاده میشه(به صورت زیر باس بنویسیش rtfm )

 

lcd.home

lcd.home : بردن مکان نما به خانه crazy  >>> منظور از خانه همون سطر ۰ و ستون ۰ هستش ، وقتی lcd رو هم ریست میکنی مکان نما میرو خونه و هم وقتی که lcd رو به مبنع تغزیه وصل میکنی.

توجه : میشه گفت این تابع همون کار تابع زیر رو انجام میده(این تابع رو در زیر توضیح دادم که چیهblum)

 

lcd.setCursor

lcd.setCursor : این تابع کارش تعیین موقعیت نمایش گر برا نمایش اطلاعات هستش که به صورت زیر هستش ؛ که X ستون مورد نظر و Y هم سطر مورد نظر ما هستش ، وقتی بخوایم متنمون رو در یه جای خاص از LCD نشون بدیم از این تابع استفاد میکنیم.

مثلا وقتی یه متنی بخوایم به وسیله تابع lcd.print (در ادامه توضیحش میدم) تو LCD نمایش بدیم اگه قبلش از lcd.setCursor استفاده کرده باشیم و مثلا مختصات ۷,۰ (ستون ۷ و سطر ۰ ) رو داده باشیم ، متنمون از این مختصات شروع میکنه به نمایش داده شدن.

 

lcd.write

lcd.write : این تابع برا نمایش یه تک کاراکتر به کار میره (تک کاراکتر یعنی ۱ حرف ، مثلا  A یا c یا $ یا !   که هر کدوم از اینا یه دونه کاراکتر هستن)

مثلا برا نمایش کاراکتر A تابع رو به صورت زیر مینویسیم :

 

lcd.print

lcd.print : نمایش یه رشته ، مثلا برا نمایش DMF313.IR تو LCD از این تابع به صورت زیر استفاده میکنیم

 

lcd.cursor و lcd.noCursor

lcd.cursor  و  lcd.noCursor : تابع lcd.cursor برا فعال کردن مکان نما هستش(وقتی از این تابع استفاده کنید مکانی که منتظر دریافت اطلاعات هستش و اگه اطلاعاتی به LCD داده بشه در اون مکان نمایش داده میشه توسط یه خط تیره تو LCD مشخص میشه برامون) و lcd.noCursor هم برا غیر فعال کردن این ویژگی(نماش مکان نما) هستش.

مثال برای این دو تابع

 

lcd.blink و lcd.noBlink

lcd.blink  و  lcd.noBlink : این دو تا تابع هم مثل دو تا تابع بالایی هستن با این تفاوت که تابع بالایی مکان نما رو با یه خط تیره نشون میداد و این توابع با یه مستطل که هی چشمک میزنده نمایش میده.

مثال برای این دو تابع

 

lcd.display و lcd.noDisplay

lcd.display  و  lcd.noDisplay : این دو تا تابع هم برا روشن و خاموش شدن نمایش اطلاعات روی LCD به کار میره.

مثلا در صورت استفاده از تابع lcd.display اطلاعات روی نمایشگر پنهان میشوند(پاک نمیشوند و از بین نمیروند.) برخلاف تابع lcd.clear که میزد هر چی تو LCD بود رو پاک میکرد ، این تابع lcd.display فقط اطلاعات رو غیب میکنه(انگار که هیچی تو LCD نیست) فقط همین و توسط تابع lcd.noDisplay دوباره میتونیم اطلاعات رو نمایش بدیم.

مثال برای این دو تابع

 

lcd.scrollDisplayLeft و lcd.scrollDisplayRight

lcd.scrollDisplayRight : هر بار که این تابع اجرا بشه کل اطلاعات روی نمایشگر یه واحد به سمت راست شیفت داده میشن(یعنی ۱ واحد میرن سمت راست crazy ).

lcd.scrollDisplayLeft : هر بار که این تابع اجرا بشه کل اطلاعات روی نمایشگر یه واحد به سمت چپ شیفت داده میشن.

مثال برای این دو تابع

 

lcd.leftToRight و lcd.rightToLeft

lcd.leftToRight : چپ به راست کردن نوشتن متن ها

lcd.rightToLeft : راست به چپ کردن نوشتن متن ها

توجه : تو حالت عادی متن ها توی lcd به همین طریق نوشته میشوند یعتی عنگام نمایش متن روی نمایشگر از سمت چپ به سمت راست حرکت میکنیم یعنی از ستون ۰ میریم به سمت ستون آخر یعنی ستون ۱۵ ولی تو تابع lcd.rightToLeft از سمت راست میریم به سمت چپ یعنی از آخرین خونه به سمت خونه ۰ حرکت مینیم و اگه مثلا متنی بخوایم بنویسیم از ستون ۱۵ شروع به نمایش دادن میشه به سمت ستون ۰ نمایشگرمون

 

lcd.autoscroll و lcd.noAutoscroll

lcd.autoscroll و lcd.noAutoscroll : این دو تابع هم برا حرکت(و عدم حرکت) خود کار متن هستش که تقریبا مثل ۲ تابع lcd.scrollDisplayLeft
lcd.scrollDisplayRight هستش.

وقتی از تابع lcd.autoscroll استفاده کنیم (و بازم وقتی تابع lcd.leftToRight فعال باشه که تو حالت عادی فعال هستش مگه این که تغیرش بدین) تو این حالت اگه بخواین یه متنی نشون بدیدن در یه مکان خاص…از اون مکان خاص شروع به حرکت میکنه و به سمت چپ میره( و وقتی تابع lcd.rightToLeft فعال باشه متن به سمت راست میره) >>> برا این گزینه به پروژه ای که در ته مطلب گزاشتم حتما توجه کنید….اون قسمت از پروژه که از این ۲ تا تابع استفاده کردم رو منظورمه smile

 

 

lcd.createChar

تو lcd های کاراکتری میشه ۸ تا کاراکتری جدید تعریف کرد ، که روال کار این طوریه که یه آرایه تعریف میکنیم که شامل اطلاعات کاراکترمون هستش(کاراکترمون رو یه ماتریس ۵*۸ در نظر بگیرید که ۵ تا ستون و ۸ تا سطر داره حالا باید تو این آرایه مون ۸ تا مقدار بهش بدیم…..اون خونه هایی از این ماتریس که قراره روشن بشه رو ۱ فرض میکنیم و بقیه رو صفر اون وقت میایم و آرایمون رو ایجاد میکنیم)

سوال : آرایه رو چطور مقدار دهی کردی؟؟؟

جواب : ابتدا نرم افزار زیر رو دانلود کنید و سپس کاراکترتون رو طراحی کنید (در قسمت آبی رنگ) سپس روی دکمه ی “دریافت کد” کلیک کنید و کد هایی رو که بهتون میده رو تو پروژه استفاده کنید(فقط اون عدد های داخل پرانتز رو کپی کنید.)

ساخت کاراکتر در lcd

دانلود نرم افزار تولید کد برای ایجاد کاراکتر جدید در lcd

 

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

مثلا اگه در جایی از پروژه از کد زیر استفاده کنیم کاراکتر تعریف شده توسط ما در نمایشگر به نمایش در میاد.

که اون عدد صفر شماره کاراکتر تعریف شده توسط ما هستش.(۸ تا کاراکتر میتونیم تعریف کنیم که مقادیر ۰ تا ۷ رو بهشون باید اختصاص بدیم)

 

توجه : تو پروتئوس مثل این که خونه های lcd اندازشون ۵*۷ هستش ولی تو عمل که من تست کردم نمایشگرم اندازش ۵*۸ بود.(عگس زیر رو ببینید)

LiquidCrystal Library

مثال برای این تابع

 

 

پروژه آردوینو

پروژه های سایت Arduino.cc

LiquidCrystal Library

  • Hello World: Displays “hello world!” and the seconds since reset.
  • Blink: Control of the block-style cursor.
  • Cursor: Control of the underscore-style cursor.
  • Display: Quickly blank the display without losing what’s on it.
  • TextDirection: Control which way text flows from the cursor.
  • Scroll: Scroll text left and right.
  • Serial input: Accepts serial input, displays it.
  • SetCursor: Set the cursor position.
  • Autoscroll: Shift text right and left.

 

یه پروژه که توش از تمام توابع LCD استفاده کردم

به نظرم بهتره حداقل یه بار کد های پروژه رو در عمل یا در پروتئوس عملکردشون رو بیبنید تا با توابع بهتر آشنا بشید….پروژه رو از ته همین قسمت میتونید دانلود کنید.

شماتیک پروژه

پروژه lcd با Arduino

 

کد های پروژه

 

دانلود پروژه این قسمت

 

اینم یه عکس از مدار که در عمل بستم

پروژه آردوینو

 

فیلم پروژه

فیلمش چیز خاصی نداره ، اگه پروژه رو تو پروتئوس اجرا کنید همون چیزی رو میبینید که تو فیلم هست….گزاشتم که گزاشته باشم rofl

 

 

 

قابل توجه بعضیا : برادران copy_paste لطفا اگه مطلب رو کپی میکنن منبعش رو هم بگن ، جان داداش نه باعث کسر شان میشه و نه کسی بابت این کارت بهت چیزی جایزه میده (دیدم که بعضا ها مطالبم رو کپی میکنن که دارم این حرف رو میزنم)

قابل توجا اونایی که وقت ندارن : دادا نظر ندی یه وقت ، میگن گناه داره ، اونم از نوع کبیره ، از ما گفتن بود. dash

سوالات : دوستان حتما سوالاشون رو بپرسن ، ما هم حتما در حد توانمون سعی میکنیم جواب بدیم.

توجه : انشاالله اگه عمری باشه در آینده پروژه هایی با LCD با aRDUINO براتون میزارم….

فعلا یا علی


دیگر اموزش ها

http://dmf313.ir/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%ac%d8%a7%d9%85%d8%b9-%da%a9%d8%a7%d8%b1-%d8%a8%d8%a7-lcd-%da%a9%d8%a7%d8%b1%d8%a7%da%a9%d8%aa%d8%b1%db%8c/

http://dmf313.ir/%d9%86%d9%85%d8%a7%db%8c%d8%b4-%d9%85%d8%aa%d9%86-%d9%85%d8%aa%d8%ad%d8%b1%da%a9-%d8%b1%d9%88%db%8c-lcd/

http://dmf313.ir/%d9%86%d9%88%d8%b4%d8%aa%d9%86-%d9%85%d8%aa%d9%86-%d9%81%d8%a7%d8%b1%d8%b3%db%8c-%d8%af%d8%b1-lcd-%d9%87%d8%a7%db%8c-%da%a9%d8%a7%d8%b1%d8%a7%da%a9%d8%aa%d8%b1%db%8c/

http://dmf313.ir/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b3%d8%a7%d8%ae%d8%aa-%d8%b4%d9%85%d8%a7%d8%b1%d9%86%d8%af%d9%87-%d8%b9%d8%af%d8%af-%d8%af%d8%b1-lcd/

http://dmf313.ir/%d9%86%d9%85%d8%a7%db%8c%d8%b4-%d8%b9%d8%af%d8%af-%d8%af%d8%b1-lcd-%d8%a8%d8%a7-%d8%b5%d9%81%d8%ad%d9%87-%da%a9%d9%84%db%8c%d8%af/

http://dmf313.ir/%d9%86%d9%85%d8%a7%db%8c%d8%b4-%d9%85%d8%aa%d9%86-%d8%af%d8%b1-lcd/

  • ShahBaz

راه اندازی سنسور القایی با اردوینو

ShahBaz | شنبه, ۳۰ مرداد ۱۳۹۵، ۱۰:۲۴ ب.ظ

جلسه سیزدهم : استفاده از کتابخانه Bounce2

سلام

اگه یادتون باشه توی آموزش جلسه 11 استفاده از پین دیجیتال آردوینو به عنوان ورودی و تو جلسه 12 نحوه اضافه کردن کتابخونه به محیط آردوینو رو یاد گرفتیم.
این جلسه تلفیقی از 2 جلسه قبله. یعنی قراره داده یه سوئیچ رو بخونیم ولی نه با یه digitarRead معمولی بلکه با استفاده از کتابخونه Bounce2.
مهم ترین سوالی که برتون پیش میاد اینه که خب مگه digitalRead معمولی چشه که بخوایم بریم کتابخونه اضافه کنیم و از لحاظ نرم افزاری کارمون رو یه کم مشکل تر کنیم.

برای این که دلیل این کار رو بدونید ترجیح میدم انجامش بدید تا خودتون بفهمید.
برای این کار اول سخت افزارمون رو می بندیم یه آردوینو می خوایم (هر مدلی دارید فرقی نمی کنه ) و یه سوئیچ و یه برد بورد کوچیک .

خب وقتی سوئیچ رو نگاه کنید می بینید 4 تا پایه داره! داستان چیه؟ داستان اینه که این پایه ها مطابق عکس زیر 2 تا 2 تا به هم وصلن:
BUTT-4_3-500x500

حالا مطابق عکس زیر مدار رو ببندید:
button

یعنی یه پایه رو به 5 ولت و یه پایه رو به پین دیجیتال شماره 2 وصل کنید. دقت کنید که پایه های متصل به هم به صورت عکس زیرهستن و سوئیچ باید درست توی مدار قرار بگیره:
button می دونید که هیچ اصراری به پین شماره 2 نداریم هر پین دیجیتال دلخواهی میشه. دقت کنید بین پایه شماره 2 آردوینو (که به سوئیچ هم وصله )و زمین یه مقاومت قرار داده شده. این مقاومت برای این گذاشته شده که زمانی که کلید فشار داده نشده روی پین شماره 2 دقیقا ولتاژ 0 ولت بیفته و زمانی که کلید فشار داده میشه دقیقا ولتاژ 5 ولت و منطق باینری HIGH بیفته.
یه کم دقیق تر حرف بزنیم:
زمانی که کلید رو فشار ندادیم بین دو قسمت مشخص شده سوئیچ در شکل اول هیچ ارتباطی وجود نداره. یه طرف که  مستقیم به 5 ولت وصله خب تکلیفش معلومه. ولی اون طرف سوئیچ که به پین دیجیتال آردوینو وصله داستان داره. اگه مقاومت نزاریم یعنی پین آردوینو رو مستقیم  به اون سر سوئیچ وصل کنیم پین وضعیت آزاد داره یعنی مختاره روش منطق باینری 0 یا 1 بیفته چون هیچ کس نیست بهش فرمانی دستوری چیزی بده. اونم مختاره هر چی خواست باشه که اصلا پدیده خوشایندی نیست و اگه مدار رو همینطوری ببندید بینهایت پر خطا خواهد بود. بنابراین یه مقاومت بر می داریم و اون پین رو به واسطه این مقاومت زمین می کنیم. با این کار یه مسیر بین این پین و زمین برقرار میشه . این مسیر طبق قوانین مداری باعث میشه روی پین دیجیتال شماره 2 آردوینوهم ولتاژ 0 ولت معادل منطق باینری LOW بیفته و هر چی که خواست نباشه. به این مقاومت ، مقاومت Pull-down گفته میشه . برای دریافت توضیحات بیشتر این لینک رو بخونید.
اما زمانی که کلید رو وصل می کنیم بین دو قسمت نشون داده سوئیچ تو شکل اول یه ارتباط به وجود میاد و دو تا قسمت به هم وصل می شن. بنابراین اون قسمتی که به پین شماره 2 وصل بود الان به خاطر این اتصال ولتاژی معادل 5 ولت و منطق باینری HIGH خواهد داشت.

خب حالا این کد رو آپلود کنید:
2016-01-16_11-53-44

روال این کد به این صورته که به محض فشار داده شدن کلید در کنسول سریال پیغام Pressed نمایش داده میشه. دقت کنید شرط if رو چجوری نوشتم. نوشتم اگه داده پین دیجیتال HIGH بود (که معادل فشار داده شدنه کلیده ) برو رو کنسول سریال چاپ کن.
خب کد رو آپلود کنید و کنسول سریال رو باز کنید و یک بار کلید رو فشار بدید . با این نتیجه دلخراش در کنسول مواجه خواهید شد:
2016-01-16_12-10-01
می بینید شما یک بار کلید رو فشار دادید ولی این طفلک بیشتر از 10 بار اینو چاپ کرده چرا؟
علتش اینه که فرض کنید مدت زمانی که شما کلید رو فشار می دید مثلا 10 میلی ثانیه باشه ( این عددها همش مثاله و دقیق نیست ) . آردوینو هر 1 میلی ثانیه یک بار میاد این پین شماره 2 رو سرکشی می کنه که مقدارش چقدره ( به خاطر دستور digitalRead که خودمون نوشتیم ) . بنابراین اون 10 میلی ثانیه ای که دست شما روی کلیده آردوینو 10 بار اون پین رو خونده و هر 10 بار هم منطق باینری اون رو HIGH دیده ( چون دست روی کلید بوده و طبق مدار ما در زمان اتصال کلید 5 ولت معادل منطق باینری HIGH روی پین افتاده ) . بنابراین طبق دستوری که ما نوشتیم عین 10 بار پیام Pressed نمایش داده میشه. خب این اصلا خوب نیست. ما به نظر خودمون یه بار کلید رو فشار دادیم ولی 10 بار پیام چاپ شده.

حالا باید دنبال راه حل بگردیم تا این مشکل رو حل کنه:
یکی از راه حل ها استفاده از دستور delay هست به صورت زیر:
2016-01-18_11-18-30
این ساده ترین راه حل هست که الان اگر کد رو آپلود کنیم با هر بار فشار دادن کلید فقط 1 بار پیام Pressed چاپ می شه. با دستکاری مقدار آرگومان تابع delay می تونید دقت های متفاوتی رو به دست بیارید .

راه حل دوم استفاده از خطوط کدنویسی پیچیده تر با استفاده از دستور millis و غیره هست که خب چون ما اول کاریم سراغ این مورد نمیریم.

راه حل سوم استفاده از کتابخونه Bounce2 هست.
این کتابخونه رو با یکی از روش های جلسه قبل به نرم افزار آردوینو اضافه کنید.
لینک فایل زیپ هم اینجاست در صورتی که احتیاج داشتید.

خب حالا مطابق تصویر زیر به مثال bounce برید:
2016-01-18_11-25-35

خب مثال رو که باز کنید با قسمت های زیر مواجه میشید. قبلش من یه آلارم بدم بهتون . معمولا کتابخونه های آردوینو رو با کلاس می نویسن. برای این که با نوشتن کد با کلاس آشنا بشید می تونید از این آموزش استفاده کنید. اگه حوصله یاد گرفتن و این داستانا رو هم ندارید صرفا جاهایی که میگم رو می تونید دقت کنید ولی به نطر من حتما بخونیدش تا در آینده به مشکل برخورد نکنید.
2016-01-18_11-28-03
این قسمت بخش هدر برنامه هست که معرفی کتابخونه ، پینها و آبجکت درون اون قرار داده شده.
2016-01-18_11-46-21

قسمت اول پین متصل به سوئیچ به عنوان ورودی پول آپ تعریف شده است. یعنی چی؟ اگه یادتون باشه تو قسمت سخت افزاری این پروژه ما اومدیم اون پایه ای که به پین دیجیتال آردوینو وصل بود رو با یه مقاومت به زمین وصل کردیم (Pull-down کردیم ). حالا اگه لینک آموزش رو خونده باشید در مقابل Pull-down یه Pull-Up داریم. یعنی به جای این که اون سر مقاومت رو زمین کنیم به 5 ولت وصل کنیم .
511568b6ce395f1b40000000
حالا یه نکته جالب وقتی Pull-down کردیم خودمون رفتیم یه مقاومت برداشتیم و به صورت خارجی تو مدار قرار دادیم. شاید این تصور به وجود بیاد که پول آپ هم همینه دیگه یعنی یه مقاومت بر میداریم منتها به جای این که زمین کنیم 5 ولت می کنیم. اما یه اتفاق خوب این وسط وجود داره .وقتی با آردوینو کار می کنیم دیگه نیازی نیست مقاومت پول آپ رو به صورت خارجی بزاریم بلکه تو خود سخت افزار آردوینو یه فکرایی کردن که سر راه پایه های دیجیتال مقاومت داخلی گذاشتن. فقط باید از آردوینو بخوای این مقاومت داخلی رو بیاره تو مدار که با فرمت INPUT_PULLUP موقع کانفیگ پین دیجیتال بهش میگیم این کار رو بکنه. همونطور که می بینید این اسم دو قسمته: اول INPUT که بهش میگیم این پایه دیجیتال ورودیه و بخش دوم PULLUP هست که بهش میگیم سر راه این پایه دیجیتال یه مقاومت بزار. بنابراین در مقوله Pull-Up ( نه Pull-down ) نیازی به مقاومت خارجی نداریم فقط خود کلید رو میزاریم تو مدار و یکی از پایه هاش رو به پین دیجیتال مورد نظرمون وصل می کنیم.
اما اگه از Pull-Up استفاده کردیم باید به یه نکته حواسمون رو جمع کنیم. وقتی پول آپ می کنیم داریم ولتاژ اون پایه ای از سوئیچ رو که به آردوینو وصله (در حالتی که کلید فشار داده نشده ) رو 5 ولت نگه می داریم (یا همون منطق HIGH ) . بنابراین اون یکی سر سوئیچ رو باید گراند کنیم . منطقیه دیگه مگه نه ! اگه قرار بود اون یکی سر سوئیچ هم مثل مدار اول 5 ولت باشه وقتی سوئیچ رو فشار بدیم به خاطر اتصال دو پایه سوئیچ ، 5 ولت رو به پین دیجیتال وصل می کنه. خب با پول آپ کردن که خودش 5 ولت شده بود .بنابراین برای این که با فشار داده شدن کلید اختلاف سطح منطقی روی پین دیجیتال به وجود بیاد باید اون سر سوئیچ رو به زمین وصل کنیم مطابق عکس زیر:
Button_bb

و اما دستور debouncer.attach:
این دستور یه آرگومان داره که از شما شماره پینی که سوئیچ رو بهش وصل کردید می خواد . تو کد ما در قسمت هدر این پین BUTTON_PIN معرفی شده بنابراین آرگومان ورودی این دستور رو هم BUTTON_PIN قرار دادیم.

دستور debouncer.interval :
این دستور هم یه آرگومان میگیره که زمان اینتروال هست . واحد این آرگومان میلی ثانیه است و مثلا وقتی نوشته 5 یعنی 5 میلی ثانیه زمان نویز نوگیری در نظر گرفته بشه. خب به نظر من که کمه می تونید تا حدود 50 (در اکثر کدها روی 50 تنظیم میشه) افزایشش بدید.

تابع setup هم تموم شد و اما میریم سر وقت تابع loop :
2016-01-19_11-21-33

خب اول دستور debouncer.update :
با این کار وضعیت پین دیبانس که در حال نمونه برداریه به روز می شه بعد از اون با دستور debouncer.read این مقدار خونده میشه. اگه این داده ای که خونده سطح منطقی LOW باشه LED شماره 13 آردوینو رو که همون LED داخلی آردوینو هست روشن میکنه. دقت کنید چون مدارمون رو عوض کردیم وقتی کلید وصل بشه پایه دیجیتال شماره 2 آردوینو به زمین متصل میشه و سطح منطقیش برابر LOW میشه (به همین دلیل این مدلی کد نویسی شده).

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

*************************

کتابخونه دیبانس 2 تا دستور دیگه داره fell و rise که اگه کسی خواست بدونه اینا چیکار می کنن می تونه تو انجمن سوالش رو مطرح کنه.

  • ShahBaz