Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 5970|回復: 18
打印 上一主題 下一主題

arduino 步進馬達問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2016-4-28 10:03:39 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
我現在要透過APP來控制步進馬達但是他不會一直持續的動作
我按一下它才會動一下
我要如何可以按著按鈕讓馬達持續的動?

這是我的arduino程式

#include <Stepper.h>  
Stepper stepper(200, 13, 12, 11, 10);  
char val; // 儲存接收資料的變數
void setup()  
{  
Serial.begin(9600); // 與電腦序列埠連線
stepper.setSpeed(140);     // 將馬達的速度設定成140RPM 最大  150~160  
}  
void loop()  
{  
if (Serial.available()) {
val = Serial.read();
switch(val){
  case'a':
stepper.step(16);
Serial.print(val);
  break;
  case 'b':
stepper.step(-16);
Serial.print(val);
  break;
  }
}
}





這是我的APP程式
2#
發表於 2016-4-28 11:34:42 | 只看該作者
本帖最後由 超新手 於 2016-4-28 11:38 編輯

宣告一個 int s;
把 stepper.step(s); 寫到 loop 外
收到 a, 就讓 s=1
收到 b, 就讓 s=-1
當然...還要加一個停止的命令..s=0
否則不會停
void loop()  
{  
stepper.step(s);
if (Serial.available()) {
val = Serial.read();
switch(val){
..............................
  }
}
}

沒測過, 不知道可不可以動
3#
 樓主| 發表於 2016-4-28 11:40:12 | 只看該作者
回復 2# 超新手


   那請問我要做成 按著按鈕它就轉 放開它就不轉請問該怎麼做
4#
發表於 2016-4-28 11:43:54 | 只看該作者
本帖最後由 超新手 於 2016-4-28 11:57 編輯

作法前面就有寫了

當然, 也可以不要改 Arduino 端
改 APP inventor 也是 ok
只要按下按鈕就一直送 a 或 b
基本上按下按鈕就啟動一個 timer , 固定時間送 a(或b)

鬆開後就停止 timer
5#
 樓主| 發表於 2016-4-28 16:55:40 | 只看該作者
回復 4# 超新手


   謝謝你之前的說明現在我又有一個問題
現在我要讓馬達有兩種模式
一種是它會按照我寫的步數左右來迴旋轉
另一種是我可以控制它左右旋轉
請問我該怎麼做
6#
發表於 2016-4-28 19:55:36 | 只看該作者
方法一樣,
如果改 app
只要傳 ababab.. 就可以來回轉
如果傳 aabbaabb
或是 aaabbbaaabbb...
以此類推
7#
 樓主| 發表於 2016-4-29 11:47:39 | 只看該作者
回復 6# 超新手


  感謝你的回覆關於馬達來迴轉的問題
我用arduino設左轉1000步和右轉1000步
它就可以來回轉了
但是當我要讓他停止時
他會轉完步數才停止
請問有方法可以我一按停止它就立刻停止嗎
8#
發表於 2016-4-29 12:54:57 | 只看該作者
本帖最後由 超新手 於 2016-4-29 14:42 編輯

可以.
讀到 'a' 之後, 就把 count = 0; s = 1;

但是看到s = 1 時
每次執行一次 loop 就只跑一步(因為 s=1)
stepper.step(s);
然後 count 加一次
超過 1500 次後, 再把 s 變成 -1它就變反向了
然後把 count 設為 0
鬆開按鈕後改送 c, 把s設為0即可
9#
 樓主| 發表於 2016-4-29 14:11:40 | 只看該作者
回復 8# 超新手


  不好意思旗標我還不是很懂
可以說的詳細一點嗎?
拜託你了
謝謝你
10#
發表於 2016-4-29 14:19:59 | 只看該作者
旗標....就是變數,
宣告一個變數來判斷....
int X;
11#
 樓主| 發表於 2016-4-29 15:16:03 | 只看該作者
回復 10# 超新手


   #include <Stepper.h>  char val;
int s,count;
Stepper stepper(200, 13, 12, 11, 10);  
void setup()  
{  
Serial.begin(9600);  
stepper.setSpeed(140);     // 將馬達的速度設定成140RPM 最大  150~160  
}  
void loop()  
{  
  if(s==1)
  {
    stepper.step(s);
    count+=1;
    if(count>1500){
    s=-1;
    count=0;
    stepper.step(s);}
    }


if (Serial.available()) {
val = Serial.read();
switch(val){
  case 'd':
  Serial.print(val);
  count=0;
  s=1;
  break;
  case 'f':
  Serial.print(val);
  s=0;
  break;


  }
}
}  
請問我這樣設對嗎
12#
發表於 2016-4-29 15:19:25 | 只看該作者
對了一半
s = -1 那部份沒寫到
你這樣寫, 一旦反轉(s=-1), 就不會動了
13#
 樓主| 發表於 2016-4-29 15:42:32 | 只看該作者
回復 12# 超新手


   #include <Stepper.h>  char val;
int s,count;
Stepper stepper(200, 13, 12, 11, 10);  
void setup()  
{  
Serial.begin(9600);  
stepper.setSpeed(140);     // 將馬達的速度設定成140RPM 最大  150~160  
}  
void loop()  
{  
  if(s==1)
  {
    stepper.step(s);
    count+=1;
    if(count>1500){
    s=-1;
    count=0;}
  }
  if(s==-1){
    stepper.step(s);
    count+=1;
    if(count>1500){
      s=1;
      count=0;}
    }
if (Serial.available()) {
val = Serial.read();
switch(val){
  case 'd':
  Serial.print(val);
  count=0;
  s=1;
  break;
  case 'f':
  Serial.print(val);
  s=0;
  break;


  }
}
}  





我改好了
是這樣嗎?
功能是正確的
14#
發表於 2016-4-29 15:48:49 | 只看該作者
看起來應該是沒錯...
所以測試結果是正確的嗎?
15#
 樓主| 發表於 2016-4-29 15:58:07 | 只看該作者
回復 14# 超新手


  功能是OK的謝謝你
我再請教一個問題
我現在是想要做一個可以轉動的風扇
請問是要用步進馬達比較好還是伺服馬達比較好
16#
發表於 2016-4-29 16:10:25 | 只看該作者
風扇應該用直流馬達就好了
用步進馬達或伺服馬達, 不會太貴嗎?
17#
 樓主| 發表於 2016-4-29 16:19:19 | 只看該作者
回復 16# 超新手


   不是風扇的馬達是讓風扇左右擺動的馬達
18#
發表於 2016-4-29 16:29:58 | 只看該作者
本帖最後由 超新手 於 2016-5-1 09:57 編輯

如果用步進馬達, 還要裝一個偵測角度(原點)的東西
(encoder, home sensor或類似的東西)
才有辦法知道目前的'絕對'角度
不如用伺服馬達比較簡單,
要什麼角度直接給就好了
19#
 樓主| 發表於 2016-4-29 16:59:21 | 只看該作者
回復 18# 超新手


   我也覺得伺服馬達比較OK謝謝你的指導和建議
之後我有問題希望也可以拜託你了
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-11-21 20:01 , Processed in 0.245068 second(s), 9 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表