2016年6月30日 星期四

使用easy driver驅動步進馬達


步進馬達的接線顏色可以辨別順序,以常見的6線式步進馬達為例,其引出線包含兩條棕色線為共同點;藍色線和黃色線為同一組線圈;白色線和紅色線為同一組線圈。


我們這個實驗是使用easy driver來驅動步進馬達,easy driver需要外接電源,它可以直接與步進馬達的4條線圈引線(A線圈和B線圈)連線,並且利用輸入時脈來精確的控制步進馬達的轉動。



l  基本實驗

圖片來源: www.elecrow.com



接成電路:
1. STEP 接到Arduino的PIN 9 
2. DIR 接到Arduino的PIN 8 (控制旋轉方向)




void setup() {               
  pinMode(8, OUTPUT);    
  pinMode(9, OUTPUT);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
}

void loop() {
  digitalWrite(9, HIGH);
  delay(3);         
  digitalWrite(9, LOW);
  delay(3);         
}



l  利用開關控制正反轉
圖片摘自 http://www.schmalzhaus.com/EasyDriver/Examples/EasyDriverExamples.html


1. 開關被按下和放開時,步進馬達的旋轉方向相反。

void setup() {               
  pinMode(8, OUTPUT);    
  pinMode(9, OUTPUT);
  pinMode(3,INPUT);
 
  digitalWrite(9, LOW);
}

void loop() {
 if (digitalRead(3)==LOW)
  { digitalWrite(8, HIGH);}
 else
  { digitalWrite(8, LOW);}

  digitalWrite(9, HIGH);
  delay(3);         
  digitalWrite(9, LOW);
  delay(3);      
  }



l  同時控制兩個步進馬達



void setup() {              
  pinMode(8, OUTPUT);   
  pinMode(9, OUTPUT);
  pinMode(6, OUTPUT);   
  pinMode(7, OUTPUT);
}

void loop()
{
  digitalWrite(8, HIGH);
  digitalWrite(6, HIGH);
  for (int i=0;i<1600;i++)
  {
    digitalWrite(9, HIGH);
    digitalWrite(7, HIGH);    
    delayMicroseconds(2000);
    digitalWrite(9, LOW);
    digitalWrite(7, LOW);   
    delayMicroseconds(2000);
  }
 
  digitalWrite(8, LOW);
  digitalWrite(6, LOW);
  for (int i=0;i<1600;i++)
  {
    digitalWrite(9, HIGH);
    digitalWrite(7, HIGH);    
    delayMicroseconds(2000);
    digitalWrite(9, LOW);
    digitalWrite(7, LOW);    
    delayMicroseconds(2000);
  }     
}








2016年6月13日 星期一

Joy Stick XY搖桿模組操作

Joy Stick XY搖桿模組上頭已標示出 XY 正值方向,你可以使用 模組上的「搖桿」方塊來操作它。

在實際測試之下, X 電壓值從最左的位置最小值0到最右端的位置為最大值1023Y 電壓值在往上推到底時為最小值0往下推到底則為最大值1023隨著搖桿的方向不同,X,Y軸的電阻值隨之變化,得到不同的輸出組合。

向下按搖桿,可以觸動一個開關,數位輸出1





JoyStick_X接到A0腳位
JoyStick_Y接到A1腳位
JoyStick_Z 接到A2腳位
再接妥正負電源即可



int JoyStick_X = A0;
int JoyStick_Y = A1;
int JoyStick_Z = A2; 
void setup()
{
  pinMode(JoyStick_X, INPUT);
  pinMode(JoyStick_Y, INPUT);
  pinMode(JoyStick_Z, INPUT);
  Serial.begin(9600);
}
void loop() {
  int x,y,z;
  x=analogRead(JoyStick_X);
  y=analogRead(JoyStick_Y);
  z=digitalRead(JoyStick_Z);
  Serial.print(x ,DEC);
  Serial.print(",");
  Serial.print(y ,DEC);
  Serial.print(",");
  Serial.println(z ,DEC);
  delay(100);
}



燭火搖曳

利用亂數和PWM來產生類似燭火搖的效果

  analogWrite(9,random(120)+135);
  analogWrite(10,random(120)+135);
  analogWrite(11,random(120)+135);


2016年6月9日 星期四

利用光敏電阻感測外部光線亮度

1. 材料:光敏電阻(light dependent resistor), 10K電阻, LED



2. 光敏電阻在沒有照光時,其電阻值約數百K歐姆,但是照光後電阻值會減少,最小可達幾百歐姆。因此,可以使用光敏電阻設計測試光強度的電路如下:


3. Arduino上接妥電路:



範例:小夜燈程式。
功能說明:光線暗,則LED點亮;光線亮,則LED熄滅。
int value;

void setup()
{
  pinMode(13, OUTPUT);  //設定 Pin 13 LED 輸出
}

void loop()
{
  value=analogRead(A0);
  if  (value > 400)
  {
    digitalWrite(13, HIGH);  //LED燈開啟
  }
  else
  {
    digitalWrite(13, LOW);  //LED燈關閉
  }
}





範例:利用光線強度控制LED亮滅速度。
功能說明:外部光線控制亮滅時間, 光度越強, 閃爍越快
int value;

void setup()
{
  pinMode(13, OUTPUT);  //設定 Pin 13 LED 輸出
}

void loop()
{
  value=analogRead(A0);
  digitalWrite(13, HIGH);  //用量測值控制亮滅時間, 光度越強, 閃爍越快
  delay(value);
  digitalWrite(13, LOW);
  delay(value);
}

影片:



範例:光線的亮度資料顯示在Arduino 軟體的監控視窗中:
int value;

void setup()
{
  pinMode(13, OUTPUT);  //設定 Pin 13 LED 輸出
  Serial.begin(9600);
}

void loop()
{
  value=analogRead(A0);  //光線強,阻值低,輸入電壓小
  Serial.print("light  intensity is: ");
  Serial.println(1023-value);
 
  digitalWrite(13, HIGH);  //用量測值控制亮滅時間, 光度越強, 閃爍越快
  delay(value);
  digitalWrite(13, LOW);
  delay(value);
}



經由序列監控視窗顯示Arduino的資料

我們也可以使用Arduino序列埠來跟電腦交換資訊,通常我們會設定9600 bpsArduino與電腦交換資訊的速率(鮑率)函數如下:

Serial.begin(9600)


Arduino經序列埠傳送資料的輸出函數有Serial.printSerial.printIn兩個函數,利用這些函數可將資料顯示在Arduino 軟體的監控視窗中;這兩個函數的差別在於Serial.printInSerial.print多了換行的功能,意思如同你在鍵盤上打了一些資料後按下Enter

int r=0;
void setup()
{
  Serial.begin(9600);  //指定Arduino 從電腦交換資訊的速率
}

void loop()
{
  Serial.print("Random number between 0 and 1023 is: ");
  r = random(0, 1023);  //產生01023之間的亂數
  Serial.println(r);
 
  Serial.print("Random number between 1 and 255 is: ");
  r = random(1, 255);  //產生1255之間的亂數
  Serial.println(r);
 
  delay(1000);
}


1. 打開Arduino 軟體,載入程式碼後,執行程式上傳,並打開監控螢幕(Serial Monitor)(選擇 [工具]/ [序列埠監控視窗] 便可開啟監控視窗。)

2. 監控視窗顯示的結果:

NUMPY的Array介紹與Matplotlib的繪圖功能

NumPy 的 Array 介紹與 Matplotlib 的繪圖功能   1. A rray 的基本運算 :   適用於科學和數學運算的 NumPy 套件中,有一個 Array 的資料結構。 Array 是一個非常類似 list 的序列型態。 但是 Arr...