กระทู้เมื่อเร็วๆ นี้

หน้า: 1 ... 7 8 [9] 10
81
รายการอุปกรณ์
web www.es.co.th
ลำดับที่รายการ   จำนวนตัว
10.1uF1
21N58171
3LED 3 mm1
4LTC-47271
5MINI-USB Connector1
6Female Header 1x141
7STEPPING-MOTOR-CON1
8I.C. SOCKET DIP 16 PINS1
9I.C. SOCKET DIP 18 PINS1
10Terminal Box2
11Switch Tact8
web www.arduinoall.com
ลำดับที่รายการ   จำนวนตัว
1Breadbroad 170hole1
2Buzzer1
3DHT111
4Female Header 1x101
5Female Header 1x152
6Female Header 1x161
7Female Header 1x212
8Female Header 1x35
9Female Header 1x44
10Female Header 1x4-902
11Female Header 1x51
12Female Header 1x82
13IC: DS18B201
14IC: L293D1
15IC: ULN28031
16LDR1
17LED-BAR 10  digit1
18NTC Thermistor 10k1
19Pin Header Connector 1x40 Black1
20Pin Header Connector 1x40 Red1
21POT-3386P 10k1
22POT-LCD 10k1
23Resistor 10k2
24Resistor 1k7
25Resistor 22022
26Resistor 4k72
27Resistor 6801
28TR: BC5475
โมดูลเพิ่มเติมตามใบงาน
1Arduino Nano1
27 segment 4 digit i2c1
37 segment 4 digit TM16371
47 segment 8 digit MAX72191
5DC motor1
6LCD 16char 2 Line1
7LCD 16char 2 Line i2c1
8OLED i2c1
9Stepper Motor 5V1
10Wire jumper แบบแยกเส้น1
11Wire jumper แบบแพ1
ตัวต้านทานที่ไม่สามารถสั่งผ่านเวปได้
1Resistor 820 1/4w1
2Resistor 22 2w1
3Resistor 2k7 1/4w1
รายการอุปกรณ์ร้าน arduinoall บางรายการมีจำนวนมากกว่า 1 ชิ้นต่อการซื้อ 1 ครั้งให้สังเกตุก่อนการกดซื้อ
82
IOT : Internet of Thing (ESP32) / Re: การเรียนรู้ครั้งที่ 7 [Basic ESP32] การใช้งาน DAC
« กระทู้ล่าสุด โดย admin เมื่อ กุมภาพันธ์ 06, 2019, 10:02:03 AM »
...
83
IOT : Internet of Thing (ESP32) / Re: การเรียนรู้ครั้งที่ 7 [Basic ESP32] การใช้งาน DAC
« กระทู้ล่าสุด โดย admin เมื่อ กุมภาพันธ์ 06, 2019, 10:01:51 AM »
...
84
IOT : Internet of Thing (ESP32) / Re: การเรียนรู้ครั้งที่ 7 [Basic ESP32] การใช้งาน DAC
« กระทู้ล่าสุด โดย admin เมื่อ กุมภาพันธ์ 06, 2019, 09:34:35 AM »
ตัวอย่างโปรแกรมสร้างสัญญาณ
1. โปรแกรมสร้างสัญญาณรูปคลื่นซายน์ โดยสร้างรูปคลื่นจากการเปลี่ยนแปลงค่าทุก ๆ 1 องศา ส่งสัญญาณออกทางขา 25 (DAC1)

โค้ด
โค๊ด: [Select]
#define DAC1 25
int sine[360];
void setup() {
  for (int deg = 0 ; deg < 360 ; deg++ ) {
    sine[deg] = int(128 + 127  * sin(deg * PI / 180));
  }
}
void loop() {
  for (int deg = 0 ; deg < 360 ; deg ++ ) {
    dacWrite(DAC1, sine[deg]);
  }
}

ผลการรันที่ได้


2. โปรแกรมสร้างสัญญาณรูปคลื่นซายน์ โดยสร้างรูปคลื่นจากการเปลี่ยนแปลงค่าทุก ๆ 5 องศา ส่งสัญญาณออกทางขา 25 (DAC1)

โค้ด
โค๊ด: [Select]
#define DAC1 25
int sine[360];
void setup() {
  for (int deg = 0 ; deg < 360 ; deg++ ) {
    sine[deg] = int(128 + 127  * sin(deg * PI / 180));
  }
}
void loop() {
  for (int deg = 0 ; deg < 360 ; deg +=5 ) {
    dacWrite(DAC1, sine[deg]);
  }
}

ผลการรันที่ได้


3. โปรแกรมสร้างสัญญาณรูปคลื่นซายน์ โดยสร้างรูปคลื่นจากการเปลี่ยนแปลงค่าทุก ๆ 10 องศา ส่งสัญญาณออกทางขา 25 (DAC1)

โค้ด
โค๊ด: [Select]
#define DAC1 25
int sine[360];
void setup() {
  for (int deg = 0 ; deg < 360 ; deg++ ) {
    sine[deg] = int(128 + 127  * sin(deg * PI / 180));
  }
}
void loop() {
  for (int deg = 0 ; deg < 360 ; deg +=10 ) {
    dacWrite(DAC1, sine[deg]);
  }
}

ผลการรันที่ได้


3. โปรแกรมสร้างสัญญาณรูปคลื่นซายน์และรูปคลื่นฟันเลื่อยโดยสร้างรูปคลื่นจากการเปลี่ยนแปลงค่าทุก ๆ 1 องศา ส่งสัญญาณออกทางขา 25 (DAC1) และขา 26 (DAC2)

โค้ด
โค๊ด: [Select]
#define DAC1 25
#define DAC2 26
int sine[360];
int sawtooth[360];
void setup() {
  for (int deg = 0 ; deg < 360 ; deg++ ) {
    //----------------------------Sine wave----------------
    sine[deg] = int(128 + 127  * sin(deg * PI / 180));
    //------------------Sawtooth---------------------------
    sawtooth[deg] = map(deg, 0, 360, 0, 255);
  }
}
void loop() {
  for (int deg = 0 ; deg < 360 ; deg ++ ) {
    dacWrite(DAC1, sine[deg]);
    dacWrite(DAC2, sawtooth[deg]);   
  }
}

ผลการรันที่ได้


85
IOT : Internet of Thing (ESP32) / Re: การเรียนรู้ครั้งที่ 7 [Basic ESP32] การใช้งาน DAC
« กระทู้ล่าสุด โดย admin เมื่อ กุมภาพันธ์ 06, 2019, 09:28:33 AM »

ฟังก์ชั่นที่ใช้งานในการทดลองนี้

รูปแบบ คำอธิบาย
dacWrite(pin, value); ฟังก์ชั่นส่งค่าแอนะล็อกที่เป็นแรงดันระหว่าง 0-3.3V
pin: หมายเลขขาที่ต้องการส่งค่าแอนะล็อกออก(25,26)
value: ค่าที่ต้องการส่งออก (0-255)
sin(value); ฟังก์ชั่นตรีโกณมิติที่คืนค่า sine จากมุมที่กำหนด
value:ค่ามุมเป็นเรเดียน
86
IOT : Internet of Thing (ESP32) / การเรียนรู้ครั้งที่ 7 [Basic ESP32] การใช้งาน DAC
« กระทู้ล่าสุด โดย admin เมื่อ กุมภาพันธ์ 06, 2019, 09:23:43 AM »
การเรียนรู้ครั้งที่ 7 [Basic ESP32] การใช้งาน DAC
    DAC (Digital to Analog Converter) เป็นวงจรที่มีหน้าที่แปลงสัญญาณดิจิทัลให้เป็นสัญญาณแอนะล็อก สัญญาณดิจิทัลจะมีเพียงแค่ 2 ระดับคือ 1 กับ 0 โดยที่ 1 ใช้แทนระดับของการมีแรงดัน(ใกล้เคียงแหล่งจ่าย) และ 0 ใช้แทนระดับแรงดัน 0 โวลต์(หรือใกล้เคียงกราวด์) ส่วนสัญญาณแอนะล็อกเป็นสัญญาณที่มีแรงดันที่มีค่าการเปลี่ยนแปลงแบบต่อเนื่องได้
    ESP32 มีวงจรแปลงสัญญาณอยู่ภายใน 2 วงจรโดยส่งออกภายนอกทางขา 25 และ 26 วงจร DAC ของ ESP32 เป็นขนาด 8 บิตทำให้การแปลงให้เป็นสัญญาณแอนะล็อกได้ทั้งหมด 256 ระดับตั้งแต่แรงดัน 0V จนถึงแรงดัน 3.3V (หรือใกล้เคียง)
หมายเหตุ
   ESP32 เป็นไมโครคอนโทรลเลอร์การแปลงค่าและส่งของขาพอร์ตแต่ละครั้งต้องใช้เวลาดำเนินการดังนั้นจึงต้องแลกมาระหว่างรูปคลื่นที่ต่อเนื่องหรือรูปคลื่นที่เป็นขั้นบันได ดังนี้
   -ถ้าต้องการรูปคลื่นต่อเนื่องต้องส่งค่าในทุก ๆ มุมที่ทำได้ส่งผลให้ได้ความถี่ต่ำ
   -ถ้าต้องการความถี่สูงต้องส่งค่าของรูปคลื่นในมุมที่ห่าง ๆ กันเพื่อให้ได้ครบ 1 ลูกคลื่นในเวลาอันสั้น


ตัวอย่างผลที่ได้จากการแปลงสัญญาณให้ได้รูปคลื่นซายน์โดยเปลี่ยนแปลงค่าทุก ๆ 5 องศา


ตัวอย่างผลที่ได้จากการแปลงสัญญาณให้ได้รูปคลื่นซายน์โดยเปลี่ยนแปลงค่าทุก ๆ 10 องศา


ตัวอย่างผลที่ได้จากการแปลงสัญญาณให้ได้รูปคลื่นซายน์โดยเปลี่ยนแปลงค่าทุก ๆ 15 องศา


ตัวอย่างผลที่ได้จากการแปลงสัญญาณให้ได้รูปคลื่นซายน์โดยเปลี่ยนแปลงค่าทุก ๆ 20 องศา


ตัวอย่างผลที่ได้จากการแปลงสัญญาณให้ได้รูปคลื่นซายน์โดยเปลี่ยนแปลงค่าทุก ๆ 30 องศา


ตำแหน่งขาของ ESP32 ที่ใช้งาน


วงจรที่ใช้ทดลอง
87
IOT : Internet of Thing (ESP32) / Re: xxx
« กระทู้ล่าสุด โดย admin เมื่อ มกราคม 27, 2019, 05:00:59 PM »
ตัวอย่าง โปรแกรมอ่านค่าแอนะล็อกพื้นฐาน
   โปรแกรมอ่านค่าสัญญาณแอนะล็อกพื้นฐาน สามารถอ่านได้โดยใช้ฟังก์ชั่น analogRead จากตัวอย่างโปรแกรมเป็นการอ่านจากขา A0 ดังรูป

โค้ด
โค๊ด: [Select]
void setup() {
  Serial.begin(9600);
}
void loop() {
  int adc=analogRead(A0);
  Serial.printf("Value of ADC from A0 :%u \n",adc);
  delay(500);
}
ตัวอย่าง โปรแกรมอ่านค่าแอนะล็อกแบบใช้ฟังก์ชั่นลดทอน
   การอ่านค่าสัญญาณแอนะล็อกแบบต้องการใช้ฟังก์ชั่นลดทอนสามารถทำได้โดย
-เพิ่มไลบรารี่ #include <driver/adc.h>
-ประกาศฟังก์ชั่นลดทอนสัญญาณก่อนคำสั่งอ่านค่าสัญญาณ

ตัวอย่าง โปรแกรมอ่านค่าสัญญาณแอนาล็อกแบบใช้การลดทอน การใช้งานจะต้องประกาศการลดทอนก่อนการอ่านค่าดังรูป

โค้ด
โค๊ด: [Select]
#include <driver/adc.h>
void setup() {
  Serial.begin(9600);     
}
void loop() {
  adc2_config_channel_atten(ADC2_CHANNEL_0,ADC_ATTEN_6db); 
  int adc=analogRead(A10);
  Serial.printf("Value of ADC from A10 :%u \n",adc);
  delay(500);
}
ตัวอย่าง โปรแกรมอ่านค่าสัญญาณแอนาล็อกแบบใช้การลดทอนหลายค่า และอ่านค่าจากช่องสัญญาณช่องเดียวดังรูป

โค้ด
โค๊ด: [Select]
#include <driver/adc.h>
void setup() {
  Serial.begin(9600);     
}
void loop() {
  adc2_config_channel_atten(ADC2_CHANNEL_0,ADC_ATTEN_0db); 
  int adc1=analogRead(A10);
  adc2_config_channel_atten(ADC2_CHANNEL_0,ADC_ATTEN_2_5db); 
  int adc2=analogRead(A10);
  adc2_config_channel_atten(ADC2_CHANNEL_0,ADC_ATTEN_6db); 
  int adc3=analogRead(A10);
  adc2_config_channel_atten(ADC2_CHANNEL_0,ADC_ATTEN_11db); 
  int adc4=analogRead(A10);
  Serial.printf("[0dB:%u][2.5dB:%u][6dB:%u][11dB:%u]\n",adc1,adc2,adc3,adc4);
  delay(500);
}

ตัวอย่าง โปรแกรมอ่านค่าแอนะล็อกควบคุม LED(พื้นฐาน)
   การอ่านค่าสัญญาณแอนะล็อกแล้วนำค่าที่อ่านได้ควบคุมการติดดับของ LED (เขียนแบบวนอ่านค่าสัญญาณ)  จากตัวอย่างโปรแกรมเป็นการอ่านจากขา A0

โค้ด
โค๊ด: [Select]
#define LED1 27
#define LED2 14
#define LED3 12
#define LED4 13
void setup() {
  Serial.begin(9600);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
}
void loop() {
  int adc = analogRead(A0);
  Serial.printf("Value of ADC from A0 :%u \n", adc);
  digitalWrite(LED1, adc>3500 ? 1 : 0);
  digitalWrite(LED2, adc>2500 ? 1 : 0);
  digitalWrite(LED3, adc>1500 ? 1 : 0);
  digitalWrite(LED4, adc>500 ? 1 : 0);
  delay(500);
}

ตัวอย่าง โปรแกรมอ่านค่าแอนะล็อกควบคุม LED(ใช้ไลบรารี่ simpleTimer)
   การอ่านค่าสัญญาณแอนะล็อกแล้วนำค่าที่อ่านได้ควบคุมการติดดับของ LED เป็นโปรแกรมที่ไม่วนอ่านค่าแต่ใช้ไลบรารี่ simpleTimer กำหนดคาบเวลาให้ไปอ่านค่ามาแทน จากตัวอย่างโปรแกรมเป็นการอ่านจากขา A0

โค้ด
โค๊ด: [Select]
#include <SimpleTimer.h>
const byte ledPin[] = {27, 14, 12, 13};
SimpleTimer timer;
int adc;
void readADC() {
  adc = analogRead(A0);
  Serial.printf("Value of ADC from A0 :%u \n", adc);
}
void setup() {
  Serial.begin(9600);
  for (byte i = 0; i < (sizeof(ledPin) / sizeof(byte)); i++)
    pinMode(ledPin[i], OUTPUT);
  timer.setInterval(1000, readADC);
}
void loop() {
  timer.run();
  digitalWrite(ledPin[0], adc > 3500 ? 1 : 0);
  digitalWrite(ledPin[1], adc > 2500 ? 1 : 0);
  digitalWrite(ledPin[2], adc > 1500 ? 1 : 0);
  digitalWrite(ledPin[3], adc > 500 ? 1 : 0);
  delay(50);
}
88
IOT : Internet of Thing (ESP32) / Re: xxx
« กระทู้ล่าสุด โดย admin เมื่อ มกราคม 27, 2019, 04:08:45 PM »

ฟังก์ชั่นที่ใช้งานในการทดลองนี้

รูปแบบ คำอธิบาย
pinMode(pin, mode); pin: หมายเลขขาที่ต้องการเซตโหมด
mode: INPUT, OUTPUT, INPUT_PULLUP
digitalWrite(pin,value); pin: หมายเลข ขาที่ต้องการเขียนลอจิกออกพอร์ต
value: ค่าลอจิกที่ต้องการส่งออก HIGH or LOW
analogRead(pin); pin: หมายเลขขาที่ต้องการอ่านสัญญาณแอนนะล็อกเช่น A0, A2, A10,...
delay(ms); ms: ตัวเลขที่หยุดค้างของเวลาหน่วยมิลลิวินาที (unsigned long)

รูปแบบ คำอธิบาย
SimpleTimer object; ประกาศเริ่มใช้งานไลบรารี่ SimpleTimer
ตัวอย่าง ต้องการประกาศใช้งานในออปเจคชื่อว่า timer
SimpleTimer timer;
.setInterval(interval_time, func); ฟังก์ชั่นตั้งค่า (วางไว้ใน void setup())
ตั้งค่าคาบเวลาและฟังก์ชั่นที่ต้องการให้ไปทำงานเมื่อครบเวลา
interval_time= ค่าคาบเวลาหน่วยเป็นมิลลิวินาที
func=ชื่อฟังก์ชั่นที่ต้องการให้ไปทำงานเมื่อครบคาบเวลา
.run(); ฟังก์ชั่นให้ไลบรารี่ทำงาน (วางไว้ใน void loop())
ตัวอย่าง ตั้งชื่อออปเจคว่า timer การใช้งานจะประกาศว่า
timer.run();
หมายเหตุ
   1. หมายเลข pin สามารถใช้ตัวเลข GPIO ได้โดยตรง
   2. ขาพอร์ต GPIO34, GPIO35, GPIO36, GPIO39 ใช้งานได้เฉพาะอินพุทเท่านั้น
89
การใช้งาน ADC และการใช้งานไลบรารี่ simpleTimer
   ADC ( analog-to-digital converter) เป็นวงจรแปลงสัญญาณแอนะล็อกเป็นสัญญาณดิจัทัล ESP32 มีขาพอร์ตที่สามารถรับสัญญาณที่เป็นแอนะล็อกได้หลายช่อง (ในขณะที่รับสัญญาณแอนะล็อกจะไม่สามารถใช้งานเป็นพอร์ตปกติได้) วงจร ADC เป็นวงจรขนาด 12 บิตซึ่งจะให้ค่าหลังการแปลงระหว่าง 0-4095 (สามารถกำหนดค่าจำนวนบิตได้ตั้งแต่ 9-12 บิต หากผู้ใช้งานต้องการ)
   การใช้งานไลบรารี่ simpleTimer เป็นเครื่องมือช่วยให้เขียนโปรแกรมที่มีการวนทำงานในเวลาที่แน่นอนสะดวกขึ้นโดยไม่ต้องเขียนโปรแกรมวนทำงานในฟังก์ชั่น void loop()

วงจรที่ใช้ทดลอง


ขาพอร์ต ADC ที่มีใช้งาน


การใช้ฟังก์ชั่นลดทอนสัญญาณ
   ค่าปกติของ ADC เมื่ออ่านค่าที่มีแรงดันประมาณไฟเลี้ยงของวงจรจะได้ค่าการแปลงอยู่ที่ 4096 แต่ผู้ใช้งานสามารถกำหนดการลดทอนสัญญาณได้ 4 ระดับดังรูป

https://espressif-docs.readthedocs-hosted.com/projects/esp-idf/en/v2.1.1/api-reference/peripherals/adc.html

ความเป็นเชิงเส้นของการแปลงในการลดทอนค่าต่าง ๆ

https://www.researchgate.net/figure/ADC-linearity-test-at-12-bit-resolution_fig4_320273388

ตัวอย่างฟังก์ชั่นการใช้งานลดทอนสัญญาณในระดับต่าง ๆ
โค๊ด: [Select]
adc1_config_channel_atten(ADC1_CHANNEL_0,ADC_ATTEN_0db);
adc1_config_channel_atten(ADC1_CHANNEL_0,ADC_ATTEN_2_5db);
adc1_config_channel_atten(ADC1_CHANNEL_0,ADC_ATTEN_6db);
adc1_config_channel_atten(ADC1_CHANNEL_0,ADC_ATTEN_11db);
วงจร ADC
   วงจรแปลงสัญญาณแอนาล็อกมี 2 วงจรแต่ละวงจรก็มีหลายช่องสัญญาณ การกำหนดชื่อขาพอร์ดกับวงจรแปลงสัญญาณเป็นดังรูป   


การใช้งานไลบรารี่ SimpleTimer
   การเขียนโค้ดในหลายกรณีจำเป็นต้องมีการวนไปทำงานตามคาบเวลาที่เหมาะสมอยู่เรื่อย ๆ การเขียนไว้ใน void loop() จะทำให้คาบเวลาในการวนทำงานไม่แน่นอนและทำให้ดูโปรแกรมรก ๆ ไลบรารี่ simpleTimer นี้เป็นทางออกที่ดีโดยสามารถคาบเวลาที่ต้องการให้วนไปทำงานฟังก์ชั่นที่ต้องการได้ค่อนข้างเที่ยงตรงและสะดวกในการใช้งาน ขั้นตอนมีดังนี้

1. ดาวน์โหลดไลบรารี่โดยเข้าไปที่เวปไซต์ https://github.com/jfturcot/SimpleTimer คลิกดาวน์โหลด


2. ทำการติดตั้งไลบรารี่ที่ดาวน์โหลดมา ดำเนินการดังรูป


3. การใช้งานไลบรารี่ ตัวอย่างต้องการให้ทำงานฟังก์ชั่น ReadADC ทุก ๆ 2 วินาที
   (1) เพิ่มไลบรารี่ simpleTimer ลงในโปรแกรม
   (2) ประกาศใช้งานไลบรารี่โดยใช้ชื่อออปเจค (ตัวอย่างนี้ใช้ชื่อว่า timer)
   (3) ฟังก์ชั่นย่อยที่ต้องการให้ทำงาน (ชื่อเดียวกับที่ตั้งค่าไว้)
   (4) ตั้งค่าคาบเวลาและฟังก์ชั่นย่อยที่ต้องการทำงานเมื่อครบเวลาที่กำหนด (ตั้งค่าใน setup)
   (5) ฟังก์ชั่นเริ่มทำงานซึ่งต้องวางไว้ใน loop()

หน้า: 1 ... 7 8 [9] 10