How to plot graph in real time by Matlab & Arduino

  • 5 Replies
  • 2726 Views
*

Offline anoney_potter

  • **
  • 30
  • Thai Embedded System and Robotics
    • View Profile
    • ThaiEmbeddedSystems
How to plot graph in real time by Matlab & Arduino
« on: October 21, 2014, 02:36:32 am »
How to plot graph in real time by Matlab & Arduino


http://www.youtube.com/watch?v=Tm3g1bZi7To

Thai Embedded System and Robotics รับออกแบบระบบและให้คำปรึกษาด้่าน Embedded System , PCB Design , Microcontroller , FPGA , GUI ,Hardware 3D Product Design and Solution

*

Offline tha

  • *****
  • 1073
    • View Profile
Re: How to plot graph in real time by Matlab & Arduino
« Reply #1 on: October 23, 2014, 01:02:05 pm »
กำลังอยากศึกษา mathlab พอดี  :)

*

Offline JMew

  • ***
  • 180
  • เจ๊มารอค่ะ
    • View Profile
Re: How to plot graph in real time by Matlab & Arduino
« Reply #2 on: October 29, 2014, 02:49:04 am »
1. Arduino UNO run ที่ 16MHz ใช้ Baud 115200 มี UBRR 8 คิดเป็น 3.7% of error transfer ค่ะ
2. code ไม่ optimize ค่ะ กล่าวคือ ยังส่งเป็น ASCII หลายไบต์อยู่ การส่งตัวเลข ยังส่งเป็น "1023" แบบนี้อยู่ แทนที่จะส่งเป็น 0x03FF แบบนี้ค่ะ

สมมติมี 6 Channel พร้อมกัน ถ้าส่ง "768,232,1023,240,124,59,*" แบบนี้ มันก็หลายไบต์ใช่ไหมคะ ทั้งหมดก็ 25 ไบต์ ซึ่งถ้าตัวเลขเปลี่ยนไปอีก จำนวนไบต์ในแต่ละ transaction ก็จะไม่เท่ากัน สุดท้ายมาเราก็จะคำนวณ transfer rate ไม่ได้ เพราะแต่ละ transaction น้องไม่รู้ว่ามันยาวเท่าไร แต่ละครั้งส่งไม่คงที่ด้วย และเปลือง serial bandwidth

สมมติการแปลง ADC 1 ครั้ง ใช้ 13 clock cycle น้องจะ sampling ได้สูงสุดเท่าไร และมาเสียเวลาส่งกับ ASCII ที่มีความยาวในแต่ละ transaction ที่ไม่เท่ากัน อีกเท่าไร 

แต่ถ้าน้อง optimize ให้เป็น 2byte หมดทั้ง 6 channel ต่อการส่งหนึ่งครั้ง ไม่ว่าข้อมูลจะเป็นอย่างไรก็ตาม ส่งตามแบบแผนนี้

มีตัวเปิดคือ 0x20 ตามด้วยสัญญาณของ channel ต่าง ๆ ช่องละ 2 ไบต์ รวม 6 ช่อง 12 ไบต์ และตัวปิดคือ 0x13 ในหนึ่งครั้งของการส่ง จะใช้ 16 byte คงที่
เมื่อคำนวณ serial transfer แบบ 115200,none parity, 8 data bit, 1 stop bit ต่อการส่ง 1 byte จะได้

start 1 bit ตามด้วย data อีก 8 แล้วตามด้วย stop 1 bit สิริรวมแล้ว ส่ง 1 byte ใช้ 10 bit

เราใช้ baud ที่ 115200 ดังนั้น จะมี transfer rate ที่ 11520  byte ต่อวินาที

เราส่ง 16 byte ต่อครั้ง ดังนั้น PC จะรับข้อมูลได้ 720 ครั้งต่อวินาที (ถ้าคุณน้องใช้ 1 Channel ความเร็วก็เพิ่มขึ้นเป็นหกเท่า เพราะไบต์ที่ส่งต่อครั้งสั้นลง)

แต่ถ้าลด resolution ของ ADC ลงมาเหลือ 8 bit แล้วอ่านค่าที่ละไบต์มา  plot  ความเร็วจะอยู่ที่ 11.52k ต่อวินาที นั่นหมายความว่า น้องจะพลอตสเปกตรัมของเสียงได้ !!!! เอ้ย กะเทยโกหกหรือเปล่า โกหกไม่โกหกก็ลองดูนะคะ เอา Matlab plot spectrum ของ wave โดยใช้ Arduino รับค่าจากไมโครโฟนผ่าน preamp แล้วส่งออกที่ 115200 baud ทีละไบต์มาพลอต ที่ resolution 8 bit โดยไม่ต้องมีตัวเปิดและตัวปิด

สิ่งเหล่านี้สำคัญ เป็นพื้นฐานการสอนระเบียบวิธีการสื่อสารอย่างเป็นระบบ มีความแน่นอน อ้างอิงและคำนวณได้ มีหลักการอธิบายชัดเจน
พี่อยู่ได้อีกไม่นานก็จะตายห่าแล้ว ฝากเด็ก ๆ รุ่นหลังไว้ด้วยค่ะ
   
โครงการกะเทยท่องโลก

Re: How to plot graph in real time by Matlab & Arduino
« Reply #3 on: October 29, 2014, 02:56:06 pm »
กระจ่างเลยเรา.....ขอเข้ามาอ่านด้วยครับ...

Re: How to plot graph in real time by Matlab & Arduino
« Reply #4 on: October 29, 2014, 03:21:04 pm »
ขอบคุณข้อมูลจากเจ๊มิว  ;D

รับทำ PCB ออกแบบและพัฒนา วงจรอิเล็กทรอนิกส์ ไมโครคอนโทรลเลอร์ ระบบ Internet of Things (IoT)
ติดต่อได้ที่ https://www.facebook.com/micro4you หรือแอด Line ID: https://line.me/R/ti/p/%40micro4you

หรือดูรายละเอียดที่ https://www.electoday.com/index.php/topic,17.0.html

Re: How to plot graph in real time by Matlab & Arduino
« Reply #5 on: December 27, 2014, 10:43:00 am »
ขอบคุณค้าบ