การส่งค่า Analog จาก ADC ด้วย std_msgs/UInt16

ในบทนี้จะมาเรียนรู้วิธีการส่งและรับข้อความชนิดต่างๆในบอร์ดอาดูโน่

เริ่มจากโค้ดตัวอย่างนี้ จะทำการอ่านค่าอนาลอคจากขาพิน A0 ที่บอร์ดอาดูโน่ แล้วทำการเฉลี่ยเล็กน้อย จากนั้นจึงส่งผ่าน Topic ไปยัง rosserial


#include <Arduino.h>
#include <ros.h>
#include <std_msgs/UInt16.h>

ros::NodeHandle nh;

std_msgs::UInt16 adc_msg;
ros::Publisher p("adc", &adc_msg);

void setup()
{
nh.initNode();
nh.advertise(p);
}

//We average the analog reading to elminate some of the noise
int averageAnalog(int pin){
int v=0;
for(int i=0; i<4; i++) v+= analogRead(pin);
return v/4;
}

void loop()
{
adc_msg.data = averageAnalog(A0);
p.publish(&adc_msg);
nh.spinOnce();
delay(10);
}


ให้อัพโหลดโค้ดนี้ลงบอร์ดอาดูโน่ตามปกติ แล้วหลังจากนั้นก็รันคำสั่งเหมือนเดิม

$ roscore
$ rosrun rosserial_python serial_node.py /dev/ttyACM0


จากนั้นเปิด Terminal ขึ้นมา โดยเราสามารถเช็ค Topic ว่ามีอะไรบ้างและดูค่าได้โดยการใช้คำสั่ง

$ rostopic list
$ rostopic echo /adc

เราจะเห็นค่าอนาลอคที่บอร์ดอาดูโน่ส่งมาให้ ในที่นี้ผมต่อขาพิน A0 เข้ากับขาไฟ 3.3V จึงได้ค่าที่เห็น เราสามารถ Plot ดูค่าได้โดยใช้คำสั่ง

$ rqt_plot

และตรงช่อง Topic ให้ใส่ชื่อ Topic ลงไป /adc แล้วกดปุ่มเครื่องหมาย + สีเขียวๆ เราก็จะเห็นค่าของเราวิ่งๆ

เราสามารถปรับช่วงได้โดยกดปุ่มที่เป็นรูปกราฟลูกศรพุ่งขึ้น ใกล้ๆกับปุ่มรูปแผ่นดิส แล้วใส่ตรงแกน Y เป็นช่วงที่เราต้องการ

ตัวอย่างการอ่านค่าอนาลอคจากบอร์ด Arduino และส่งผ่าน rosserial ไปยังคอมพิวเตอร์ โดยใช้ std_msgs/UInt16
Views
61 Total Views
1 Members Views
60 Public Views
Actions
0 Likes
0 Dislikes
0 Comments
Share on Social Networks
Share Link
Use permanent link to share in social media
Share by mail

Please login to share this webpage by email.