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

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

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

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

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

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

۲۰۲ مطلب با موضوع «برق الکترونیک رباتیک» ثبت شده است

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

پول آپ (Pull-up) و پول دان(Pull-down) چیست؟

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

پول آپ (Pull-up) و پول دان(Pull-down) چیست؟

توسط sinaset » پنج شنبه 23 مهر 1394 09:43

بنام خدا
باسلام

پول آپ (Pull-up) و پول دان(Pull-down) چیست؟

حتما تا بحال این اصطلاح را مکرر شنیده اید! "یک مقاومت پول اپ براش بزارید.!" و بدرستی عملکرد ان را متوجه نشده اید.

اما پول آپ و پول دان به زبان ساده.

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

برای همین ما معمولا یک مقاومت بین 4.7 تا 10 کیلو اهم را از ولتاژ مخالف عملکرد پایه میکرو،بر روی ان میگذاریم ! شاید توضیحات کمی گیج کننده بیاید. مبحث رو بیشتر باز می کنیم.

چرا مقاومت 4.7 تا 10 کیلو اهم ؟!

چون اولا کمتر از 4.7 کیلو اهم ،ممکن است باعث اتصال کوتاه شود! و اگر هم بیشتر از 10 کیلو اهم باشد،ممکن است دیگر نویز ها را از بین نبرد!(یا تاثیرش کم باشد)

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

*بیشتر مواقع مقاومت 10 کیلو اهم روی پایه ها گذاشته میشود

ولتاژ مخالف عملکرد پایه میکروکنترولر،دقیقا چیست؟!

به عنوان مثال تصویر زیر رو در نظر بگیرید.
در مدار بالا،وقتی که یک ولتاژ منفی(در تصویر GND) به کمک (BUTTON) برای میکروکنترولر فرستاده میشود، یک عملکرد خاص اتفاق می افتد!
*یعنی در میکروکنترولر اینطور تعریف شده که وقتی پایه ( به عنوان مثال پایه 20) وضعیتش 0 شد. LED را روشن کن .
حالا ما میایم، این سمت کلید (سمتی که پایه خروجی کلید به پایه 20 میکرو وصله) یک جریان مثبت! (یعنی وضعیت 1 ) را به مقاومت پول آپ وصل می کنیم. اکنون این جریان پول آپ (که یک ولتاژ ضعیف است) روی پایه 20 میکروکنترولر افتاده و از گرفتن نویز بر روی آن پایه جلوگیری می کند.ضمن اینکه وضعیت پایه را 1 نگه داشته(دقیقا عکس دستور که در خط بالا* اشاره کردیم ).
و در زمانی که ما کلید را بفشاریم.جریان زیادی منفی وارد شده از آن ولتاژ مثبت ضعیف شده پول آپ ، نیز به راحتی میگذرد و هیچ گونه اتصالی کوتاهی اتفاق نمی افتد(اتصال کوتاه بصورت خیلی خیلی ریز اتفاق می افتد، که البته تاثیری ندارد،بطوری که می توان از ان صرف نظر کرد)
وقتی که ما ولتاژ مثبت روی پایه مد نظرمان قرار دهیم،اصطلاحا می گوییم پول آپ Pull-Up انجام داده ایم
----
وقتی که ما ولتاژ منفی روی پایه مد نظرمان قرار دهیم،اصطلاحا می گوییم پول دان Pull-down انجام داده ایم.
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

4 کاربر از این پست سپاسگزاری کرده اند

  • ShahBaz

arduino arm 32 bit -Genuino ZERO

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

Overview
Genuino Zero sets a new standard in processing power for Genuino boards, with a 32-bit ARM processor running at three times the speed of the Uno. The Genuino Zero offers everything you need to release your creative potential: advanced audio and analog processing capabilities, low power consumption, and a real-time clock, all at a convenient price. Internet of Things, robotics applications, art installations, and other sophisticated projects will also benefit from the Zero's capabilities.

Technology
The Genuino Zero is powered by Atmel’s SAMD21 MCU, which features a 32-bit ARM Cortex® M0+ core, clocked at 48MHz. This board has six analog inputs that can be configured for 10 or 12 bit sampling and also offers a Digital to Analog Converter (DAC) with 10 bit resolution for true analog signal output. Using Genuino Zero with Atmel Studio, you can use Atmel’s Embedded Debugger (EDBG), which provides a full debug interface without the need for additional hardware, making it significantly easier to debug software. EDBG also supports a virtual COM port that can be used for device and bootloader programming. To compare this board to the current, past or outdated boards see the Comparison Page.

  • ShahBaz

تابلو روان تبلیغاتی

ShahBaz | يكشنبه, ۳۰ خرداد ۱۳۹۵، ۱۰:۵۷ ب.ظ
  • ShahBaz

اینرنت اشیا

ShahBaz | پنجشنبه, ۲۷ خرداد ۱۳۹۵، ۰۲:۱۷ ب.ظ

✔️Contiki (The Operating System for Internet of Things)

📌آیا هرگز درباره سیستم عامل Contiki شنیده اید!؟

سیستم عامل Contiki هم مانند لینوکس و ویندوز است، با این تفاوت که این سیستم عامل با اهداف خیلی خاص و با تمرکز بر Internet of Things-IOT طراحی شده است.
عملکرد این سیستم عامل شامل مدیریت برنامه ها و فرآیندها، مدیریت منابع، مدیریت حافظه و ارتباطات دستگاه ها است. Contiki یک پروژه نرم افزاری متن باز است. آنچه که Contiki را از سایر سیستم عامل های مشابه مانند TinyOS متمایز می سازد قدرت انعطاف پذیری است که در اختیار برنامه نویسان قرار می دهد.

♦️در آینده نزدیک دنیای فناوری از این سیستم عامل بیشتر خواهید شنید.

لازم به ذکر است، Internet of Things - IOT سیستمی از دستگاه های محاسباتی، ماشین های دیجیتالی و مکانیکی، اشیا، حیوانات و انسانها است که به هر کدام یک شناسه منحصر بفرد اختصاص می یابد. در این سیستم ، انتقال داده از طریق شبکه و بدون تعامل انسان با انسان و یا انسان با کامپیوتر صورت می گیرد.

  • ShahBaz

نکات برق کشی

ShahBaz | جمعه, ۷ خرداد ۱۳۹۵، ۰۵:۲۰ ب.ظ

1-تهیه نقشه

2-مشخص کردن شماره و تعداد پیچ های رولپلاک و خود رولپلاک

2.1-واشر میخواد یا نه؟ برای زدن سینی کابل واشر میخواد

2.2-برای پیچ کردن تابلو به دیوار واشر میخواد

2.3-برای کار گذاشتن ریل داخل تابلو نیاز به پرچ هست ک باید دستگاه پرچ زن هم نیاز هست.

3-بست کمربندی

4-بست لوله پی وی سی برای برق کشی روکار

5-چسب برق

6-سر مته نمره4- 5 -6-7-8 برای سنگ و فلز

7-کابلشو و پرس کابل

8-

  • ShahBaz