Robofun 機器人論壇
標題:
arduino 步進馬達問題
[打印本頁]
作者:
L88556698
時間:
2016-4-28 10:03
標題:
arduino 步進馬達問題
我現在要透過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程式
APP.png
(43.39 KB, 下載次數: 499)
下載附件
APP程式
2016-4-28 10:02 上傳
作者:
超新手
時間:
2016-4-28 11:34
本帖最後由 超新手 於 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){
..............................
}
}
}
沒測過, 不知道可不可以動
作者:
L88556698
時間:
2016-4-28 11:40
回復
2#
超新手
那請問我要做成
按著按鈕它就轉 放開它就不轉
請問該怎麼做
作者:
超新手
時間:
2016-4-28 11:43
本帖最後由 超新手 於 2016-4-28 11:57 編輯
作法前面就有寫了
當然, 也可以不要改 Arduino 端
改 APP inventor 也是 ok
只要按下按鈕就一直送 a 或 b
基本上按下按鈕就啟動一個 timer , 固定時間送 a(或b)
鬆開後就停止 timer
作者:
L88556698
時間:
2016-4-28 16:55
回復
4#
超新手
謝謝你之前的說明現在我又有一個問題
現在我要讓馬達有兩種模式
一種是它會按照我寫的步數左右來迴旋轉
另一種是我可以控制它左右旋轉
請問我該怎麼做
作者:
超新手
時間:
2016-4-28 19:55
方法一樣,
如果改 app
只要傳 ababab.. 就可以來回轉
如果傳 aabbaabb
或是 aaabbbaaabbb...
以此類推
作者:
L88556698
時間:
2016-4-29 11:47
回復
6#
超新手
感謝你的回覆關於馬達來迴轉的問題
我用arduino設左轉1000步和右轉1000步
它就可以來回轉了
但是當我要讓他停止時
他會轉完步數才停止
請問有方法可以我一按停止它就立刻停止嗎
作者:
超新手
時間:
2016-4-29 12:54
本帖最後由 超新手 於 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 14:11
回復
8#
超新手
不好意思旗標我還不是很懂
可以說的詳細一點嗎?
拜託你了
謝謝你
作者:
超新手
時間:
2016-4-29 14:19
旗標....就是變數,
宣告一個變數來判斷....
int X;
作者:
L88556698
時間:
2016-4-29 15:16
回復
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 15:19
對了一半
s = -1 那部份沒寫到
你這樣寫, 一旦反轉(s=-1), 就不會動了
作者:
L88556698
時間:
2016-4-29 15:42
回復
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:48
看起來應該是沒錯...
所以測試結果是正確的嗎?
作者:
L88556698
時間:
2016-4-29 15:58
回復
14#
超新手
功能是OK的謝謝你
我再請教一個問題
我現在是想要做一個可以轉動的風扇
請問是要用步進馬達比較好還是伺服馬達比較好
作者:
超新手
時間:
2016-4-29 16:10
風扇應該用直流馬達就好了
用步進馬達或伺服馬達, 不會太貴嗎?
作者:
L88556698
時間:
2016-4-29 16:19
回復
16#
超新手
不是風扇的馬達是讓風扇左右擺動的馬達
作者:
超新手
時間:
2016-4-29 16:29
本帖最後由 超新手 於 2016-5-1 09:57 編輯
如果用步進馬達, 還要裝一個偵測角度(原點)的東西
(encoder, home sensor或類似的東西)
才有辦法知道目前的'絕對'角度
不如用伺服馬達比較簡單,
要什麼角度直接給就好了
作者:
L88556698
時間:
2016-4-29 16:59
回復
18#
超新手
我也覺得伺服馬達比較OK謝謝你的指導和建議
之後我有問題希望也可以拜託你了
歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/)
Powered by Discuz! X3.2