Robofun 機器人論壇

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

4輪自走車+4個伺服馬達0&90度的轉換

[複製鏈接]
跳轉到指定樓層
1#
發表於 2017-12-25 19:35:50 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最後由 f660229 於 2017-12-25 20:02 編輯

我希望的功能,如標題4輪的自走車+4個伺服馬達0&90度的轉換。
現在arduino程式一輸入4個伺服就一直不斷的抖動,自走車的控制也不知道是否正確。
下面是我arduino的程式

#include <SoftwareSerial.h>
#include <Wire.h>
#include <Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
SoftwareSerial BT(0,1);
const int leftMotorIn1 = 4;
const int leftMotorIn2 = 5;
const int rightMotorIn3 = 6;      
const int rightMotorIn4 = 7;
const int leftMotorIn5 = 8;
const int leftMotorIn6 = 9;
const int rightMotorIn7 = 10;      
const int rightMotorIn8 = 11;

char command;

void setup()  
{
  pinMode(leftMotorIn1, OUTPUT);
  pinMode(leftMotorIn2, OUTPUT);
  pinMode(rightMotorIn3, OUTPUT);
  pinMode(rightMotorIn4, OUTPUT);
  pinMode(leftMotorIn5, OUTPUT);
  pinMode(leftMotorIn6, OUTPUT);
  pinMode(rightMotorIn7, OUTPUT);
  pinMode(rightMotorIn8, OUTPUT);
  Serial.begin(38400);
  BT.begin(38400);
  servo1.attach(2);
  servo2.attach(3);
  servo3.attach(12);
  servo4.attach(13);
  servo1.write(0);
  servo2.write(0);
  servo3.write(0);
  servo4.write(0);
}

void loop()
{
  if(BT.available() > 0)
  {
     command = BT.read();
      Serial.println(command);
      switch (command) {
      
      case 'A':
        forward();
        
      break;
      
      case 'B':
        backward();
        
      break;
   
      case 'C':
        left();
      break;
      
      case 'D':
        right();
      break;
   
      case 'S':
        motorstop();
      break;
      
      case 'E':
        servo1.write(90);
        servo2.write(90);
        servo3.write(90);
        servo4.write(90);
      break;

      case 'F':
        servo1.write(0);
        servo2.write(0);
        servo3.write(0);
        servo4.write(0);
      break;
      }
  }   
}

void motorstop()
{
  digitalWrite(leftMotorIn1, LOW);
  digitalWrite(leftMotorIn2, LOW);
  digitalWrite(rightMotorIn3, LOW);
  digitalWrite(rightMotorIn4, LOW);
  digitalWrite(leftMotorIn5, LOW);
  digitalWrite(leftMotorIn6, LOW);
  digitalWrite(rightMotorIn7, LOW);
  digitalWrite(rightMotorIn8, LOW);
}

void forward()
{
  digitalWrite(leftMotorIn1, HIGH);
  digitalWrite(leftMotorIn2, LOW);
  digitalWrite(rightMotorIn3, HIGH);
  digitalWrite(rightMotorIn4, LOW);
  digitalWrite(leftMotorIn5, HIGH);
  digitalWrite(leftMotorIn6, LOW);
  digitalWrite(rightMotorIn7, HIGH);
  digitalWrite(rightMotorIn8, LOW);
}

void backward()
{
  digitalWrite(leftMotorIn1, LOW);
  digitalWrite(leftMotorIn2, HIGH);
  digitalWrite(rightMotorIn3, LOW);
  digitalWrite(rightMotorIn4, HIGH);
  digitalWrite(leftMotorIn5, LOW);
  digitalWrite(leftMotorIn6, HIGH);
  digitalWrite(rightMotorIn7, LOW);
  digitalWrite(rightMotorIn8, HIGH);

}

void right()
{
    digitalWrite(leftMotorIn1, HIGH);
    digitalWrite(leftMotorIn2, LOW);
    digitalWrite(rightMotorIn3, LOW);
    digitalWrite(rightMotorIn4, HIGH);
    digitalWrite(leftMotorIn5, HIGH);
    digitalWrite(leftMotorIn6, LOW);
    digitalWrite(rightMotorIn7, LOW);
    digitalWrite(rightMotorIn8, HIGH);  
}

void left()
{
    digitalWrite(leftMotorIn1, LOW);
    digitalWrite(leftMotorIn2, HIGH);
    digitalWrite(rightMotorIn3, HIGH);
    digitalWrite(rightMotorIn4, LOW);
    digitalWrite(leftMotorIn5, LOW);
    digitalWrite(leftMotorIn6, HIGH);
    digitalWrite(rightMotorIn7, HIGH);
    digitalWrite(rightMotorIn8, LOW);  
}


提一個額外的問題,為什麼RXT&TXD輸入跟輸出的時候要互換?
2#
發表於 2017-12-25 20:12:22 | 只看該作者
1. 接那麼多,電流應該會吃很大
       可以先拔掉8個馬達,先接一個
       看看還會不會抖
2. 傳輸就是我送你收
     所以我方輸出接到對方輸入,就是傳送
             對方輸出接到對方輸出,就是接收
         
     
3#
 樓主| 發表於 2017-12-25 20:46:15 | 只看該作者
我只有用4個伺服馬達但一上傳後就一直亂跳
這是伺服馬達的程式   按一個按鈕4個伺服都到90度
                               按另一個按鈕4個伺服都回到0度

#include <SoftwareSerial.h>
#include <Wire.h>
#include <Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
SoftwareSerial BT(0,1);

char command;

void setup()  
{

  Serial.begin(38400);
  BT.begin(38400);
  servo1.attach(2);
  servo2.attach(3);
  servo3.attach(12);
  servo4.attach(13);
  servo1.write(0);
  servo2.write(0);
  servo3.write(0);
  servo4.write(0);
}

void loop()
{
  if(BT.available() > 0)
  {
     command = BT.read();
      Serial.println(command);
      switch (command)
      {
      
      case 'E':
        servo1.write(90);
        servo2.write(90);
        servo3.write(90);
        servo4.write(90);
      break;

      case 'F':
        servo1.write(0);
        servo2.write(0);
        servo3.write(0);
        servo4.write(0);
      break;
      }
  }   
}

4#
發表於 2017-12-25 20:52:42 | 只看該作者
對。所以你有先拔掉3個,先接一個試試看嗎?
另外, 馬達是吃幾伏的電壓?
5#
 樓主| 發表於 2017-12-25 21:08:29 | 只看該作者
馬達工作電壓4.8~6V
3個伺服可以  4個就不行ㄌ
6#
發表於 2017-12-25 21:13:57 來自手機 | 只看該作者
所以看來應該是電流不足
7#
 樓主| 發表於 2017-12-25 22:08:55 來自手機 | 只看該作者
請問有增加電流的方法嗎?
8#
發表於 2017-12-26 18:10:40 | 只看該作者
1. 你給 Arduino Vin(6~12V) 是多少伏(V)多少安培(A)?
    比較簡單的方式是直接換大電壓(或大電流)試看看
2. 你的伺服機到底接多少伏(V)?

9#
 樓主| 發表於 2017-12-27 00:19:23 | 只看該作者
本帖最後由 f660229 於 2017-12-27 22:18 編輯

伺服是5V  馬達是Vin
換成大電壓(大電流)具體來說有什麼辦法嗎?
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-11-23 16:19 , Processed in 0.059708 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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