Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz

arduino 步進馬達問題

查看數: 5972 | 評論數: 18 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發佈時間: 2016-4-28 10:03

正文摘要:

我現在要透過APP來控制步進馬達但是他不會一直持續的動作 我按一下它才會動一下 我要如何可以按著按鈕讓馬達持續的動? 這是我的arduino程式 #include <Stepper.h>   Stepper stepper(200, 13, 12, 11, 1 ...

回復

L88556698 發表於 2016-4-29 16:59:21
回復 18# 超新手


   我也覺得伺服馬達比較OK謝謝你的指導和建議
之後我有問題希望也可以拜託你了
超新手 發表於 2016-4-29 16:29:58
本帖最後由 超新手 於 2016-5-1 09:57 編輯

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


   不是風扇的馬達是讓風扇左右擺動的馬達
超新手 發表於 2016-4-29 16:10:25
風扇應該用直流馬達就好了
用步進馬達或伺服馬達, 不會太貴嗎?
L88556698 發表於 2016-4-29 15:58:07
回復 14# 超新手


  功能是OK的謝謝你
我再請教一個問題
我現在是想要做一個可以轉動的風扇
請問是要用步進馬達比較好還是伺服馬達比較好
超新手 發表於 2016-4-29 15:48:49
看起來應該是沒錯...
所以測試結果是正確的嗎?
L88556698 發表於 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;


  }
}
}  





我改好了
是這樣嗎?
功能是正確的
超新手 發表於 2016-4-29 15:19:25
對了一半
s = -1 那部份沒寫到
你這樣寫, 一旦反轉(s=-1), 就不會動了
L88556698 發表於 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;


  }
}
}  
請問我這樣設對嗎
超新手 發表於 2016-4-29 14:19:59
旗標....就是變數,
宣告一個變數來判斷....
int X;
L88556698 發表於 2016-4-29 14:11:40
回復 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即可
L88556698 發表於 2016-4-29 11:47:39
回復 6# 超新手


  感謝你的回覆關於馬達來迴轉的問題
我用arduino設左轉1000步和右轉1000步
它就可以來回轉了
但是當我要讓他停止時
他會轉完步數才停止
請問有方法可以我一按停止它就立刻停止嗎
超新手 發表於 2016-4-28 19:55:36
方法一樣,
如果改 app
只要傳 ababab.. 就可以來回轉
如果傳 aabbaabb
或是 aaabbbaaabbb...
以此類推
L88556698 發表於 2016-4-28 16:55:40
回復 4# 超新手


   謝謝你之前的說明現在我又有一個問題
現在我要讓馬達有兩種模式
一種是它會按照我寫的步數左右來迴旋轉
另一種是我可以控制它左右旋轉
請問我該怎麼做
超新手 發表於 2016-4-28 11:43:54
本帖最後由 超新手 於 2016-4-28 11:57 編輯

作法前面就有寫了

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

鬆開後就停止 timer
L88556698 發表於 2016-4-28 11:40:12
回復 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){
..............................
  }
}
}

沒測過, 不知道可不可以動

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

GMT+8, 2024-11-22 01:03 , Processed in 0.170398 second(s), 11 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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