Internet of Things: Grabber Robot | Internet of Things: หุ่นยนต์มือจับจากชิ้นงานพิมพ์ 3 มิติ

มีการนำเทคโนโลยีการพิมพ์ 3 มิติ มาใช้ในการขึ้นต้นแบบอย่างแพร่หลาย เพราะเราสามารถปรับแต่งโมเดล 3 มิติให้เข้ากับอุปกรณ์ต่าง ๆ ที่เรามีได้ เช่นการทำแขนหุ่นยนต์เราจะต้องออกแบบให้ตัวโมเดลมีขนาดที่พอดีกับมอเตอร์ที่จะต้องใช้ เป็นต้น

ในตอนนี้เราจะนำ 3D Printing มาต่อยอดโดยใช้ร่วมกับ Intel Galileo เพื่อสร้างแขนหุ่นยนต์ที่สามารถควบคุมผ่านอินเทอร์เน็ตได้

อุปกรณ์ที่ใช้

● Intel Galileo
● มอเตอร์ Servo
● แขนหุ่นยนต์ จากการพิมพ์ 3 มิติ (http://www.thingiverse.com/thing:410488)

เริ่มจากเปิด Project intel/smartliving_intel_mraa_example/smartliving_intel_mraa_example.xdk ด้วย Intel XDK IoT Edition

ใส่โค้ด Device ID, Client ID และ Device Key ในไฟล์ credentials.json

จากนั้นให้แก้ไขโค้ดใน main.js เพื่อให้รองรับการทำงานของ Servo Motor ที่จะใช้ขยับแขนหุ่นยนต์


var smartliving = require('smartliving');
var mraa = require('mraa'); //Wrapper for GPIO Pins

var d4 = new mraa.Gpio(4); //LED hooked up to digital pin 4 `
var pwm1 = new mraa.Pwm(3); //Servo 1 at digital pin 3 (pwm)
var pwm2 = new mraa.Pwm(5); //Servo 2 at digital pin 5 (pwm_)

var PWM_period_us = 20000;
var Min_Duty_Cycle = 0.029;
var Max_Duty_Cycle = 0.087;
pwm1.enable(false);
pwm1.period_us(PWM_period_us);
pwm1.enable(true);
pwm2.enable(false);
pwm2.period_us(PWM_period_us);
pwm2.enable(true);

function MapRange (in_vaule, in_min, in_max, out_min, out_max) {
   var output = (in_vaule - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
   if (output >= out_max) {
       output = out_max;
   } else {
       if (output <= out_min) {
           output = out_min;
       }
   }
   return output
}

function moveArm() {
 var pwm1Value = 1000;
 var pwm2Value = 1000;

  pwm1Value = MapRange(pwm1Value,0,1000,Min_Duty_Cycle,Max_Duty_Cycle);
 pwm2Value = MapRange(pwm2Value,0,1000,Min_Duty_Cycle,Max_Duty_Cycle);
 pwm1.write(pwm1Value); //Write duty cycle value.
 pwm2.write(pwm2Value); //Write duty cycle value.
}

function moveArmBack() {
 pwm1.write(Min_Duty_Cycle);
 pwm2.write(Min_Duty_Cycle);
}

d4.dir(mraa.DIR_OUT); //set the gpio direction to output

smartliving.credentials = require('./credentials');

// Set up the LED Actuators
smartliving.addAsset(
 "4",
 "Arm Active LED",
 "ไฟสว่างขณะขยับแขนหุ่นยนต์",
 
"bool",
 function(){
     console.log("Arm Active LED enrolled")
 },

  function(command) {
     if(command=="true"){
       d4.write(1);
       moveArm();
     } else {
       d4.write(0);
       moveArmBack();
     }
   });

smartliving.connect();


หลังจากนั้นให้ Upload, Build และ Run

จากนั้น ให้เราต่อวงจร โดยต่อ Servo สองตัวเข้ากับ Digital Pin 3 และ Digital Pin 5 และต่อ LED กับ Digital Pin 4 เพื่อแสดงสถานะการทำงานของ Servo

ตัวแขนหุ่นยนต์ เราจะใช้โมเดล 3 มิติที่ออกแบบมา โดยใช้ Servo 2 ตัว สามารถ Download ได้ตามเว็บนี้ http://www.thingiverse.com/thing:410488

เสร็จแล้วให้ใช้ SmartLiving Widget ที่เป็นปุ่ม http://widget.smartliving.io/button/ ให้เซ็ตค่า Id ต่างๆ ให้เรียบร้อย

เมื่อ Create widget แล้วลองกดปุ่ม จะพบว่าแขนหุ่นยนต์จะขยับ และเมื่อปล่อยปุ่ม แขนจะขยับกลับไปที่เดิม

เราสามารถต่อยอดโปรแกรมด้วยการแก้ไขโค้ดใน Function moveArm สำหรับการขยับแขน และ moveArmBack สำหรับการตั้งค่าเริ่มต้นของแขนหุ่นยนต์

และสามารถปรับมุมของแขนหุ่นยนต์ได้ด้วยการแก้ไขเลขของตัวแปร var pwm1Value และ var pwm2Value 

เขียนโดย นายมนัสศานติ์ มนูญชัย
ผู้ร่วมก่อตั้ง Maker Zoo