2016/12/07

好玩的簡易機器人

好玩的簡易機器人

 Robot SCRU-FE (2016/10/30)
來源:http://www.thingiverse.com/thing:780050 , 3D 組件
又是連續假期,找一個專案來做做,手邊剛好有的材料,半天就完成他。




















Arduino UNO 加控制板使用 Arduino MotorShield V1.0 板,由Adafruit下載 Motor Shield 函式程式,配合 Arduino IDE 1.0.4 版本,程式如下:


 
#include <Servo.h>
#include <AccelStepper.h>
#include <AFMotor.h>

Servo myservo;  // create servo object to control a servo
             
AF_DCMotor motor1(1, MOTOR12_64KHZ);
AF_DCMotor motor2(2, MOTOR12_64KHZ);


#define trigPin A0
#define echoPin A1

int pos = 0;    // variable to store the servo position
String result,StringR;

void setup()
{
   Serial.begin(9600);           // set up Serial library at 9600 bps
   StringR = String("R");
   pinMode(trigPin, OUTPUT);
   pinMode(echoPin, INPUT);
  
    Serial.println("Motor test!");
    motor1.setSpeed(200);
    motor2.setSpeed(200);
    motor1.run(RELEASE);      // stopped
    motor2.run(RELEASE);
  
    Serial.println("Servo test!");
    myservo.attach(10);  // attaches the servo on pin 10 to the servo object
    for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees
  {                                  // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees
  {                              
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
   myservo.write(90);
}


void loop()
{
  long distance;
  distance = getDist();
  if(distance < 60) {
    motor1.setSpeed(100);
    motor2.setSpeed(100);
  } else {
    motor1.setSpeed(200);
    motor2.setSpeed(200);
  }
  if (distance < 10) { 
    motor1.run(RELEASE);    
    motor2.run(RELEASE);
    delay(1000);
    motor1.run(BACKWARD);    
    motor2.run(BACKWARD);
    delay(500);
    motor1.run(RELEASE);     // the other way
    motor2.run(RELEASE);
    result = checkturnLR();
    if(StringR.equals(result))
    {
      motor1.run(FORWARD);     
      motor2.run(BACKWARD);
      delay(1000);
      motor1.run(FORWARD);     
      motor2.run(FORWARD);
    }
    else
    {
      motor1.run(BACKWARD);     
      motor2.run(FORWARD);
      delay(1000);
      motor1.run(FORWARD);     
      motor2.run(FORWARD);
    }
  }
  else {
    motor1.run(FORWARD);      // turn it on going forward
    motor2.run(FORWARD);
  }
  myservo.write(90);
}

String checkturnLR()
{
  long distanceR, distanceL;
  
  // check Right distance
  myservo.write(150);             
  delay(1000);                     
  distanceR = getDist();
 
  // check Left distance
  myservo.write(30);            
  delay(1000);                
  distanceL = getDist();
  myservo.write(90);
  if(distanceR > distanceL) {
    return "R";
  }
  else {
    return "L";
  }
}

long getDist()
{
  long duration, distance;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  return distance;
}


馬達接 MotorShield 的 M1, M2
伺服器接 MotorShield 的 Servo1 的引出座。
UltraSonic, Trig 接 MotorShield 的 A0 pin,Echo 接 A1 pin。另接 5VDC。
電池使用兩顆 18650 電池。
動作,前進,如距離接近60cm減速,10cm停車,倒退,左右測距,朝距離遠的方向轉向,前進,距離大於60cm加速。
簡單完成,好玩。
    
 

呼叫 Moom Base Alpha

Space 1999 影集中的 Eagle 太空船

因為有了一台可以印製較細緻的3D印表機,於是完成他。




2016/10/08

HyperCube 3D, CoreXY 3D 印表機

CoreXY 3D 印表機,一直都有製作一台的想法,也看了很多不同的架構及機型,原本有意做一台 ultimaker2,不過有些零件疑慮遲遲沒有開始。

上個月看到 http://www.thingiverse.com/thing:1752766 的製作,其中並無特別的零件需求,而且手邊還有一些可以用的,於是完成了這一台 HyperCube 3D 印表機,列印品質現在是我做的印表機中最優的。

 

與原作不同的地方為

1. X軸使用8mm光軸,並不是使用原作的10mm鋁合金管,因此改使用 LM8UU軸承,修改的X軸零件亦由 Thingiverse取得,連結如下:http://www.thingiverse.com/thing:1771522

2. Z軸步進馬達裝置於下方,固件沒有變更,使用原來的零件。

因為所使用的光軸是之前留下的零件,外框尺寸依光軸長計算得之,Z軸的螺桿定製一支350mm長的1mm導程螺桿,剛好夠用。

列印範圍: 200mm x 200mm x 180mm。
印表頭: E3D V6 0.3mm, 1.75mm材料。
給料器: Mini Extruders。
自動Z軸控制:電感式接近開關LJ12A3-4-Z/BX直流三線NPN常開傳感器。

Firmware:Marlin 1.1.0 RC7
啟用功能:CoreXY, LCD, SD card, AutoLeveling

一些應用是新的嘗試,XYZ軸調整時又重新學習了一些新的事務。

LJ12A3-4 規格為 直徑 12mm 感應距離約 4mm,LJ18A3-8 規格為 直徑 18mm 感應距離約 8mm,供電使用DC12V時,輸出腳要使用於Arduino 的輸入pin 需要外接一簡單電阻電路降低電壓。