اطلاعیه

Collapse
No announcement yet.

من یک تازه کار با برد آردوینو UNO هستم !!

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #16
    پاسخ : من یک تازه کار با برد آردوینو UNO هستم !!

    راه اندازی ماژول مسافت سنج SR04
    سلام خدمت دوستان عزیز
    در ادامه کار با آردوینومون میخوایم تقریبا یه متر دیجیتال رو راه اندازی کنیم
    جهت این کار ماژول های مختلفی وجود داره که ما چون تازه کار هستیم میخوایم از ساده ترین و ارزان ترین ماژول فاصله سنج با عنوان ماژول آلتراسونیک سنجش مسافت sr04 استفاده کنیم:
    لینک زیر از صفحات انجمنمون هست که راجب این ماژول بحث شده دیدنش خالی از لطف نیست:


    ویژگی های ماژول:
    ولتاژ کاری ۵ ولت
    فرکانس ۴۰Hz
    زاویه قابل اندازه گیری ۱۵ درجه
    سیگنال تریگر ورودی ۱۰ میکرو ثانیه است.
    سیگنال Echo سیگنال خروجی TTL PWL

    طول پالس دریافتی بین ۱۰۰ میکروثانیه و ۱۸ میلی ثانیه می باشد.اگر پالس دریافتی در محدوده ی ۳۶ میلی ثانیه و یا بیشتر باشد بدین معنی است که در مقابل ماژول مانعی وجود ندارد.
    ابتدا باید یک پالس با طول حداقل ۱۰ میکرو ثانیه به پایه TRIG اعمال شود. ماژول به صورت اتوماتیک ۸ عدد پالس با فرکانس ۴۰ کیلو هرتز ارسال میکند. وقتی که پالس ها ارسال شد پایه ECHO یک میشه و تا زمانی که برگشت پالس ها از جسم را دریافت نکند این پایه یک باقی میماند. پس با اندازه گیری مدت زمانی که این پایه در سطح منطقی ۱ بوده است میتوان زمان رفت و برگشت صوت را بدست آورد. برای اندازه گیری پالس روی پایه ECHO باید از تایمر استفاده کرد. بعد از اطلاع از زمان رفت و برگشت سیگنال اولتراسونیک با استفاده از رابطه زیر فاصله سنسور تا مانع به راحتی محاسبه می شود.

    راه اندازی ماژول با پایه ی مشترک برای Trigger و Echo

    در این حالت از یک پایه برای تریگر و اکو استفاده می شود این حالت برای صرفه جویی در پایه های I/O ی میکروکنترلر یا هر سیستم دیگری طراحی شده است. برای استفاده از این باید پایه ی OUT به زمین وصل شود. و از پایه ی Echo برای تریگر و گرفتن پالس اکو استفاده می شود.
    مدار رو طبق عکس زیر میبندیم:



    برنامه راه اندازی:
    [LEFT]
    #define trigPin 13
    #define echoPin 12
    #define led 11
    #define led2 10

    void setup() {
    Serial.begin (9600);
    pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);
    pinMode(led, OUTPUT);
    pinMode(led2, OUTPUT);
    }

    void loop() {
    long duration, distance;
    digitalWrite(trigPin, LOW); // Added this line
    delayMicroseconds(2); // Added this line
    digitalWrite(trigPin, HIGH);
    // delayMicroseconds(1000); - Removed this line
    delayMicroseconds(10); // Added this line
    digitalWrite(trigPin, LOW);
    duration = pulseIn(echoPin, HIGH);
    distance = (duration/2) / 29.1;
    if (distance < 7) { // This is where the LED On/Off happens
    digitalWrite(led,HIGH); // When the Red condition is met, the Green LED should turn off
    digitalWrite(led2,LOW);
    }
    else {
    digitalWrite(led,LOW);
    digitalWrite(led2,HIGH);
    }
    if (distance >= 200 || distance <= 0){
    Serial.println("Out of range");
    }
    else {
    Serial.print(distance);
    Serial.println(" cm");
    }
    delay(500);
    }
    [/LEFT]

    تو این برنامه از کنسول خود آردوینو به عنوان نمایشگر استفاده میکنیم نمایشگر برا چی؟
    برای نشون دادن فاصله مون از ماژول ...
    تابع pulsein

    pulseIn(pin, value);
    pulseIn(pin, value, timeout)
    ;

    این تابع زمان پالسی که به ورودی پین تعیین شده داده میشه رو برمیگردونه.(برحسب میکروثانیه)
    pin
    این پارامتر پایه مورد نظری که قراره پالس ورودی به اون اندازه گیری بشهرو مشخص میکنه
    value
    ممکنه بخوایم زمان یک شدن یک پایه هارو اندازه بگیریم و یا میزان صفر شدن اون پایه رو نیاز داشته باشیم بدونیم. با مقدار دهی HIGH و LOW برای آردوینو مشخص میکنیم که کدوم حالت رو اندازه گیری بکنه.
    timeout
    این پارامتر مقدار زمان شروع شدن پالس رو معین میکنیم؛
    در حالت عادی این مقدار 1 ثانیه خواهد بود .
    برناممون دارای شرط (if) هستش
    بدین صورت تعریف کردیم که وقتی فاصله جسممون کمتر از 7 سانتی متر شد led قرمز روشن شه و وقتی از 7 سانتی متر بیشتر شد led سبز
    در صورتی که جسم از فاصله 200 سانتی متر بیشتر رفت جمله out of range در کنسول به نمایش درمیاد

    فیلمی از نتیجه کار:

    دیدگاه


      #17
      پاسخ : من یک تازه کار با برد آردوینو UNO هستم !!

      در ادامه پروژه های آردوینو :
      سنسور رطوبت و دما DHT11 (http://eshop.eca.ir/%D8%B3%D9%86%D8%B3%D9%88%D8%B1-%D8%AF%D9%85%D8%A7-%D8%B1%D8%B7%D9%88%D8%A8%D8%AA/2282-%D8%B3%D9%86%D8%B3%D9%88%D8%B1-%D8%B1%D8%B7%D9%88%D8%A8%D8%AA-%D9%88-%D8%AF%D9%85%D8%A7%DB%8C-dht11.html) یک سنسور ارزان قیمت جهت سنجش دما و رطوبت هواست. اندازه کوچک این سنسور، مصرف کم انرژی و

      سون سگمنت (Seven Segment Display ) یا همان SSD ها یکی از ارزان ترین ، پر کاربردترین و راحت ترین قطعات الکترونیکی هستند که به عنوان قطعات نمایشگرها مورد استفاده قرار می گیرند. علت اصلی نام گذاری این محصول این است که این قطعه از 7 قسمت تشکیل شده است . این قطعات همان ال ای دی ها هستند که به صورت منظمی در کنار هم قرار کرفته اند.

      دیدگاه


        #18
        پاسخ : من یک تازه کار با برد آردوینو UNO هستم !!

        راه اندازی سنسور دمای دیجیتال 18B20 با اردوینو
        سلام خدمت دوستان عزیز
        بعد از مدتی وقفه میخوام این تاپیک رو ادامه بدم ....میخوام یکم روی سنسور های دما تمرکز کنم و راه اندازی رو انجام بدم !!
        سنسوری که برا راه اندازی انتخاب شده سنسور 18B20 هستش که دارای خروجی دیجیتال هست و رنج دمایی -55 تا +124 رو ساپورت میکنه...

        برای کسب اطلاعات بیشتر در مورد این سنسور یک سری به تاپیک زیر(البت سنسور دمای 18B20) بزنید:
        نگاهی جامع به سنسورهای دما و رطوبت

        خوب این سنسور دارای یک مدل سیمدار و ضد اب هم هست که نحوره راه اندازی دقسقا مثل همین مدل پلاستیکیه و فرقی نداره !!
        پروتکل ارتباطی 18B20 یک سیمه یا ۱-Wire است که به ما کمک میکنه که بتوانیم این سنسور رو تنها با یک مقاومت ۴٫۷ کیلو اهم و ۳ سیم شامل VCC – زمین و دیتا به میکرو وصل کنید.

        خوب طبق عکس زیر که با نرم افزار شبیه ساز FRITZING کشیده شده مدارمون رو میبندیم :

        کد برنامه :
        #include <LiquidCrystal.h>

        #include <OneWire.h>

        #include <DallasTemperature.h>
        #define DS18B20 8
        LiquidCrystal lcd (2,3,4,5,6,7);
        OneWire oneWire(DS18B20);
        DallasTemperature sensors(&oneWire);

        void setup() {
        // put your setup code here, to run once:
        sensors.begin();
        lcd.begin(16,2);
        lcd.setCursor(0,0);
        lcd.print("Temperature =");
        }

        void loop() {
        // put your main code here, to run repeatedly:
        sensors.requestTemperatures();
        lcd.setCursor(0,1);
        lcd.print(sensors.getTempCByIndex(0));
        lcd.setCursor(6,1);
        lcd.print("centigrade");
        }


        کتابخانه مورد استفاده در این برنامه OneWire وDallasTemperature میباشد.

        جهت اضافه کردن کتابخانه در آردوینو از آموزش زیر استفاده کنید :





        دیدگاه


          #19
          پاسخ : من یک تازه کار با برد آردوینو UNO هستم !!

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

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



          دو نوع بازر وجود دارد :

          • بازر اکتیو
          • بازر پسیو


          بازر اکتیو که در زندگی روزمره هم بیشتر شاهد استفاده از آن هستیم یک المان دو پایه هست که با اعمال ولتاژ توانایی ایجاد یک تن صدا دارد و به تجهیزات جانبی خاصی جهت استفاده نیاز ندارد. و در انواع زنگ اخبارها یا علایم هشداری آن را میبینیم.
          بازر پسیو دارای همان شکل و مشخصات می باشد با این تفاوت که با اتصال مستقیم تغذیه نمیتوان انتظار پخش صدایی از آن داشت و نیازمند مدار راه اندازی است تا در یک محدوده فرکانسی با PWM مجموعه ای از تن های صدا را کنترل کنیم.
          مدار راه اندازی که وظیفه تولید موج PWM دارد و امروز با نحوه ساخت آن آشنا می شوید به وسیله Arduino طراحی شده است. ابتدا یک مدار واسط برای ایجاد یک پین سیگنال طراحی میکنیم. این مدار ساده متشکل از یک ترانزیستور PNP و تعدادی مقاومت و نشانگر LED هست که شماتیک مدار آن در شکل زیر آمده است:



          خروجی این مدار که SIG نام دارد را به یک پین آردوینو (با توجه به کد ما پین 11) وصل میکنیم.


          نحوه اتصال به آردوینو

          کد برنامه :

          int buzzer = 11;

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

          void loop() {
          for (int i = 0; i < 80; i++) {
          digitalWrite(buzzer, HIGH);
          delay(1);
          digitalWrite(buzzer, LOW);
          delay(1);
          }
          delay(50);
          for (int j = 0; j < 100; j++) {
          digitalWrite(buzzer, HIGH);
          delay(2);
          digitalWrite(buzzer, LOW);
          delay(2);
          }
          delay(100);
          }


          دیدگاه


            #20
            پاسخ : من یک تازه کار با برد آردوینو UNO هستم !!

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

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

            #include <LiquidCrystal.h> 
            LiquidCrystal lcd(12,11,5,4,3,2);

            void setup()
            {
            lcd.begin(16,2);
            lcd.clear();
            lcd.setCursor(0,0);
            lcd.print("Iam beginner in");
            lcd.setCursor(5,1);
            lcd.print("Arduino");
            }
            void loop()
            {


            }

            خب اینو کپی کردی سخت که نبود
            حالا بریم سراغ سیم کشی
            دو تا سیم بر میداری میزنی به بالا پایی برد برد
            اول بریم سراغ تغذیه ی ال سی دی : روی ال سی دی نوشته vss این پایه رو مستقیم بزن به زمین (GND) روی ماژول آردینو بعد نوشته VSS ک اونم باید بزنی به مثبت 5 ولت ک اونم روی ماژول هس
            میمونه پایه ی VE که اونو میتونی مستقیم به زمین بزنی ولی شاید کیفیت متن روی کالاکتر بد بود برای همین من از یه مقاومت 220 اهم استفاده کردم و اونو مستقیم به زمین نزدم
            خب تغذیه تموم شد بریم سراغ پایه های بعدی


            * RS pin to digital pin 12
            * Enable pin to digital pin 11
            * D4 pin to digital pin 5
            * D5 pin to digital pin 4
            * D6 pin to digital pin 3
            * D7 pin to digital pin 2
            * R/W pin to ground

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


            خب امیدوارم خوب بوده باشه و استفاده ی لازم رو کرده باشید.
            جدیدترین ویرایش توسط tohid amini; ۱۲:۲۸ ۱۳۹۶/۰۷/۲۵.

            دیدگاه


              #21
              پاسخ : من یک تازه کار با برد آردوینو UNO هستم !!

              حالا بریم سراغ یه آموزش کامل تر با کاربرد زیاد تر از آموززش قبلی
              برای این که این آموزش رو بتونید درک کنید باید آموزش های قبلی من و دوستان در این تاپیک رو بخونید
              این آموزش اصلا سخت نیس و شما با دیدن سورس این آموزش اصلا نترسید چون واقعا راحته
              ما تو آموزش قبلی دیدیم که متن های ال سی دی ثابت بودن حتی چشمک نمیزدن
              اینجا ما اومدیم یه تکونی به متنامون بدیم و یکم خوشگل تر باشه
              اول بریم سراغ سیم کشی یا کد برنامه
              میریم سراغ کد
              این کد خیلی کد روتینی هس و شما لازم نیس تغیرش بدید و تنها با عوض کردن اسم من که تو سورس هم معلومه میتونید اسم خودتونو بنویسید و تو پرژه هاتون استفاده کنید
              مثلا من خودم تو ربات مسیر یابم اینو گذاشتم و اسممو زدم روش
              حالا بریم سراغ کد
              [FONT=Yekan]#include <LiquidCrystal.h>[/FONT] 
              LiquidCrystal lcd(12,11,5,4,3,2);

              void setup()
              {
              lcd.begin(16,2);

              }
              void loop()
              {
              lcd.setCursor(0,0);
              lcd.print("Iam beginner in");
              lcd.setCursor(5,1);
              lcd.print("Arduino");
              lcd.noDisplay();
              delay(3000);
              lcd.display();
              delay(3000);
              lcd.noDisplay();
              delay(3000);
              lcd.display();
              delay(3000);

              for (int positionCounter = 0; positionCounter < 13; positionCounter++) {
              lcd.scrollDisplayLeft();
              delay(300);
              }

              for (int positionCounter = 0; positionCounter < 29; positionCounter++) {
              lcd.scrollDisplayRight();
              delay(300);
              }

              for (int positionCounter = 0; positionCounter < 16; positionCounter++) {

              lcd.scrollDisplayLeft();
              delay(300);
              }
              delay(1000);
              lcd.clear();
              lcd.setCursor(2,0);
              lcd.print("TOHID AMINI");
              lcd.noDisplay();
              delay(2000);
              lcd.display();
              delay(2000);
              lcd.noDisplay();
              delay(2000);
              lcd.display();
              delay(2000);

              lcd.clear();
              }

              حالا شاید بعد دیدن سورس یکم شوکه بشید اما نگران نباشید هیچی نداره حتی سیم کشیشم مث قبله فقط با یکم تغیر ک الان میگم بهتون
              آموزش قبلی گفتم که برای پایه ی VE روی ال سی دی از یه مقاومت 220 استفاده کردم و اونو به زمین اتصال کردم
              ولی این بار چون متن حرکت میکنه شما نیاز به یه تنظیم کننده صفحه نمایش دارید
              این بار از یه پتانسیومتر 10K استفاده کردم
              یه پایشو به VCC و یه پایشو به GND و پایه ی وسطی رو به VE دادم.
              خیلی راحت
              تو عکس ببینید/

              سیم کشی سادمنونم تموم شد
              میبینید آردیونو جقد راحته
              خیلی سریع میتونید به اون چیزی که میخاید برسید
              حالا یه عکسم از پروژم میزارم که ببینید

              امیدوارم لذت و استفاده ی کافی رو برده باشید


              فیلم کوتاه از پروژه
              جدیدترین ویرایش توسط tohid amini; ۱۰:۵۶ ۱۳۹۶/۰۷/۲۶.

              دیدگاه


                #22
                پاسخ : من یک تازه کار با برد آردوینو UNO هستم !!

                راه اندازی ماژول فاصله سنج آلتراسونیک(HC-SR04) توسط آردوینو

                این ماژول کابرد های زیادی دارد از این ماژول می توان جهت تعین دقیق فاصله ی یک شی و یا حتی برای فهمیدن حرکت اجسام استفاده کرد
                این ماژول دقت اندازه گیری 1 تا 400 سانتی متر را دارد ولی در تست هایی که ما انجام دادیم هیچ وقت و در هیچ شرایطی به این نتیجه دس نیافتیم
                مقدار موثر این ماژول در یک اتاق معمولی 150 سانتی متر بود ک تا حدودی برای ما قبول بود
                دقت اندازه گیری این ماژول در شرایط مختلف فوق العاده میباشد و شما میتوانید درمحیط های نورکم،نورزیاد،هوای خشک یا مرطوب هم از این ماژول استفاده کنید
                ما در این پروژه از یک ال سی دی کالاکتری 2*16 استفاده کردیم که برای آنچه که میخواهیم به عمل بیاورد مناسب است.
                کار این نمایشگر ارزان قیمت و در عین حال پر کاربرد ،نشان دادن مقدار فاصله جسم از ماژول HC-SR04 بر حسب سانتی متر (cm) میباشد




                سورسی که ما برای این پروژه به کار بردیم خیلی راحته پس یادگیریش همچینم سخت نیس
                #include <LiquidCrystal.h>
                #define trigPin 10
                #define echoPin 13
                LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
                void setup() {
                Serial.begin (9600);
                pinMode(trigPin, OUTPUT);
                pinMode(echoPin, INPUT);
                }
                void loop() {
                float duration, distance;
                digitalWrite(trigPin, LOW);
                delayMicroseconds(2);
                digitalWrite(trigPin, HIGH);
                delayMicroseconds(10);
                digitalWrite(trigPin, LOW);
                duration = pulseIn(echoPin, HIGH);
                distance = (duration / 2) * 0.0344-1; /*این خط رو به یاد داشته باشید */
                if (distance >= 400 || distance <= 2){
                Serial.print("Distance = ");
                Serial.println("Out of range");
                lcd.print("Out of range");
                }
                else {
                Serial.print("Distance = ");
                Serial.print(distance);
                Serial.println(" cm");
                lcd.print(distance);
                lcd.print(" cm");
                delay(500);
                }
                delay(500);
                lcd.clear();
                }


                اون خطی ک گفتم اینجارا به یاد داشته باشید رو ببینید
                شما اونجا میتونید با تغیرات اندکی به دقت اندازه گیری کمک کنید
                مثلا میتونید با این کد
                distance = (duration / 2) * 0.0344-1;

                تنها با 1-
                یک سانت از واحد شمارش روی ال سی دی کم کنید و به بهترین اندازه دس بیابید




                خب بریم سراغ سیم بندی مدار


                اگر صفحه نمایش شما وضوح مناسبی نداشت متونید از مقاومت با اندازه بیشتری در اتصال ve به GND استفاده کنید
                جدیدترین ویرایش توسط tohid amini; ۱۱:۰۵ ۱۳۹۶/۰۷/۲۷.

                دیدگاه


                  #23
                  پاسخ : من یک تازه کار با برد آردوینو UNO هستم !!

                  سلام و درود بر همه ی شما عزیزان

                  در این قسمت میخوام راه اندازی LCD TFT 2.4 رو بزارم
                  یه نگاهی به ال سی دی مون میندازیم و میریم سراغ آموزش
                  توجه کنید ما در این پروژه میخایم یه ماشین حساب بسازیم و آموزش های بعدی رو در روز های آینده قرار میدم
                  درباره نمایشگر :
                  2.4 اینچ فول کالر ، قدرت و رزولوشن 240x320 و طیف گسترده ی رنگ ها نسبت به قیمت خود فوق العاده میباشد.
                  همچنین این نمایشگر دارای شیلد سازگار با برد های آردوینو میباشد که کار مارا برای اجرای تصویر روی ال سی دی ، بسیار آسان کرده است
                  شیلد السیدی 2.4 اینچی مبتنی بر تراشه درایور spfd5408 با رابط دیتای 8 بیتی و کنترلی 4 بیتی می باشد. علاوه براین شیلد دارای تاچ اسکرین و سوکت SD نیز می باشد.
                  کد هایی که قرار داده ام را در برنامه ا کپی کرده و آن را کامپایل کنید
                  #include <Adafruit_GFX.h>    // Core graphics library#include <MCUFRIEND_kbv.h>
                  MCUFRIEND_kbv tft; // hard-wired for UNO shields anyway.
                  #include <TouchScreen.h>
                  //#include <Fonts/FreeSans9pt7b.h>
                  #define BLACK 0x0000
                  #define BLUE 0x001F
                  #define RED 0xF800
                  #define GREEN 0x07E0
                  #define CYAN 0x07FF
                  #define MAGENTA 0xF81F
                  #define YELLOW 0xFFE0
                  #define WHITE 0xFFFF
                  #define BUTTON_X 30
                  #define BUTTON_Y 123
                  #define BUTTON_W 51
                  #define BUTTON_H 50
                  #define BUTTON_SPACING_X 07
                  #define BUTTON_SPACING_Y 07
                  #define BUTTON_TEXTSIZE 2
                  //const char values[] PROGMEM={1,2,3,+,4,5,6,-,7,8,9,=,0,D};
                  char buttonlabels[16][5] = { "1", "2", "3","+", "4", "5", "6","-", "7", "8", "9","/","=","0","DEL","x"};
                  uint16_t buttoncolors[16] = { CYAN,CYAN,CYAN,MAGENTA,CYAN,CYAN,CYAN,MAGENTA,CYAN,CYAN,CYAN,MAGENTA,MAGENTA,CYAN,MAGENTA,MAGENTA };
                  Adafruit_GFX_Button buttons[16];
                  int col=0,row=0,z=0;
                  #define TEXT_X 5
                  #define TEXT_Y 25
                  #define TEXT_W (tft.width()-10)
                  #define TEXT_H 70
                  #define TEXT_TSIZE 3
                  #define TEXT_TCOLOR MAGENTA
                  char q;
                  uint8_t YP = A1; // must be an analog pin, use "An" notation!
                  uint8_t XM = A2; // must be an analog pin, use "An" notation!
                  uint8_t YM = 7; // can be a digital pin
                  uint8_t XP = 6; // can be a digital pin


                  // Calibrate values
                  #define TS_MINX 125
                  #define TS_MINY 85
                  #define TS_MAXX 800
                  #define TS_MAXY 905
                  uint32_t num1,num2;
                  char operator_type=-1;
                  #define TEXT_LEN 10
                  char textfield[TEXT_LEN+1] = "";
                  uint8_t textfield_i=0;
                  uint32_t result=0;
                  #define MINPRESSURE 100
                  #define MAXPRESSURE 1700
                  TouchScreen ts = TouchScreen(XP, YP, XM, YM, 350);
                  TSPoint tp;
                  boolean n=false;
                  char test=0;
                  uint16_t identifier;
                  void setup() {
                  // put your setup code here, to run once:
                  Serial.begin(9600);
                  tft.reset();
                  identifier = tft.readID();
                  tft.begin(identifier);
                  tft.fillScreen(WHITE);
                  tft.setRotation(0);
                  welcome_screen();
                  waitfortouch();
                  start_screen();

                  }
                  void loop()
                  {
                  waitfortouch();
                  if(n==true)
                  {
                  clear_result();
                  // Serial.println("clearing");
                  }
                  get_button();
                  if(q> 0 && q<=16)
                  {
                  q--;
                  if(get_number(q)!=-1)
                  {
                  test++;
                  if(test==1)
                  {
                  num1=get_number(q);
                  pressed_button();
                  animate();
                  display_text();
                  }
                  else if(test==2 && operator_type!=-1){
                  num2=get_number(q);
                  pressed_button();
                  animate();
                  display_text();
                  test=0;
                  }
                  }
                  else
                  if(get_opertator(q)!=-1)
                  {
                  operator_type=get_opertator(q);
                  pressed_button();
                  animate();
                  display_text();

                  }else
                  if(q==12)
                  {display_text();
                  switch (operator_type)
                  {
                  case 0:result=num1+num2;break;
                  case 1:result=num1-num2;break;
                  case 2:result=num1/num2;break;
                  case 3:result=num1*num2;break;
                  }
                  result_display();
                  operator_type=-1;
                  test=0;
                  num1=0;
                  num2=0;
                  char textfield[TEXT_LEN+1] = "";
                  textfield_i=0;
                  n=true;
                  }
                  else
                  if(q==14 && test!=0)
                  {
                  clr_button();
                  test--;
                  animate();
                  display_text();
                  }
                  q=0;
                  }
                  }


                  void get_button()
                  {for (uint8_t b=0; b<16; b++)
                  {
                  if (buttons[b].contains(tp.x, tp.y))
                  {
                  buttons[b].press(true); // tell the button it is pressed
                  q=b+1;
                  }
                  else
                  {
                  buttons[b].press(false); // tell the button it is NOT pressed
                  }
                  }
                  }
                  void animate()
                  {
                  if (buttons[q].justPressed())
                  {
                  buttons[q].drawButton(true); // draw invert!
                  delay(300);
                  buttons[q].drawButton();
                  }
                  }
                  void clr_button()
                  {

                  textfield[textfield_i] = 0;
                  if (textfield > 0)
                  {
                  textfield_i--;
                  textfield[textfield_i] = ' ';
                  }
                  }




                  int get_number(unsigned int num)
                  {
                  switch (num)
                  {
                  case 0x00: return 1; break;
                  case 0x01: return 2; break;
                  case 0x02: return 3; break;
                  case 0x04: return 4; break;
                  case 0x05: return 5; break;
                  case 0x06: return 6; break;
                  case 0x08: return 7; break;
                  case 0x09: return 8; break;
                  case 0x0A: return 9; break;
                  case 0x0D: return 0; break;
                  default: return -1;break;
                  }
                  }
                  int get_opertator(const char num)
                  {
                  switch (num)
                  {
                  case 0x03: return 0;break;
                  case 0x07: return 1;break;
                  case 0x0B: return 2;break;
                  case 0x0F: return 3;break;
                  default: return -1;break;
                  }
                  }


                  void display_text()
                  {
                  tft.setCursor(TEXT_X + 2, TEXT_Y+10);
                  tft.setTextColor(TEXT_TCOLOR, WHITE);
                  tft.setTextSize(TEXT_TSIZE);
                  tft.print(textfield);
                  }
                  void clear_result()
                  {
                  tft.setCursor(TEXT_X + 2, TEXT_Y+40);
                  tft.setTextColor(TEXT_TCOLOR, WHITE);
                  tft.setTextSize(TEXT_TSIZE);
                  tft.print(" ");
                  tft.setCursor(TEXT_X + 2, TEXT_Y+10);
                  tft.print(" ");

                  n=false;
                  }
                  void result_display()
                  {
                  tft.setCursor(TEXT_X + 2, TEXT_Y+40);
                  tft.setTextColor(TEXT_TCOLOR, WHITE);
                  tft.setTextSize(TEXT_TSIZE);
                  tft.print('=');
                  tft.print(result);
                  }
                  void pressed_button()
                  {
                  textfield[textfield_i] = buttonlabels[q][0];
                  textfield_i++;
                  textfield[textfield_i] = 0; // zero terminate
                  }


                  void button_ini()
                  {
                  for(int i=0;i<4;i++)
                  { for(int j=0;j<4;j++)
                  creat_button(i,j);
                  }
                  }
                  //function to creat buttons
                  void creat_button(int x,int y)
                  {row=x;col=y;


                  buttons[z].initButton(&tft, BUTTON_X+col*(BUTTON_W+BUTTON_SPACING_X),
                  BUTTON_Y+row*(BUTTON_H+BUTTON_SPACING_Y), // x, y, w, h, outline, fill, text
                  BUTTON_W, BUTTON_H, BLACK, buttoncolors[z],BLACK,
                  buttonlabels[z], BUTTON_TEXTSIZE);
                  buttons[z].drawButton();
                  z++;
                  }


                  void welcome_screen()
                  {


                  drawBorder();
                  // Initial screen
                  tft.setTextSize (3);
                  tft.setTextColor(MAGENTA);
                  tft.setCursor ((tft.width()/2)-85, 85);
                  tft.println("CALCULATOR");
                  tft.setCursor ((tft.width()/2)-100, 130);
                  tft.setTextSize (2);
                  tft.setTextColor(BLACK);
                  tft.println(" TOHID AMINI");
                  tft.setCursor ((tft.width()/2)-95, 250);
                  tft.println("Touch to Proceed");

                  }


                  void start_screen()
                  {

                  tft.fillScreen(WHITE);
                  tft.setCursor ((tft.width()/2)-60, 5);
                  tft.setTextSize (2);
                  tft.setTextColor(BLACK);
                  tft.println("TOHID AMINI");
                  tft.drawRoundRect(TEXT_X, TEXT_Y, TEXT_W, TEXT_H, 10, BLACK);
                  button_ini();
                  waitfortouch();
                  }


                  void drawBorder ()
                  {// Draw a border
                  uint16_t width = tft.width() - 1;
                  uint16_t height = tft.height() - 1;
                  uint8_t border = 10;
                  tft.fillScreen(RED);
                  tft.fillRect(border, border, (width - border * 2), (height - border * 2), WHITE);
                  }
                  TSPoint waitfortouch()
                  {
                  do {
                  tp= ts.getPoint();
                  pinMode(XM, OUTPUT); //Pins configures again for TFT control
                  pinMode(YP, OUTPUT);
                  } while((tp.z < MINPRESSURE )|| (tp.z > MAXPRESSURE));


                  tp.x = map(tp.x, TS_MINX, TS_MAXX, 0, tft.width());
                  tp.y = map(tp.y, TS_MINY, TS_MAXY, 0, tft.height());
                  return tp;


                  }[SIZE=4][/SIZE]


                  ممکن است شما در اجرای این کد ها به یک پیغامی بر بخورید ک فرایند کامپایل کردن را متوقف میکند.
                  این بدان معناست که کتابخانه های مورد نظر را دانلود نکرده اید
                  برای همین مافایل کتابخانه های مورد استفاده را در لینک زیر قرار داده ایم
                  https://github.com/adafruit/Adafruit-GFX-Library/archive/master.zip



                  فایل های بالایی را از حالت زیپ خارج کرده و در مسیر Documents\Arduino\libraries/ کپی کرده و سراغ برنامه رفته و دوباره کامپایل کنید

                  با توجه به شرکت های سازنده ی ماژول های مختلف
                  در بعضی از شیلد ها یک خازن وجود دارد که در اثر برخورد با بدنه پورت یو اس بی ،اتصال کوتاه کرده و مانع از اجرای درست پرژه میشود


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



                  نمونه تصاویری از پروژه را در اختیار شما قرار میدهم تا از واقعیت مسله آگاه باشید






                  امیدوارم لذت برده باشید
                  جدیدترین ویرایش توسط tohid amini; ۱۲:۳۴ ۱۳۹۶/۰۸/۰۲.

                  دیدگاه


                    #24
                    پاسخ : من یک تازه کار با برد آردوینو UNO هستم !!

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


                    الان میخواین با کلید یا همون PUSHBUTTON به صورت دستی کنترل کنیم روشن خاموش شدن LED رو ....
                    اونطوری که مشخصه اگه جریان عبوری از مدارمون رو به منزله جریان اب درنظر بگیریم کلید به عنوان فلکه عمل میکنه ینی بافشار دادنش فلکه باز میشه و اب جاری میشه ینی الان ما میخواین برنامه ای بنویسیم که با فشار دادن کلید LED مون روشن شه
                    کدهای برنامه بدین شکل هست :

                    const int LED = 13;
                    const int BUTTON = 7;
                    int val = 0;

                    void setup() {
                    pinMode(LED, OUTPUT);
                    pinMode(BUTTON,INPUT);

                    }

                    void loop() {
                    val = digitalRead(BUTTON);

                    if (val == HIGH) {
                    digitalWrite(LED,HIGH);
                    } else {
                    digitalWrite(LED, LOW);

                    }
                    }

                    سه خط اول تعریف پایه و متغیرهای مورد استفاده در برنامه به بردمون هست
                    برای تعریف یک متغیر عددی از int استفاده میکنیم .
                    عبارت const در اول int بدین معنی است که مقدار متغیرمون تا اخر برنامه ثابت میمونه و مقدارش رو تغییر نمیدیم .
                    در تابع SETUP نوع ورودی و خروجی پایه ها رو مشخص میکنیم که
                    پایه 13 رو خروجی
                    و پایه 7 رو ورودی در نظر گرفتیم
                    میرسیم به تابع LOOP که هسته اصلی برنامه مونه :
                    روال کلی این برنامه و در حقیقت اون چیزی که ما میخوایم این هستش
                    ما میخوایم متغیرمون پایه ورودی رو چک کنه و هر وخت ورودی مون 1 شد (HIGH) ینی هر وخت کلید رو فشار دادیم خروجی مون LED رو برامون روشن کنه و در غیر این صورت LED خاموش باشه ....
                    برای این کار از تابع digitalRead استفاده میکنیم (این تابع ورودی مون رو میخونه تا ببینه ایا کلید فشرده شده یا نه !!)
                    از if هم برای روشن و خاموش کردن led استفاده میشه بدین صورت که میگیم اگه کلیدمون فشرده شد led رو روشن کن اگه فشرده نشد ledمون رو خاموش نگه دار ...
                    با بستن این مدار و اجرای برنامه با فشاردادن کلید led مون روشن میشه و وقتی فشار نمیدیم خاموش هستش .
                    ببخشید راهی هست که مقاومت پول آپ داخلی رو راه بندازیم؟

                    Sent from my GT-N5100 using Tapatalk

                    دیدگاه


                      #25
                      پاسخ : من یک تازه کار با برد آردوینو UNO هستم !!

                      راه اندازی موتور dc با آردوینو


                      با سلام امروز میخام راه اندازی موتور dc با آردوینو رو بزارم
                      یه پروژه ی کاملا راحت و با قطعات ارزان

                      میخوایم در کنار اینکه یک موتور رو راه اندازی میکنیم ، بتونیم میزان سرعت موتور رو هم کنترل کنیم و همچنین جهت چرخش موتور رو هم عوض کنیم،

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

                      دراین پروژه درآردوینو ، پتاسنیومتر ،l293 و یک کلید استفاده میکنیم.
                      در این پروژه با پتاسنیومتر سرعت موتور رو کنترل میکنیم و با کلید جت چرخش موتور رو تغییر میدیم.

                      توجه داشته باشید
                      شما میتونید از l298 هم استفاده کنید ولی با این تفاوت که ایشون تا دو آمپر میتونه جریا خروجی بده اما آی سی ما نیم آمپر میده ک برای ما کافیه

                      خب این پایه های آی سیمونه



                      Enable1 به —-> DigitalPin11(PWM)
                      INPUT1 به —-> DigitalPin10(PWM)
                      OUTPUT1 به —-> MOTOR PIN 1
                      GND1 به —-> Gnd
                      OUTPUT2 به —-> MOTOR PIN 2
                      INPUT2 به —-> DigitalPin9(PWM)
                      12v به —-> 5v
                      Vss3.3v به —-> 5v یا 3.3

                      خب این از توضیح کوچولوی سیم کشی
                      حالا بریم ک سیم کشی رو با عکس توضیح بدیم





                      خب ما مدارمونو بستیم و تنها کاری که مونده اینه که باید کد رو بریزیم تو آردوینو
                      خیی راحت کدو کپی میکنید
                      خواتسید میتونید تغیرش بدید ولی اینی ک من نوشتم خیلی روتین هست و عامیانه استفاده میشه

                      int input1 = 3;int input2 = 4; 
                      int input3 = 5;
                      int input4 = 6;

                      void setup() {
                      pinMode(input1,OUTPUT);
                      pinMode(input2,OUTPUT);
                      pinMode(input3,OUTPUT);
                      pinMode(input4,OUTPUT);
                      }

                      void loop() {
                      digitalWrite(input1,HIGH);
                      digitalWrite(input2,LOW);
                      digitalWrite(input3,HIGH);
                      digitalWrite(input4,LOW);
                      delay(1000);


                      digitalWrite(input1,LOW);
                      digitalWrite(input2,LOW);
                      digitalWrite(input3,LOW);
                      digitalWrite(input4,LOW);
                      delay(500);

                      digitalWrite(input1,LOW);
                      digitalWrite(input2,HIGH);
                      digitalWrite(input3,LOW);
                      digitalWrite(input4,HIGH);
                      delay(1000);

                      }









                      یه فیلم از نحوه ی عملکرد پروژه هم میزارم ک ببنید چیطوریه


                      امیدوارم ک لذت برده باشید
                      جدیدترین ویرایش توسط tohid amini; ۱۳:۱۴ ۱۳۹۶/۰۸/۱۱.

                      دیدگاه


                        #26
                        پاسخ : من یک تازه کار با برد آردوینو UNO هستم !!

                        نوشته اصلی توسط Master81 نمایش پست ها
                        ببخشید راهی هست که مقاومت پول آپ داخلی رو راه بندازیم؟
                        سلام پول آپ داخلی در اردوینو با دستور digitalWrite انجام میشه
                        digitalWrite(pin,value);
                        pin شماره پایه مورد نظر وvalue مقدار پایه که برای پول آپ کردن HIGH و برای پول دان کردن از LOW استفاده میکنیم.

                        دیدگاه


                          #27
                          پاسخ : من یک تازه کار با برد آردوینو UNO هستم !!

                          راه اندازی موتور DC با شیلد L298P آردوینو Arduino


                          در این آموزش قصد داریم نحوی راه اندازی موتور دی سی به کمک شیلد L298P آردوینو را آموزش دهیم


                          شیلد درایور موتور L298 بر اساس درایور معروف L298 برای درایو کردن همزمان ۲ موتور با توان*های بالا طراحی شده است.این شیلد دارای ۴ خروجی با قابلیت درایو کردن ۲ عدد موتور DC با حدکثر جریان ۲ آمپر میباشد.به وسیله ی این شیلد نیز می توان ، یک عدد استپر را راه اندازی نمود. توسط این برد امکان تغییر جهت چرخش موتور و کنترل سرعت از طریق مدولاسیون PWM و PPL وجود دارد.
                          سخت افزار مورد نیاز

                          آردوینو UNOشیلد L298P آردوینو
                          اتصالات

                          شیلد را روی پین های آردوینو سوار کنید و موتور را به یکی از پین های A یا *B متصل کنید. خب بریم سراغ راه اندازی و کد نویسی شیلد،
                          نکته:بخاطر پایین بودن توان آردوینو پیشنهاد میشود شیلد را به یک منبع تغذیه نسبت به ولتاژ موتور متصل کنید.


                          توضیحات:

                          اگر پین D12 روی HIGH باشد موتور A در یک جهت و اگر روی LOW باشد در جهت دیگر حرکت میکند.اگر پین D13 روی HIGH باشد موتور *B در یک جهت و اگر روی LOW باشد در جهت دیگر حرکت میکند.پین های D3 و D11 جهت تنظیم سرعت موتور:جهت تنظیم سرعت موتور A از پین D3 که عددی بین ۰تا ۲۵۵ میگیرد به پین به صورت PWM وارد میکنیم.جهت تنظیم سرعت موتور B از پین D11 که عددی بین ۰تا ۲۵۵ میگیرد به پین به صورت PWM وارد میکنیم.از پین D9 و D8 نیز برای توقف موتور های استفاده میکنیم:


                          کد نویسی:
                          int pwm_a = 3;  //PWM control for motor outputs 1 and 2 is on digital pin 3
                          int pwm_b = 11; //PWM control for motor outputs 3 and 4 is on digital pin 11

                          int dir_a = 12; //direction control for motor outputs 1 and 2 is on digital pin 12
                          int dir_b = 13; //direction control for motor outputs 3 and 4 is on digital pin 13

                          void setup()
                          {

                          pinMode(pwm_b, OUTPUT);
                          pinMode(dir_b, OUTPUT);
                          }


                          void loop()
                          {
                          //
                          digitalWrite(dir_b, LOW); //Set motor direction, 3 high, 4 low
                          analogWrite(pwm_b,511);
                          delay(1000);
                          digitalWrite(dir_b, HIGH);
                          analogWrite(pwm_b,1000);
                          delay(1000);


                          شرح برنامه:

                          در قسمت اول برنامه به پورت ها نام داده ایم که در ادامه از نام آنها استفاده کنیم، در setup برنامه پورت های ۱۱, ۳ را برای راه اندازی موتور B به صورت output مشخص کردیم.در قسمت loop برنامه موتور B را در یک جهت با سرعت ۲۵۵ حرکت دادیم سپس جهت موتور را عوض کردیم و سرعت را کم کردیم.

                          digitalWrite(dir_b, LOW); //Set motor direction, 3 high, 4 low
                          analogWrite(pwm_b,255);
                          delay(1000);
                          digitalWrite(dir_b, HIGH);
                          analogWrite(pwm_b,150);

                          با استفاده از مثال ها خودتان چند مثال از عوض کردن جهت موتور های A و B و کم زیاد کردن سرعت آن با اعمال پالس بنویسید تا کاملا با نحوه کار آن آشنا شوید.






                          جدیدترین ویرایش توسط tohid amini; ۱۲:۲۰ ۱۳۹۶/۰۸/۱۵.

                          دیدگاه


                            #28
                            پاسخ : من یک تازه کار با برد آردوینو UNO هستم !!

                            پروژه آردوینو کنترل وسایل برقی با صدا






                            سلام امروز میخام آموزش کنترل وسایل برقی با صدا رو بزارم
                            این آموزشی که میخام بزارم خیلی سادس
                            ولی در حالی که سادس نیاز به دقت بالایی داره

                            قطعات مورد نیاز:
                            ماژول بلوتوث hc_05 به همراه بود کمکی
                            آردوینو یونو
                            سیم های رابط


                            شماتیک مدار رو میزارم تا شما سیم کشی رو انجام بدید



                            خب حالا که سیم کشی رو انجام داید تغذیه ی آردیونو رو وصل کنید
                            اگه ال ای دی ماژول بلوتوث چشمک زد یعنی تغذیش درسته
                            اگه نزد یعنی یعنی سیم کشی مشکل داره و باید شما برسیش کنید و گرنه به ماژول آسیب میرسه

                            خب بریم سراغ کد :
                            #include <SoftwareSerial.h>

                            SoftwareSerial BTserial(2, 3);
                            // Connect the HC-05 TX to Arduino pin 2 RX.
                            // Connect the HC-05 RX to Arduino pin 3 TX through a voltage divider.
                            #define red 5
                            #define green 6
                            #define blue 7


                            char c = ' ';
                            String s = "";

                            void setup()
                            {
                            Serial.begin(9600);
                            BTserial.begin(9600);
                            pinMode(red,OUTPUT);
                            pinMode(green,OUTPUT);
                            pinMode(blue,OUTPUT);
                            }

                            void loop()
                            {
                            s= "";
                            while(BTserial.available()>0){
                            c = BTserial.read();
                            s += c;
                            //Serial.println(c);
                            delay(1);
                            }
                            if (s != ""){
                            Serial.println(s);
                            if (s.startsWith("redOn")) digitalWrite(red , HIGH);
                            else if (s.startsWith("redOff")) digitalWrite(red , LOW);
                            else if (s.startsWith("greenOn")) digitalWrite(green , HIGH);
                            else if (s.startsWith("greenOff")) digitalWrite(green , LOW);
                            else if (s.startsWith("blueOn")) digitalWrite(blue , HIGH);
                            else if (s.startsWith("blueOff")) digitalWrite(blue , LOW);


                            }
                            }


                            یه عکس از پروژه میزارم که شمام ببنید







                            جدیدترین ویرایش توسط tohid amini; ۱۷:۳۳ ۱۳۹۶/۰۸/۱۷.

                            دیدگاه


                              #29
                              پاسخ : من یک تازه کار با برد آردوینو UNO هستم !!

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

                              دیدگاه


                                #30
                                پاسخ : من یک تازه کار با برد آردوینو UNO هستم !!

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

                                اینجا
                                اوژن: به معنای افکننده و شکست دهنده است
                                دانایی، توانایی است-Knowledge is POWER
                                برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                                وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                                قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                                اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                                ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                                دیدگاه

                                لطفا صبر کنید...
                                X