ロボ実験について
今日はゆうき君がPS3の実験を家でやってきたので見せてもらった。家ではモーター回ったというが、今日モーター3つコントローラーのボタン押して回そうとしても2つしか動かなかったり固まったりする。あり? プログラムは以下にあり。
そこで、回路に間違いがあるのかどうか考えてみた!
いろんなサイト見てると、arduinoPWMで2つモーター制御でも限界だとか書いてるものもあるが、
Arduinoでモーターいくつか回しているサイトもある。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10159968040
↑
上記のサイトによると、やっぱ電源容量とPWM出力が問題で動かないこともあるとの事。
が、しかし、プログラム(制御)でどうにかしないといけないのだと思う。
それか信号ミスか?
今後どうなるんだろ〜笑
(今後ちょっとやってみたいこと)
普通のモーター3つを赤外線通信で動かす実験。
プログラム
#include <PS3BT.h>
#include <usbhub.h>
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#include <math.h>
#endif
USB Usb;
BTD Btd(&Usb);
int counter =0;
bool printTemperature, printAngle;
int MM_pluspin = {3,6,10};
int MM_minuspin = {5,9,11};
int CM_pluspin = 4;
int CM_minuspin = 7;
int UD_pluspin = 1;
int UD_minuspin = 2;
bool Catch = false;
int plus[3];
int minus[3];
int Motor_power[3];
bool Move = false;
int turn_sp = 200;
const int Motor_num = 3;
const double Motor_FR = {1,1,1};
const double Motor_rad = {PI/2.0,-PI/6.0,-PI*5.0/6.0};
double Theta;
double Speed;
void setup() {
Serial.begin(9600);
for(int i = 0;i < Motor_num; i++){
pinMode(MM_pluspin[i], OUTPUT);
pinMode(MM_minuspin[i], OUTPUT);
}
pinMode(CM_pluspin, OUTPUT);
pinMode(CM_minuspin, OUTPUT);
pinMode(UD_pluspin, OUTPUT);
pinMode(UD_minuspin, OUTPUT);
for(int i =0;i < Motor_num;i++){
analogWrite(MM_pluspin[i], 0);
analogWrite(MM_minuspin[i], 0);
}
#if !defined(__MIPSEL__)
while (!Serial);
#endif
if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start"));
while (1);
}
Serial.print(F("\r\nPS3
Bluetooth Library Started"));
}
void loop() {
if(counter%100==0){
Usb.Task();
if (
PS3.PS3Connected ||
PS3.PS3NavigationConnected) {
Theta =
atan2(
PS3.getAnalogHat(LeftHatY)-127.5 ,
PS3.getAnalogHat(LeftHatX)-127.5);
Speed = hypot(
PS3.getAnalogHat(LeftHatY)-127.5 ,
PS3.getAnalogHat(LeftHatX)-127.5);
if(Speed>128) Speed = 128;
for(int i =0;i < Motor_num;i++){
Motor_power[i] = (int)(Motor_FR[i]*sin(Theta-Motor_rad[i])*Speed*255.0/128.0);//power-255~128
if(Motor_power[i] < 0){
plus[i] = 0;
minus[i] = abs(Motor_power[i]);
}else if(Motor_power[i] > 0){
plus[i] = abs(Motor_power[i]);
minus[i] = 0;
}
}
Move = true;
//Serial.println(String(int(Motor_power[0]))+" "+String(Motor_power[1])+" "+String(Motor_power[2]));
}else if(
PS3.getButtonPress(L1)){
for(int i =0;i < Motor_num;i++){
plus[i] = 0;
minus[i] = turn_sp;
}
Move = true;
}else if(
PS3.getButtonPress(R1)){
for(int i =0;i < Motor_num;i++){
plus[i] = turn_sp;
minus[i] = 0;
}
Move = true;
}else{
Move = false;
}
if(Move){
for(int i =0;i <Motor_num;i++){
analogWrite(MM_pluspin[i], plus[i]);
analogWrite(MM_minuspin[i], minus[i]);
}
}*/
/*******************************************************************************************************************/
if (
PS3.getAnalogHat(RightHatY) > 154){
digitalWrite(UD_pluspin,LOW);
digitalWrite(UD_minuspin,HIGH);
}else if(
PS3.getAnalogHat(RightHatY) < 100) {
digitalWrite(UD_pluspin,HIGH);
digitalWrite(UD_minuspin,LOW);
}else{
digitalWrite(UD_pluspin,LOW);
digitalWrite(UD_minuspin,LOW);
}
/*********************************************************/
if (
PS3.getButtonClick(PS)) {
Serial.print(F("\r\nPS"));
}
else {
if (
PS3.getButtonClick(CIRCLE)) {
Serial.print(F("\r\nCircle"));
Catch = true;
}
if (
PS3.getButtonClick(CROSS)){
Serial.print(F("\r\nCross"));
Catch = false;
}
if (
PS3.getButtonPress(CROSS)){
digitalWrite(CM_pluspin,LOW);
digitalWrite(CM_minuspin,HIGH);
}else if(!Catch){
digitalWrite(CM_pluspin,LOW);
digitalWrite(CM_minuspin,LOW);
}
if(Catch){
//feedback
digitalWrite(CM_pluspin,HIGH);
digitalWrite(CM_minuspin,LOW);
}
if (
PS3.getButtonClick(TRIANGLE)) {
Serial.print(F("\r\nTraingle"));
//
PS3.setRumbleOn(RumbleLow);
}
if (
PS3.getButtonClick(SQUARE))
Serial.print(F("\r\nSquare"));
if (
PS3.getButtonPress(UP)) {
//Serial.print(F("\r\nUp"));
//analogWrite(MM_pluspin[0],200);
//analogWrite(MM_minuspin[0],0);
//analogWrite(MM_pluspin[1],200);
// analogWrite(MM_minuspin[1],0);
analogWrite(MM_pluspin[2],0);
analogWrite(MM_minuspin[2],200);
/*if (
PS3.PS3Connected) {
}*/
}
if (
PS3.getButtonPress(RIGHT)) {
//Serial.print(F("\r\nRight"));
//analogWrite(MM_pluspin[0],0);
//analogWrite(MM_minuspin[0],0);
//analogWrite(MM_pluspin[1],0);
// analogWrite(MM_minuspin[1],0);
analogWrite(MM_pluspin[2],0);
analogWrite(MM_minuspin[2],0);
/*if (
PS3.PS3Connected) {
}*/
}
if (
PS3.getButtonClick(DOWN)) {
Serial.print(F("\r\nDown"));
/*if (
PS3.PS3Connected) {
}*/
}
if (
PS3.getButtonClick(LEFT)) {
Serial.print(F("\r\nLeft"));
/*if (
PS3.PS3Connected) {
}*/
}
//ButtonPress ositerutoki
if (
PS3.getButtonClick(L1))
Serial.print(F("\r\nL1"));
if (
PS3.getButtonClick(L3))
Serial.print(F("\r\nL3"));
if (
PS3.getButtonClick(R1))
Serial.print(F("\r\nR1"));
if (
PS3.getButtonClick(R3))
Serial.print(F("\r\nR3"));
if (
PS3.getButtonClick(SELECT)) {
Serial.print(F("\r\nSelect - "));
}
if (
PS3.getButtonClick(START)) {
Serial.print(F("\r\nStart"));
printAngle = !printAngle;
}
}
}
}
counter++;
}
PS3.getAnalogHat(LeftHatY) > 142 ||
PS3.getAnalogHat(LeftHatY) < 112)&&!
PS3.getButtonPress(L1)&&!
PS3.getButtonPress(R1