طریقه اتصال SD Card به آردوینو از مواردیست که در این قسمت با آن آشنا می شوید. همچنین یاد خواهیم گرفت که چگونه اطلاعات را در SD Card با پسوند های TXT و CSV ذخیره کرده. و از آنها در Excel استفاده کنیم. با نوشتن پروژه ای استفاده از داده های آردوینو را در اکسل یاد خواهیم گرفت.
SD Card کارت ها حافظه هایی قابل حمل می باشند که بیشتر در دوربین ها و وسایل قابل حمل استفاده می شوند. پروتکل ارتباطی SD Card ها از نوع SPI می باشد. پایه های 11 ,12 ,13 در اغلب بردهای آردوینو و 50, 51, 52 در بردهای آردوینو مگا برای ارتباط SPI می باشند. یک پین هم برای انتخاب کردن SD Card استفاده می شود که پین SS بر روی برد های آردوینو می باشد. یا می توان از پین دیگری استفاده کرد که آن را در()SD.begin مشخص می کنیم.
برای اسفاده از SD Card در اردوینو باید آن را حتما به صورت FAT فرمت کنیم. بهتر است که اگه امکانش بود FAT16 فرمت شود.
فایل های FAT محدودیتی در نام گذاری دارند. شما باید از فرمت 8.3 برای نام گذاری فایلها استفاده کنید. مثلا نام فایل را PROJECT1.TXT بگذارید. یعنی 8 کارکتر برای نام و 3 کارکتر برای نوع فایل. نام می تواند از 8 کارکتر کمتر باشد ولی نباید بیشتر باشد.
شما وقتی از دستور()file.write استفاده می کنید چیزی بر روی SD Card ذخیره نمی شود تا از دستور()flush یا ()close استفاده کنیم. وقتی فایلی را باز می کنید مطمئن شوید که آن را می بندید تا ذخیره شود.
برای اتصال SD Card باید از شیلد های مخصوص این کار استفاده کنیم. شیلد های بسیاری برای این کار ساخته شده است و در دسترس می باشد.
کتابخانه ی SD Card (SD.h)
برای استفاده از SD Card باید کتابخانه آن را فرا خوانی کنیم. این کتابخانه به شما اجازه می دهد تا بر روی SD Card نوشته و یا فایلی را از روی آن بخوانید. اگر بخواهیم فایلی را در مسیری خاصی در SD Card ذخیره کنیم می توان آن مسیر را با اسلش نشان داد(root/name.txt).
()SD.begin
برای آغاز به کار کتابخانه ی SD از این دستور استفاده می کنیم. این دستور پروتکل SPI را هم فعال می کند. پین های 11،12،13 در بیشتر بردهای آردوینو و 50،51،52 هم در برد آردوینو مگا و پین انتخاب تراشه (Chip select)، پین 10 در بیشتر برد ها و 53 در اردوینو مگا. دقت داشته باشید که اگر از پین دیگری بجای SS استفاده می کنید این پین باید به صورتی خروجی تعریف شده باشد. حتی اگر استفاده هم نکنیم ازش. وگرنه کتابخانه به درستی کار نخواهد کرد. اگر از پین دیگری استفاده می کنیم باید آن پین را داخل پرانتز ()SD.begin بنویسیم. ولی اگر از پین SS روی خود برد استفاده می کنیم لازم نیست داخل پرانتز چیزی نوشته شود.
این دستور در صورتی که SD Card درست کار کند، TRUE را بر می گرداند و در صورت بر قرار نشدن ارتباط FALSE را بر می گرداند.
برای شروع کار یک متغیر از نوع فایل مشخص می کنیم. فایل یک کلاس است در این کتابخانه.
()SD.Open
با این دستور یک فایل را در SD Card می توانیم باز کنیم. اگر فایلی به آن نام وجود نداشته باشد آن را ایجاد می کند.
SD.open(filepath, mode)
پارامتر ها:
Filepath: نام فایل و یا نام فایل همراه با مسیر آن که با اسلش جدا شده است.
Mode: در این قسمت دو مد را می توانیم تعیین کنیم که به صورت پیش فرض FILE_READ می باشد.
FILE_READ: فایل را برای خواندن باز می کند و از اول فایل شروع می کند.
FILE_WRITE: فایل را برای خواندن و نوشتن باز می کند و از آخر فایل شروع می کند.
این دستور اگر نتواند فایل را باز کند FALSE را به صورت Boolean بر می گرداند.
()file.Println
این دستور داده را پرینت می کند و به خط پایین می رود. به جای file می توانیم از نام متغیری که از نوع file تعریف کرده ایم استفاده کنیم. در ضمن این دستور تعداد کارکتر هایی که پرینت می کند را بر می گرداند. که از نوع byte می باشد.
()file.close
این دستور فایل مورد نظر را می بندد و اطلاعاتی که نوشته ایم به صورت فیزیکی در SD Card ذخیره می شود. به جای file می توان از متغیری که از نوع file تعریف کرده ایم استفاده کنیم.
()file.available
چک می کنه اگه بایتی برای خواندن باشه. به جای file میشه نام متغیری که از جنس file تعریف کردیم را بنویسیم. تعداد بایت هایی که وجود دارد را بر می گرداند. هر بایتی که توسط read خوانده شود از تعداد بایت کم می شود.
Pow(num1, num2)
این تابع عدد اول را به توان عدد دوم می رساند.
()File.read
فایل مورد نظر را می خواند. اگه چیزی در فایل نباشد 1- را بر می گرداند. توجه داشته باشید که کد اسکی کارکتر را برمی گرداند.
برای این از پسوند csv استفاده می کنیم چون در این فرمت از فایل، کاما (،) به عنوان خط در Excel در نظر گرفته می شود.
تصویر مدار
خواندن داده های آردوینو در Excel
در ادامه می توانید نمنونه کد را که برای نوشتن اطلاعات روی SD Card است را مشاهده کنید. این اطلاعات با پسوند CSV ذخیره می شوند تا در Excel استفاده شوند.
//www.eleknow.com //program by sobhan movassagh #include <Wire.h> #include <SD.h> //SPI SD Card Pins //MOSI = Pin 11 //MISO = Pin 12 //SCLK = Pin 13 int CS_pin = 10; int pow_pin = 8; //I2C Temperature Pins //SDA = Analog Pin 4 //SCL = Analog Pin 5 //IR Distance Sensor Pins int IR1_pin = 2; int IR2_pin = 3; //Light Sensor Pins int light_pin = 1; int temp_address = 72; //address of the I2C Temp sensor long id=1; //Use this to store the id # of our reading void setup() { Wire.begin(); Serial.begin(9600); Serial.println("Intializing Card"); //CS Pin in an Output pinMode(CS_pin, OUTPUT); //SD Card will Draw Power from Pin 8, so set it high pinMode(pow_pin, OUTPUT); digitalWrite(pow_pin, HIGH); //intialize Card if (!SD.begin(CS_pin)) { Serial.println("Card Failure"); return; //End program } Serial.println("Card Ready"); //Write Log File Header File logFile = SD.open("LOG.csv", FILE_WRITE); if (logFile) { logFile.println(", , , , "); //Just a leading blank line, incase there was rpevious data String header = ("ID, Light, Temp, IR1, IR2"); logFile.println(header); logFile.close(); Serial.println(header); } else { Serial.println("Couldn't open log file"); } } void lopp() { //Check Light Level int light_level = analogRead(light_pin); //Read Temperture Wire.beginTransmission(temp_address); //Start talking Wire.write(0); //ask for register zero Wire.endTransmission(); //Complate Transmission Wire.requestFrom(temp_address, 1); //Request 1 Byte while(Wire.available() == 0); //wait for respons int temp_c = Wire.read(); //Get the temp int temp_f = round(temp_c*9.0/5.0 + 32.0); //convert to stupid American units //Read Dictances int IR1_val = analogRead(IR1_pin); int IR2_val = analogRead(IR2_pin); //Create Data string for storing to SD card //We will use CSV format String dataString = String(id) + "," + String(light_level) + "," + String(temp_f) + "," + String(IR1_val) + "," + String(IR2_val); //open a file to write File logFile = SD.open("LOG.csv", FILE_WRITE); if (logFile) { logFile.println(dataString); logFile.close(); Serial.println(dataString); } else { Serial.println("Couldn't open log file"); } //Increment ID number id++; delay(1000); }
در ادامه می توانید فیلم آموزشی را مشاهده کنید:
با سلام و خیلی ممنون از مطلب مفیدتون.
یک سوال و اون ایکه آیا sd متصل به آردوینو فقط فایل تکست میخونه؟ یعنی jpg یا pdf یا mp3 نمیخونه ؟ فقط میخواد اسم فایل ها و فرمتشونو برام نمایش بده
سلام بله فایل دیگه هم می خونه
سلام خیلی ممنون از مطالبی مفیدتون می خواستم ببینم آیا می تونیم فایل متنی را از micro sd بخونیم؟ با چه دستوری تشکر