السلام عليكم ورحمة الله تعالى وبركاته . هل يظهر لك خطأ بالكود ناتج عن عدم تفعيل مكتبه جديده اضفتها للاردينو؟ هذه المشكله التي طالما طرحت علي من قبل المتابعين ، وفي هذه التدوينه سيتم معرفة الطريقة الصحيحة لكيفية تثبيت مكتبة جديدة في الأردوينو . لنأخذ كمثال تفعيل مكتبة "المترو" من مقالة المؤقتات الزمنية و التحكم اللحظي بمنافذ الأردوينو بعد ان يتم تحميل المكتبه قم بفك ضغط الملف بعد الضغط على الزر الايمن للفأره على ايقونه الملف ثم إستخرج هنا . نفتح الملف الناتج ونختار الملف الذي يفتح مباشره لملفات الcpp وh
اذا سننقل ملف Metro في هذا المثال
نضعه في مسار مكتبات اردوينو
ونغلق واجهه الاردوينو , ثم نعيد فتح البرنامج وبذلك نكون قد فعّلنا المكتبه الجديده ويمكننا التأكد من اختيار example من قائمه ملف
وهكذا يمكننا استخدام هذه المكتبه الجديده ضمن الكود
السلام عليكم ورحمة الله تعالى وبركاته . كيف تجعل منافذ الأردوينو أكثر إستجابة ؟؟ ذا السؤال الذي طالما يطرح علي في رسائل المتابعين على صفحتي الشخصية ، فهل يمكنني ذلك ؟؟ هل يمكنني ربط حساسات كثيرة مثل الالتراسونيك و الاشعة تحت الحمراء و المحركات مع الأردوينو و جعلها تعمل بشكل واحد و بدون تأخير زمني ملحوظ ؟ في البداية يجب أن أشير إلى أن المتحكمات الأصغرية MCU برمجتها تعتمد على الأوامر السلمية Ladder أي تنفيذ البرامج يكون بالترتيب حسب موضع التعليمة بالكود , من الأعلى للأسفل , هناك استثناءات الأ وهي المقاطعات Interrupts و المؤقتات Timers. لكن نرجع للسؤال الأهم ، هل يمكنهم كلهم العمل مع الأردوينو دون تأخير زمني ملحوظ ؟؟ الجواب نعم كيف ؟ هذا ما سنتعرف عليه سويا في هذه التدوينة . أبسط أوامر التأخير الزمني في الأردوينو هو delay هذا الأمر يسهل على المبتدئين معرفة معنى التأخير الزمني و كيفية تطبيقه على المداخل و المخارج . كأبسط مثال , برنامج Blink الذي يطبق على الباعث الضوئي LED المربوط على المدخل D13 يضيء لثانية واحده و يطفى لثانية واحدة
/* Blink Turns on an LED on for one second, then off for one second, repeatedly. This example code is in the public domain. */
// Pin 13 has an LED connected on most Arduino boards. // give it a name: int led = 13;
// the setup routine runs once when you press reset: voidsetup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); }
// the loop routine runs over and over again forever: voidloop() { digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(led, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second }
هذا الأمر فيه عدة عيوب , منها أنه لا نستطيع عمل أي شيء خلال زمن التأخير , لا نستطيع مثلاً قراءة حالة مدخل معين خلال هذا الوقت او التحكم في حالة مدخل آخر , إلا بعد انتهاء زمن التأخير كما أن زمن التأخير لا يكون بالضبط بنفس القيمة المحددة , في المثل السابق التأخير الزمني هو 1000 ملي ثانية لكن فعلياً التأخير يزيد بقليل عن هذه القيمة , و اذا تم تشغيل هذا البرنامج لفترة طويلة سيكون واضحاً جداً ان التأخير الزمني بين عمليه الأنارة و الأطفاء تزيد عن 1000 ملي ثانية بوضوح تام !
الحل يكون باستخدام الأمر millis ففي الأردوينو يمكن تشغيل المؤقتات باستخدام هذا الأمر و ان يكون زمن الأضاءة و الأغلاق للباعث الضوئي LED بالضبط هو 1000ملي ثانية حتى و لو استمر البرنامج بالعمل لفترة طويلة , هذا رائع :)
هذا البرنامج مثال موجود ضمن ملفات الأردوينو يوضح طريقة العمل لهذا الأمر و بنفس مخرجات البرنامج السابق .
/* Blink without Delay Turns on and off a light emitting diode(LED) connected to a digital pin, without using the delay() function. This means that other code can run at the same time without being interrupted by the LED code. The circuit: * LED attached from pin 13 to ground. * Note: on most Arduinos, there is already an LED on the board that's attached to pin 13, so no hardware is needed for this example. created 2005 by David A. Mellis modified 8 Feb 2010 by Paul Stoffregen This example code is in the public domain.
// constants won't change. Used here to // set pin numbers: constint ledPin = 13; // the number of the LED pin
// Variables will change: int ledState = LOW; // ledState used to set the LED long previousMillis = 0; // will store last time LED was updated
// the follow variables is a long because the time, measured in miliseconds, // will quickly become a bigger number than can be stored in an int. longinterval = 1000; // interval at which to blink (milliseconds)
voidsetup() { // set the digital pin as output: pinMode(ledPin, OUTPUT); }
voidloop() { // here is where you'd put code that needs to be running all the time.
// check to see if it's time to blink the LED; that is, if the // difference between the current time and last time you blinked // the LED is bigger than the interval at which you want to // blink the LED. unsignedlong currentMillis = millis();
if(currentMillis - previousMillis > interval) { // save the last time you blinked the LED previousMillis = currentMillis;
// if the LED is off turn it on and vice-versa: if (ledState == LOW) ledState = HIGH; else ledState = LOW;
// set the LED with the ledState of the variable: digitalWrite(ledPin, ledState); } }
ممتاز هذا رائع , لكن لو اردنا عمل برامج معقدة سيكون وضع الكود بهذه الطريقة أمراً مربكاً للمبرمج , فالحل يكون بوجود مكتبة .
لحسن الحظ فالمهتمين بالأردوينو قاموا بكتابة عشرات المكتبات لتسهل على المستخدمين التعامل مع المداخل و المخارج بصورة سريعة و بدقة عالية , منها مكتبة Metro .
هذه المكتبة تعتمد بشكل أساسي على الأمر millis و تسهل على المبرمج الحصول على برنامج يحتوي العديد من البرامج ذات تأخير زمني ثابت بين كل وظيفة و الأخرى .
أوامرها جداً سهلة و يمكن أن ترى عدة أمثلة مرفقه مع المكتبة .
مثلاً لو أردنا تشغيل 3 مداخل في الأردوينو بحيث يكون :
1)واحد منهم يعمل لأضاءة - اطفاء ضوء لمدة2000ملي ثانية
2)يعمل كتعديل نبضي PWM بحيث يقوم بزيادة طول النبضة الفعالة "زيادة توهج ال LED " مرة كل 10 ملي ثانية.
3) يعمل كمدخل قراءة لحساس تماثلي "مقاومة متغيرة" يقوم بالتحقق منها كل 200ملي ثانية و يزيد توهج LED مربوط على مدخل رقمي بتناسب طردي مع قيمة المقاومة المقروءة .
القطع المستخدمة في التجربة :
1) بطاقة أردوينو
2) مقاومة متغيرة Potentiometer
3) LED باعث ضوئي عدد 3
4)مقاومات عدد 3 "ان تكون قيمتها أقل من 1كيلو اوم"
5) اسلاك توصيل
6) Bread Board .
المخطط :
البرنامج :
// Metro Library code //Written By : MBARK TiЭSTO //http://www.mbarktiesto.com // 18/12/2015 //.................................... #include <Metro.h> // Include the Metro library //first , Blink Led for 150ms Metro LED_flasher = Metro(2000); boolean LEDState=true; //second , Increase dimming For Led by 1 each time Metro PWM_Cycle = Metro(10); int i=0; int Factor=1; //or -1 // third , Read Potentiometer and control the bright //of led connect to another PWM Pin Metro Sensor=Metro(200);
constint LED=13; constint pwmPin=6; constint sensorPin=A0; constint pwmPin2=3; voidsetup() { // put your setup code here, to run once: pinMode( LED ,OUTPUT); pinMode( pwmPin ,OUTPUT); pinMode( pwmPin2 ,OUTPUT); pinMode( sensorPin ,INPUT);
}
voidloop() { // put your main code here, to run repeatedly: if (LED_flasher.check() == 1) { // check if the metro has passed its interval . digitalWrite(LED,LEDState); LEDState=!LEDState; } if (PWM_Cycle.check() == 1) { // check if the metro has passed its interval . analogWrite(pwmPin,i); if(i==0){Factor=1;} if(i>255){Factor=-1;} i+=Factor; } if (Sensor.check() == 1) { // check if the metro has passed its interval . int SensorValue=analogRead(A0); analogWrite(pwmPin2,SensorValue/4); } }
هذه أحدى الطرق لزيادة فاعلية برنامجك , حاول دائماً ان لا تستخدم ال delay بشكل كبير خصوصاً عندما تحتوي مشاريعك على العديد من القطع او التعليمات التي تحتاج دقة في الوقت .
السلام عليكم ورحمة الله تعالى وبركاته . مرحبا بكم في فيديو جديد من دورة و سلسلة فيديوهات أردوينو بشكل مبسط ، ومع مشروع جديد ومصطلح جديد ، في فيديو اليوم وهو الفيديو الخامس ، بإذن الله عز وجل سنرى ونتعلم وبطريقة بسيطة جدا ، كيف تنشئ جهاز كشف الدخان ببساطة شديدة بإستخدام الأردوينو وبعض الإضافات المتوفرة و البسيطة . إذن بدون أن أطيل عليكم أدعكم مع الفيديو والدرس و أتمنى من الله سبحانه وتعالى أن ينال الدرس إعجابكم . عزيزي الزائر إذا أعجبك الفيديو فلا تبخل علي بلايك للفيديو وأن تشترك معي .
ملاحظة : إذا لم تتوفر لديك المستلزمات المستخدمة ، يمكنك شراؤها من متجرنا الإلكتروني . متحكم اردوينو ( UNO)من هنا حساس ضوء LDRمن هنا من هنا مصدر ضوء ليزرمن هنا لوحة تجارب مثقبة Breadboardمن هنا طنـّـان كهربائيمن هنا LEDs بعدة ألوان من هنا
السلام عليكم ورحمة الله تعالى وبركاته . مرحبا بكم في فيديو جديد من دورة و سلسلة فيديوهات أردوينو بشكل مبسط ، ومع مشروع جديد ومصطلح جديد ، في فيديو اليوم وهو الفيديو الخامس ، بإذن الله عز وجل سنرى ونتعلم وبطريقة بسيطة جدا ، كيف تنشئ رادار خاص بك ، بإستخدام الأردوينو وبعض الإضافات المتوفرة و البسيطة . إذن بدون أن أطيل عليكم أدعكم مع الفيديو والدرس و أتمنى من الله سبحانه وتعالى أن ينال الدرس إعجابكم . عزيزي الزائر إذا أعجبك الفيديو فلا تبخل علي بلايك للفيديو وأن تشترك معي .
يمكنك شراء المستلزمات من متجرنا الإلكتروني ، بأثمنة جد مناسبة ، وتصل لعنوانك الذي طلبت في مدة قصيرة . بوردة أردوينو Arduino من هنا محرك سيرفو Servo من هنا حساس إلتراسونيك Ultrasonic من هنا لوحة تجارب مثقبة Bread Board من هنا الشكل الأول :
__________ كود الاردوينو __________
#include <Servo.h> // include the standard servo library Servo leftRightServo; // set a variable to map the servo int leftRightPos = 0; // set a variable to store the servo position const int numReadings = 10; // set a variable for the number of readings to take int index = 0; // the index of the current reading int total = 0; // the total of all readings int average = 0; // the average int echoPin = 7; // the SRF05's echo pin int initPin = 8; // the SRF05's init pin unsigned long pulseTime = 0; // variable for reading the pulse unsigned long distance = 0; // variable for storing distance
/* setup the pins, servo and serial port */ void setup() { leftRightServo.attach(9); // make the init pin an output: pinMode(initPin, OUTPUT); // make the echo pin an input: pinMode(echoPin, INPUT); // initialize the serial port: Serial.begin(9600); }
/* begin rotating the servo and getting sensor values */ void loop() { for(leftRightPos = 0; leftRightPos < 180; leftRightPos++) { // going left to right. leftRightServo.write(leftRightPos); for (index = 0; index<=numReadings;index++) { // take x number of readings from the sensor and average them digitalWrite(initPin, LOW); delayMicroseconds(50); digitalWrite(initPin, HIGH); // send signal delayMicroseconds(50); // wait 50 microseconds for it to return digitalWrite(initPin, LOW); // close signal pulseTime = pulseIn(echoPin, HIGH); // calculate time for signal to return distance = pulseTime/58; // convert to centimetres total = total + distance; // update total delay(10); } average = total/numReadings; // create average reading
if (index >= numReadings) { // reset the counts when at the last item of the array index = 0; total = 0; } Serial.print("X"); // print leading X to mark the following value as degrees Serial.print(leftRightPos); // current servo position Serial.print("V"); // preceeding character to separate values Serial.println(average); // average of sensor readings } /* start going right to left after we got to 180 degrees same code as above */ for(leftRightPos = 180; leftRightPos > 0; leftRightPos--) { // going right to left leftRightServo.write(leftRightPos); for (index = 0; index<=numReadings;index++) { digitalWrite(initPin, LOW); delayMicroseconds(50); digitalWrite(initPin, HIGH); delayMicroseconds(50); digitalWrite(initPin, LOW); pulseTime = pulseIn(echoPin, HIGH); distance = pulseTime/58; total = total + distance; delay(10); } average = total/numReadings; if (index >= numReadings) { index = 0; total = 0; } Serial.print("X"); Serial.print(leftRightPos); Serial.print("V"); Serial.println(average); } }
_______ processing code ________
import processing.serial.*; // import serial library Serial myPort; // declare a serial port float x, y; // variable to store x and y co-ordinates for vertices int radius = 350; // set the radius of objects int w = 300; // set an arbitary width value int degree = 0; // servo position in degrees int value = 0; // value from sensor int motion = 0; // value to store which way the servo is panning int[] newValue = new int[181]; // create an array to store each new sensor value for each servo position int[] oldValue = new int[181]; // create an array to store the previous values. PFont myFont; // setup fonts in Processing int radarDist = 0; // set value to configure Radar distance labels int firstRun = 0; // value to ignore triggering motion on the first 2 servo sweeps
/* create background and serial buffer */ void setup(){ // setup the background size, colour and font. size(750, 450); background (0); // 0 = black myFont = createFont("verdana", 12); textFont(myFont); // setup the serial port and buffer myPort = new Serial(this, Serial.list()[1], 9600); myPort.bufferUntil('n'); }
/* draw the screen */ void draw(){ fill(0); // set the following shapes to be black noStroke(); // set the following shapes to have no outline ellipse(radius, radius, 750, 750); // draw a circle with a width/ height = 750 with its center position (x and y) set by the radius rectMode(CENTER); // set the following rectangle to be drawn around its center rect(350,402,800,100); // draw rectangle (x, y, width, height) if (degree >= 179) { // if at the far right then set motion = 1/ true we're about to go right to left motion = 1; // this changes the animation to run right to left } if (degree <= 1) { // if servo at 0 degrees then we're about to go left to right motion = 0; // this sets the animation to run left to right } /* setup the radar sweep */ /* We use trigonmetry to create points around a circle. So the radius plus the cosine of the servo position converted to radians Since radians 0 start at 90 degrees we add 180 to make it start from the left Adding +1 (i) each time through the loops to move 1 degree matching the one degree of servo movement cos is for the x left to right value and sin calculates the y value since its a circle we plot our lines and vertices around the start point for everything will always be the center. */ strokeWeight(7); // set the thickness of the lines if (motion == 0) { // if going left to right for (int i = 0; i <= 20; i++) { // draw 20 lines with fading colour each 1 degree further round than the last stroke(0, (10*i), 0); // set the stroke colour (Red, Green, Blue) base it on the the value of i line(radius, radius, radius + cos(radians(degree+(180+i)))*w, radius + sin(radians(degree+(180+i)))*w); // line(start x, start y, end x, end y) } } else { // if going right to left for (int i = 20; i >= 0; i--) { // draw 20 lines with fading colour stroke(0,200-(10*i), 0); // using standard RGB values, each between 0 and 255 line(radius, radius, radius + cos(radians(degree+(180+i)))*w, radius + sin(radians(degree+(180+i)))*w); } } /* Setup the shapes made from the sensor values */ noStroke(); // no outline /* first sweep */ fill(0,50,0); // set the fill colour of the shape (Red, Green, Blue) beginShape(); // start drawing shape for (int i = 0; i < 180; i++) { // for each degree in the array x = radius + cos(radians((180+i)))*((oldValue[i])); // create x coordinate y = radius + sin(radians((180+i)))*((oldValue[i])); // create y coordinate vertex(x, y); // plot vertices } endShape(); // end shape /* second sweep */ fill(0,110,0); beginShape(); for (int i = 0; i < 180; i++) { x = radius + cos(radians((180+i)))*(newValue[i]); y = radius + sin(radians((180+i)))*(newValue[i]); vertex(x, y); } endShape(); /* average */ fill(0,170,0); beginShape(); for (int i = 0; i < 180; i++) { x = radius + cos(radians((180+i)))*((newValue[i]+oldValue[i])/2); // create average y = radius + sin(radians((180+i)))*((newValue[i]+oldValue[i])/2); vertex(x, y); } endShape(); /* if after first 2 sweeps, highlight motion with red circle*/ if (firstRun >= 360) { stroke(150,0,0); strokeWeight(1); noFill(); for (int i = 0; i < 180; i++) { if (oldValue[i] - newValue[i] > 35 || newValue[i] - oldValue[i] > 35) { x = radius + cos(radians((180+i)))*(newValue[i]); y = radius + sin(radians((180+i)))*(newValue[i]); ellipse(x, y, 10, 10); } } } /* set the radar distance rings and out put their values, 50, 100, 150 etc.. */ for (int i = 0; i <=6; i++){ noFill(); strokeWeight(1); stroke(0, 255-(30*i), 0); ellipse(radius, radius, (100*i), (100*i)); fill(0, 100, 0); noStroke(); text(Integer.toString(radarDist+50), 380, (305-radarDist), 50, 50); radarDist+=50; } radarDist = 0; /* draw the grid lines on the radar every 30 degrees and write their values 180, 210, 240 etc.. */ for (int i = 0; i <= 6; i++) { strokeWeight(1); stroke(0, 55, 0); line(radius, radius, radius + cos(radians(180+(30*i)))*w, radius + sin(radians(180+(30*i)))*w); fill(0, 55, 0); noStroke(); if (180+(30*i) >= 300) { text(Integer.toString(180+(30*i)), (radius+10) + cos(radians(180+(30*i)))*(w+10), (radius+10) + sin(radians(180+(30*i)))*(w+10), 25,50); } else { text(Integer.toString(180+(30*i)), radius + cos(radians(180+(30*i)))*w, radius + sin(radians(180+(30*i)))*w, 60,40); } } /* Write information text and values. */ noStroke(); fill(0); rect(350,402,800,100); fill(0, 100, 0); text("Degrees: "+Integer.toString(degree), 100, 380, 100, 50); // use Integet.toString to convert numeric to string as text() only outputs strings text("Distance: "+Integer.toString(value), 100, 400, 100, 50); // text(string, x, y, width, height) text("Radar screen code at ali-madness.blogspot.com", 540, 380, 250, 50); fill(0); rect(70,60,150,100); fill(0, 100, 0); text("Screen Key:", 100, 50, 150, 50); fill(0,50,0); rect(30,53,10,10); text("First sweep", 115, 70, 150, 50); fill(0,110,0); rect(30,73,10,10); text("Second sweep", 115, 90, 150, 50); fill(0,170,0); rect(30,93,10,10); text("Average", 115, 110, 150, 50); noFill(); stroke(150,0,0); strokeWeight(1); ellipse(29, 113, 10, 10); fill(150,0,0); text("Motion", 115, 130, 150, 50); }
/* get values from serial port */ void serialEvent (Serial myPort) { String xString = myPort.readStringUntil('n'); // read the serial port until a new line if (xString != null) { // if theres data in between the new lines xString = trim(xString); // get rid of any whitespace just in case String getX = xString.substring(1, xString.indexOf("V")); // get the value of the servo position String getV = xString.substring(xString.indexOf("V")+1, xString.length()); // get the value of the sensor reading degree = Integer.parseInt(getX); // set the values to variables value = Integer.parseInt(getV); oldValue[degree] = newValue[degree]; // store the values in the arrays. newValue[degree] = value; /* sets a counter to allow for the first 2 sweeps of the servo */ firstRun++; if (firstRun > 360) { firstRun = 360; // keep the value at 360 } } }
الشكل الثاني :
__________ كود الاردوينو __________
#include <Servo.h>
Servo servo1;
static const int minAngle = 0; static const int maxAngle = 180; int servoAngle; int servoPos; int servoPin = 9;
#define echoPin 7 #define trigPin 8 #define LEDPin 13 long duration; long HR_dist=0; int HR_angle=0; int HR_dir=1; int minimumRange=2; int maximumRange=500;
هناك أزمة عامة في الوطن العربي وهي عدم توفر القطع الإلكترونية بصورة كافية خاصة أن المحلات الموجودة في معظم الدول توفر القطع اﻹلكترونية المتعلقة بصيانة الأجهزة الكهربية المشهورة فقط ولا تلبي جميع احتياجات هواة الإلكترونيات.
محاولاتي الكثيرة والفاشلة في الحصول على مكونات إلكترونية خاصة ببردات الأردوينو في المغرب ، تبا وجدت فقد بردات قديمة و باهظة الثمن + المقاومات لم تكن تلك التي أريد وهذا يؤكد لنا غياب الإهتمام بمجالات الإبداع ، المهم بحثث في عديد من المدن المغربية المعروفة وبدون جدوى لم أجد ما أريد . فقررت أن أذهب إلى العملاق،،،،، الصين.
الاستيراد من الصين عملية سهلة وليست معقدة كما يعتقد الجميع، وأجمل شئ هو السعر فائق الانخفاض والذي غالباً يكون 25% إلى 10% من سعر السوق المحلي (هذا يعني انك ستوفر من 70% الى 90% من سعر السلعة).
في هذا المقال سأشرح الخطوات التي يجب عليك اتباعها لشراء أي قطع إلكترونية أو اي منتج من الصين، مع العلم أنني اسكن في المغرب لذلك هذا المقال سيكون لكل قاطني المغرب خصوصا (مع العلم أن جميع الخطوات تصلح لكل البلاد العربية بلا استثناء).
المتطلبات:
1- بطاقة دفع عبر الانترنت مثل Visa Internet or Master Card
2- عنوان ثابت للشحن
3- رقم هاتف (جوال أو هاتف أرضي) خاص بك
بالنسبة لبطاقة بنكية أنصحك خصوصا إذا كنتم في المغرب والجزائر و تونس أن تستخدمو حساباتك البنكية للشراء ، أو هناك حل أخر إذا كان لديك حساب بايبال فيه أموال يمكنك الشراء حتى وإن لم يكن مفعلا لكن هنا ستظطر لتغيير الموقع الذي سأشرحه اليوم وأنصحك في هذه الحالة بموقع (Gear Best)
يمكنك اﻵن الشراء من المتاجر الصينية المتوفرة عبر الإنترنت واليك أفضل متجرين في رأيي الشخصي:
كلا الموقعين يقدمان خدمات ممتازة ولقد جربت الشراء من كلاهما، ما يميز deal extreme هو أن جميع المنتجات تأتي بشحن مجاني دون أي رسوم إضافيه، بينما يوفر موقع ali express المنتجات بصورة أرخص (أغلب هذه المكونات تكون مع شحن مجاني وبعضها يكون برسوم شحن زهيدة جداً مثل 1 او 2 دولار).
شخصياً أفضل Ali express لان يقدم ضمان لاسترداد المال في حالة ضياع او فقدان المنتج ويوجد به نظام لقياس مدى رضاء العميل شامل استرداد المال اذا لم يعجبك المنتج كما أنه يحتوي على مجموعة ضخمة جداً من المنتجات في كل المجالات تقريباً (لا يمكن مقارنة حجم المنتجات الموجود به بموقع dx.com حيث يتفوق Ali express بفارق واضح).
أيضاً يتوفق Ali Express في زمن الشحن، عندما اشتريت المقاومات استغرق الامر اسبوعين حتى وصلت المغرب ، و 5 ايام حتى وصلت الى مركز البريد بمدينة تارودانت (اجمالي 20 يوم) وعندما جربت dx.com استغرق اﻷمر نحو 35 يوم تقريباً.
ابدأ الشراء
قم بالاشتراك في الموقع وسجل جميع بياناتك بصورة صحيحة خاصة الاسم وعنوان الشحن (لاحظ أنه عند استلام المنتجات سيطلب منك البطاقة الشخصية ويجب أن تكون البيانات المكتوبة عليها مطابقة للعنوان المطبوع على الطرد القادم من موقع Ali Express).
بعد الانتهاء من كتابة كافة البيانات يمكنك اﻵن شراء أي مكونات تريدها، فمثلا لنبحث عن المقاومات Surface mount والتي تكتب SMD Resistors في مربع البحث.
لاحظ انه يوجد مجموعة من المربعات في الشريط العلوي لاختيار طريقة ترتيب النتائج مثل السعر (الأقل ثم اﻷعلى) أو عدد الطلباتOrders من هذا المتجر (هذا التصنيف يوضح مدى شهرة و موثوقيه المتجر الذي يبيع هذه المكونات ويعتبر افضل طريقة لاختيار الشخص الذي تريد الشراء منه)، وهناك تصنيف عدد التقييم من الزبائن Rating
أنصحك أن تقوم بترتيب النتائج دائما عن طريق كمية ال orders او التقييم Rating وبذلك تصلح على أفضل التجار (غالباً ما يكونو هم من يقدمون المنتج بأفضل سعر أيضاً).
كما نرى في الصورة السابقة أحد المتاجر الذي يقدم الـ Surface mount Resistor لديه عرض رائع بقيمة 6 دولار مقابل 2000 مقاومة بقيم مختلفة، لاحظ أنه في الجزء الاخير من الصفحة نجد أن البائع يدخل ضمن
Buyer Protection
Full Refund if you don’t receive your order
Refund or Keep items not as described
هذا يعني انه في حالة عدم استلام البضاعة او انها مختلفة عن المعروض يمكنك استرداد المال الذي دفعته، أيضاً لاحظ الجانب الايمن من الشاشة حيث نجد
السطر الثالث: عدد الزبائن الذين قامو بتقييم هذا المتجر 1170 شخص
السطر الرابع: مدى رضى الزبائن عن هذا المتجر والذي يبدو أنه مرضي للغاية ليحصل على 99.9% :)
ايضاً يوجد زر Visit Store لزيارة هذا المتجر وتصفح جميع المنتجات الذي يعرضها للبيع.
تتبع المنتج حتى يصل من الصين الى بلدك:
بعد البحث عن القطع اﻹلكترونية التي ترغب بها ومقارنة الاسعار قم بشراء القطع ويتم الدفع عبر ادخال رقم الفيزا او الماستر كارد حيث يتم خصم قيمة المال المطلوب مباشرة ويتم اعطائك كود خاص لتتبع هذه الشحنة. مثل الموجود في الصورة التالية:
كما نرى من الصورة أصبح لدينا رقم لتتبع الشحنة، بهذا الرقم يمكن معرفة مكان الطرد الذي يحتوي على ما طلبناة، ويمكن معرفة هذا المكان عبر الموقع التالي : من هنا
السلام عليكم و رحمة الله . اليوم بإذنه تبارك و تعالى نتمم في الجزء الرابع من دروس تعلم مبادئ الأردوينو ، وفي هذا الجزء سنتحذث عنكيف تطور أو تبرمج بيئة أردوينو على كالي لينكس ، يمكنك دائما الرجوع للأجزاء السابقة لمتابعتها وتعرف عن ماذا نتحدث ، إدن بدون أن أطيل عليكم أدعكم مع الفيديو الذي أتمنى أن ينال عجابكم . عزيزي الزائر إذا أعجبك الفيديو فلا تبخل علي بلايك له و أن تشترك معي في القناة الـــــشـــــرح