L03 Arduino
L03 Arduino
Arduino
محمد انصاری
داناترین مردم کسی است که دانش دیگران را به دانش خود بیفزاید:پیامبر اکرم صلی اهلل علیه و آله
دما Analog
اینترنت
USART
گاز ؟
SPI
نور
I2C
شتاب
موقعیت
نیرو
© MOHAMMAD ANSARI – UNIVERSITY OF SHAHID BEHESHTI EMBEDDED SYSTEM DESIGN 4
مقدمه
محرک ها/خروجی ها محرک ها ) :(Actuatorsایجاد تغییر در محیط فیزیکی
PWM
موتور DC
پمپ
Analog
بلندگو
Digital
اینترنت
سروو موتور
USART ؟
رله
SPI
استپر موتور
LED
نمایشگر I2C
شیر سلونوئیدی
© MOHAMMAD ANSARI – UNIVERSITY OF SHAHID BEHESHTI EMBEDDED SYSTEM DESIGN 5
مقدمه
در سیستم های نهفته یا اینترنت اشیاء ،برای جمع آوری اطالعات از محیط و یا ایجاد تغییرات در محیط ،به چیزی نیاز داریم
که بتواند:
داده های آنالوگ را دریافت کند ()ADC ◦
با پروتکل های رایج در حسگر ها ارتباط برقرار کند (مانند I2C, SPI, USARIو غیره) ◦
داده ها را به صورت دیجیتال پردازش کند ◦
داده ها را به شبکه ارسال کند (با پروتکل TCP/IPروی WiFiیا اترنت ،یا با Bluetoothیا پروتکل های مرسوم ارتباط رادیویی) ◦
در شبکه قابل شناسایی باشد ◦
دستورها و داده ها را از شبکه دریافت کند ◦
سیگنالهای خروجی دیجیتال یا آنالوگ تولید کند (مثالً روشن و خاموش کردن رله یا کنترل موتور DCبا )PWM ◦
حتی االمکان کوچک باشد ◦
مصرف توان کمی داشته باشد ◦
هزینه معقولی داشته باشد ◦
© MOHAMMAD ANSARI – UNIVERSITY OF SHAHID BEHESHTI EMBEDDED SYSTEM DESIGN 6
پلتفرم های پردازش
قیمت اندازه برد مصرف توان خروجی قدرت شبکه I2C/SPI/USA خروجی ورودی پلتفرم
آنالوگ پردازش RT PWM آنالوگ
/PWM
گران بزرگ زیاد × خوب WiFi+Eth M × × PC
متوسط کوچک-متوسط متوسط × متوسط WiFi+Bl M × × Mobile
گران متوسط کم -متوسط - زیاد Eth × FPGA
متوسط متوسط متوسط متوسط WiFi+Eth M Raspberry Pi
ارزان کوچک خیلی کم کم Arduino
ارزان کوچک خیلی کم کم WiFi )ESP (Arduino
© MOHAMMAD ANSARI – UNIVERSITY OF SHAHID BEHESHTI EMBEDDED SYSTEM DESIGN 8
Arduino UNO:مثال
یک برد قابل برنامه ریزی
ATmega328 میکروکنترلر
16MHz
USB
SPI
I2C
USART
ADC
PWM
© MOHAMMAD ANSARI – UNIVERSITY OF SHAHID BEHESHTI EMBEDDED SYSTEM DESIGN 12
دکمه های کاربردی
Arduino IDE
Arduino Integrated Design نرم افزار آردوینو یا
Environment
Serial Monitor
ویرایشگر متن
کنسول
سرعت ارتباط
سریال
© MOHAMMAD ANSARI – UNIVERSITY OF SHAHID BEHESHTI EMBEDDED SYSTEM DESIGN 14
ساختار برنامه در آردوینو
دستور زبان C
Sketch
دو تابع اصلی:
◦ )( : setupهنگام روشن شدن/ریست شدن پردازنده
و فقط یک بار اجرا میشود .معموالً مقداردهی های
اولیه متغیرها و تنظیمات اولیه ماژول ها در این تابع
قرار داده می شود.
◦ )( :loopکار اصلی پردازنده که مدام تکرار می شود.
این تابع پس از هر بار اتمام دوباره اجرا میشود (یک
حلقه بینهایت است)
© MOHAMMAD ANSARI – UNIVERSITY OF SHAHID BEHESHTI EMBEDDED SYSTEM DESIGN 15
Datatypes - انواع داده
© MOHAMMAD ANSARI – UNIVERSITY OF SHAHID BEHESHTI EMBEDDED SYSTEM DESIGN 17
زمان و تأخیر
© MOHAMMAD ANSARI – UNIVERSITY OF SHAHID BEHESHTI EMBEDDED SYSTEM DESIGN 18
نام آرایه تعداد درایه ها
آرایه ها
نوع داده آرایه
© MOHAMMAD ANSARI – UNIVERSITY OF SHAHID BEHESHTI EMBEDDED SYSTEM DESIGN 22
13 پایه شماره
GND
LED روشن کردن
© MOHAMMAD ANSARI – UNIVERSITY OF SHAHID BEHESHTI EMBEDDED SYSTEM DESIGN 24
:مثال
و دستورPWM با استفاده ازLED کم و زیاد کردن نور
analogWrite
چک کردن اینکه آیا داده جدیدی به صورت سریال دریافت شده؟
© MOHAMMAD ANSARI – UNIVERSITY OF SHAHID BEHESHTI EMBEDDED SYSTEM DESIGN 27
(Serial Peripheral Interface) SPI ارتباط
SCLK: Serial Clock (output from master)
MOSI: Master Out Slave In (data output from master)
MISO: Master In Slave Out (data output from slave)
SS: Slave Select (often active low, output from master)
© MOHAMMAD ANSARI – UNIVERSITY OF SHAHID BEHESHTI EMBEDDED SYSTEM DESIGN 29
ارتباط کارت حافظه با آردوینو:SPI مثال
Initializes the SD library and card. Enter the pin connected to the SS pin as a function’s argument. SD.begin(#sspin)
Close the file and ensure that any data written to it is physically saved to the SD card. file.close()*
بستن فایل
© MOHAMMAD ANSARI – UNIVERSITY OF SHAHID BEHESHTI EMBEDDED SYSTEM DESIGN 33
تعریف فایل
خواندن از فایل
بستن فایل
© MOHAMMAD ANSARI – UNIVERSITY OF SHAHID BEHESHTI EMBEDDED SYSTEM DESIGN 34
ارتباط )I2C (Inter Integrated Circuit
ارتباط دوسیمه (Two Wire Interface) TWIیا
I2Cاین امکان را فراهم میکند تا تنها با استفاده از
دو سیم ،بتوان بین چندین آی سی ارتباط برقرار
کرد.
© MOHAMMAD ANSARI – UNIVERSITY OF SHAHID BEHESHTI EMBEDDED SYSTEM DESIGN 35
– I2Cنحوه ارتباط
:Startارباب ( ،)Masterابتدا SDAو سپس SCLرا صفر میکند. .1
ارباب ،شروع به ایجاد کالک روی SCLمی کند و در هر لبه کالک ،یکی از بیت های آدرس برده ای که می .2
خواهد با آن ارتباط برقرار کند را روی SDAقرار می دهد.
در بیت هشتم ،ارباب تعیین میکند که می خواهد بنویسد یا بخواند. .3
© MOHAMMAD ANSARI – UNIVERSITY OF SHAHID BEHESHTI EMBEDDED SYSTEM DESIGN 36
– I2Cنحوه ارتباط
در کالک نهم ،برده ای که آدرسش توسط ارباب روی باس قرار داده شده بود ،کنترل SDAرا در اختیار می .4
گیرد و با صفر کردن یا نکردن خط ،SDAبه درخواست ارباب پاسخ می دهد.
ارباب ،داده ای را که درخواست کرده بود می خواند یا می نویسد. .5
بعد از انتقال هر بایت دیتا ،دستگاهی که آن را دریافت کرده است ،یک سیگنال ACKروی SDAمی گذارد (با .6
صفر کردن آن)
برای اتمام عملیات انتقال ،ارباب شرایط توقف را اعمال می کند ( SDAرا بعد از اینکه SCLیک شد ،یک میکند) .7
خروجی این تابع تنها زمانی صفر می شود که ارسال داده به
دستگاه به آدرس مورد نظر بدون خطا انجام شده باشد
© MOHAMMAD ANSARI – UNIVERSITY OF SHAHID BEHESHTI EMBEDDED SYSTEM DESIGN 43
مثال های کاربردی
© MOHAMMAD ANSARI – UNIVERSITY OF SHAHID BEHESHTI EMBEDDED SYSTEM DESIGN 45
TMP36 اندازه گیری دما با سنسور-1
//TMP36 Pin Variables
int sensorPin = 0;
void setup(){
Serial.begin(9600);
}
void loop()
{
int reading = analogRead(sensorPin);
float voltage = reading * 5.0;
voltage /= 1024.0;
Serial.print(voltage); Vanalog(mv)= (reading from ADC) * (5000/1024)
Serial.println(" volts");
float temperatureC = (voltage - 0.5) * 100 ;
Serial.print(temperatureC); T(°C)= [(Vanalog(mv)) - 500] / 10
Serial.println(" degrees C");
}
نصب کتابخانه-3
void loop() {
digitalWrite(relayPin, HIGH);
delay(1000);
digitalWrite(relayPin, LOW);
delay(1000);
}
speedness = 128
speedness = 192
speedness = 255
𝑙𝑜𝑟𝑡𝑛𝑜𝑐𝑉 𝑛𝑜𝑖𝑡𝑎𝑡𝑜𝑅
• =
𝑑𝑑𝑉 180
© MOHAMMAD ANSARI – UNIVERSITY OF SHAHID BEHESHTI EMBEDDED SYSTEM DESIGN 55
استفاده از کتابخانه
Servo Servo Motor کنترل موقعیت:6 مثال
ایجاد یک شیء از نوع
#include <Servo.h>
0 برنامه ای که موقعیت سروو موتور را از:مثال
Servo
15 (هر. درجه و برعکس تغییر می دهد180 تا
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
) یک درجه،میلی ثانیه
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
تنظیم موقعیت سروو
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}