Saturday, February 21, 2015

How to send data from Arduino to Python

จากบทความที่แล้ว Arduino+MS Excel ที่ว่าผมมีความคิดอยากส่งข้อมูลไปให้ MS Excel ซึ่งทำไปแล้วเอาไปใช้งานให้เกิดประโยชน์มาแล้ว ถึงตอนนี้ผมเริ่มสนุกเลยคิดลองติดต่อผ่าน Python ดูบ้าง นี่เป็นครั้งแรกเลยแต่มาขอปักธงไว้ก่อน ทั้งนี้ไม่มีเหตุผลอื่นครับ แต่มันเป็นเพราะเป็นเรื่องใหม่สำหรับข้าพเจ้าอีกแล้ว (แต่อยากเล่นสนุกๆ) อย่างไรก็ดีผมจะเกาะติดตามคุณลุง Paul (ผมว่าแกเจ๋งดี) ในเวบนี้ครับ Technology tutorials    ผมยืม source code แกมาปรับนิดๆหน่อยๆ (แกคงไม่ทราบหรอก) ก็ใช้ได้เลยในการทดลองนี้ผมอ่านค่าจาก IR sensor ที่ขาอะนาลอก A0 ผลการทดลองมีหลักฐานดังภาพเลยครับ (ต้องขออภัยไม่สามารถลง source code ให้ได้เพราะพึ่งเริ่ม ถ้าผมเข้าใจอย่างดีแล้วจะนำมาลงและอธิบายในภานหน้า)
 


ส่วนบอร์ดผมใช้ Arduino Uno R3 และเซนเซอร์เป็นแบบสะท้อนครับ ดูจากรูปได้เลยครับ แต่นี่คือเริ่มต้นเท่านั้นครับ หลังจากบทความนี้ผมคงจะห่างหายไปสักระยะเพราะต้องไปฝึกใช้งานอย่างจริงจังก่อน


ขอขอบคุณ คุณลุง Paul (แกไม่รู้หรอก แต่จะเป็นครูออนไลน์ของผมแน่นอน)

http://www.toptechboy.com/using-python-with-arduino-lessons/

Tuesday, February 10, 2015

How to send data from Arduino to MS.Excel

           ผมไม่ค่อยคุ้นเคยกับการทำ data logger ไม่มีความรู้เลย ไม่มีเงินซื้อชอฟต์แวร์บางตัวที่มีลิขสิทธิ์ (ปัจจุบันใช้ชอฟต์แวร์ผ่านมหาวิทยาลัย) และมีความต้องจะเก็บข้อมูลจากบอร์ด Arduino UNO R3 (จริงๆ รุ่นไหนได้ทั้งนั้นขอให้สั่งมันเป็น) จึงตั้งคำถามกับตัวเองว่าจะส่งข้อมูลมาเขียนกราฟใน Excel ได้หรือไม่ ทำอย่างไร (ไม่รู้ทำไงครับ) เพราะส่วนตัวคิดว่าเครื่องคอมพิวเตอร์ที่ใช้ Windows ย่อมต้องมี Excel ติดไว้บ้างแน่นอนหากใช้โปรแกรมที่มีอยู่ในเครื่องอยู่แล้วน่าจะสะดวก ประหยัดเงิน จึงค้นหาจากพี่ google ปรากฎว่าชาวบ้านชาวเมืองเขาทำกันเยอะแยะครับ โปรแกรมหนึ่งที่น่าสนใจ มันทำหน้าที่เชื่อมต่อระหว่างบอร์ด Arduino กับ Computer เพื่อส่งข้อมูลไปยังโปรแกรม Excel โปรแกรมที่กล่าวถึงชื่อว่า PLX-DAQ เป็นของค่าย Parallax ก็ดาวโหลดมาแล้วติดตั้งใช้งานได้เลย (เครื่องที่ใช้เป็น Windows 7 (64-bit) MS2010 ) ผลการใช้งานดังรูปเลยครับ


การใช้งาน ต้องโปรแกรมลงในบอร์ด Arduino เพื่อสั่งให้ส่งข้อมูลผ่านโปรแกรม PLX-DAQ ก่อน โปรแกรมใช้งานที่ให้ผลลัพธ์ตามรูปด้านบนมีดังนี้

int x = 0;
int row = 0;

void setup() {
Serial.begin(128000); // opens serial port, sets data rate to 128000 bps
Serial.println("CLEARDATA");
Serial.println("LABEL,Time,Index,SensorValueA0,SensorValueA1,SensorValueA2,SensorValueA3");
}

void loop() {
  
  int sensorValue1 = analogRead(A0);
  int sensorValue2 = analogRead(A1);
  int sensorValue3 = analogRead(A2);
  int sensorValue4 = analogRead(A3);
  // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
  float voltage1 = sensorValue1 * (5.0 / 1023.0);
  float voltage2 = sensorValue2 * (5.0 / 1023.0);
  float voltage3 = sensorValue3 * (5.0 / 1023.0);
  float voltage4 = sensorValue4 * (5.0 / 1023.0);
  
  // print out the value you read:

row++;
x++;  

Serial.print("DATA,TIME");
Serial.print(","); Serial.print(x); 
Serial.print(","); Serial.print(voltage1);
Serial.print(","); Serial.print(voltage2);
Serial.print(","); Serial.print(voltage3);
Serial.print(","); Serial.println(voltage4);

delay(1000);
}

ส่วนรูปด้านล่างแสดงรูปวงจรอย่างง่ายอ่านค่า voltage จากวงจรแบ่งแรงดันสำหรับการทดสอบในครั้งนี้ 



อธิบายเพิ่มเติม ผมรับค่าจาก Analog A0-A3 ซึ่งเป็นค่าความต่างศักย์ไฟฟ้าคงที่ทั้งสี่ขาสัญญาณ ดังนั้นไม่ว่าจะมีเซนเซอร์กี่ตัวก็ตาม สามารถรับค่าและเก็บไว้ใน Excel ได้หมดเลย ข้อจำกัดการรับสัญญาณของ PLX-DAQ น่าจะอยู่ที่ 26 ช่องสัญญาณ

สุดท้ายผมขอขอบคุณผู้ร่วมงาน ที่ให้คำแนะนำ และได้คำตอบทุกครั้งไป (มิต้องเอ่ยนาม เพราะท่านทั้งหลายรู้ในใจแล้ว)

แหล่งอ้างอิง (อ่านและฟังไม่รู้เรื่องแต่ ดูวิธีและแกะโปรแกรมจากเขา)

- ดูจากวีดิโอ ที่นี่ https://www.youtube.com/watch?v=LIMyz2GBW28
- ตามจากวีดิโอด้านบนที่บอกไว้ http://www.gioblu.com/tutorials/programmazione/189-arduino-e-i-grafici-in-tempo-reale-su-excel