置頂文字

歡迎來訪 !! 如有任何問題歡迎一起討論或是 eMail 給我 legorunmail@Gmail.com

2015年6月24日 星期三

Arduino Color Sensor 顏色感應器 TCS230

Arduino Color Sensor 顏色感應器 TCS230

Pin 腳接法




#include

#define S0     6   // Please notice the Pin's define
#define S1     5
#define S2     4
#define S3     3
#define OUT    2

int   g_count = 0;    // count the frequecy
int   g_array[3];     // store the RGB value
int   g_flag = 0;     // filter of RGB queue
float g_SF[3];        // save the RGB Scale factor


// Init TSC230 and setting Frequency.
void TSC_Init()
{
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(OUT, INPUT);

  digitalWrite(S0, LOW);  // OUTPUT FREQUENCY SCALING 2%
  digitalWrite(S1, HIGH);
}

// Select the filter color
void TSC_FilterColor(int Level01, int Level02)
{
  if(Level01 != 0)
    Level01 = HIGH;

  if(Level02 != 0)
    Level02 = HIGH;

  digitalWrite(S2, Level01);
  digitalWrite(S3, Level02);
}

void TSC_Count()
{
  g_count ++ ;
}

void TSC_Callback()
{
  switch(g_flag)
  {
    case 0:
         Serial.println("->WB Start");
         TSC_WB(LOW, LOW);              //Filter without Red
         break;
    case 1:
         Serial.print("->Frequency R=");
         Serial.println(g_count);
         g_array[0] = g_count;
         TSC_WB(HIGH, HIGH);            //Filter without Green
         break;
    case 2:
         Serial.print("->Frequency G=");
         Serial.println(g_count);
         g_array[1] = g_count;
         TSC_WB(LOW, HIGH);             //Filter without Blue
         break;

    case 3:
         Serial.print("->Frequency B=");
         Serial.println(g_count);
         Serial.println("->WB End");
         g_array[2] = g_count;
         TSC_WB(HIGH, LOW);             //Clear(no filter)
         break;
   default:
         g_count = 0;
         break;
  }
}

void TSC_WB(int Level0, int Level1)      //White Balance
{
  g_count = 0;
  g_flag ++;
  TSC_FilterColor(Level0, Level1);
  Timer1.setPeriod(1000000);             // set 1s period
}

void setup()
{
  TSC_Init();
  Serial.begin(9600);
  Timer1.initialize();             // defaulte is 1s
  Timer1.attachInterrupt(TSC_Callback);
  attachInterrupt(0, TSC_Count, RISING);

  delay(4000);

  for(int i=0; i<3 i="" p="">    Serial.println(g_array[i]);

  g_SF[0] = 255.0/ g_array[0];     //R Scale factor
  g_SF[1] = 255.0/ g_array[1] ;    //G Scale factor
  g_SF[2] = 255.0/ g_array[2] ;    //B Scale factor

  Serial.println(g_SF[0]);
  Serial.println(g_SF[1]);
  Serial.println(g_SF[2]);

}


void loop()
{
   g_flag = 0;
   for(int i=0; i<3 i="" p="">      Serial.println(int(g_array[i] * g_SF[i]));
   delay(4000);

}




2015年6月23日 星期二

Arduino 與 步進馬達28BYJ-48 5v DC+ARDUINO MOTOR SHIELD L293D 驅動板

Arduino 與 步進馬達28BYJ-48 5v DC+ARDUINO MOTOR SHIELD L293D驅動板 實做

 網路資源

零件清單
1.Arduino UNO
2.步進馬達28BYJ-48 5v DC
3. 驅動板


 #include  
 #define STEPS 200  //定義步進馬達每圈的步數 


 //steps:代表馬達轉完一圈需要多少步數。如果馬達上有標示每步的度數, 
 //將360除以這個角度,就可以得到所需要的步數(例如:360/3.6=100)。(int) 
     
 //如果步進馬達只會往一個方向轉動,不會反轉把 pin 2 與 pin3 要交換接

 Stepper stepper(STEPS, 9, 10, 11, 12);
     
  void setup(){ 
    stepper.setSpeed(140);     // 將馬達的速度設定成140RPM 最大  150~160  
  } 
     
  void loop(){ 

    stepper.step(1600);//正8圈 
    delay(1000); 
    stepper.step(-1600);//反8圈 
    delay(1000); 
   
  }  





Part 2
1.Arduino UNO
2.直流馬達 DC Motor
3.ARDUINO MOTOR SHIELD L293D

網路資源   網路資源2  網路資源3 網路資源4



在Arduino UNO 對應腳位Pine

#define MOTO_M1_A 2
#define MOTO_M1_B 3
#define MOTO_M2_A 1
#define MOTO_M2_B 4
#define MOTO_M3_A 5
#define MOTO_M3_B 7
#define MOTO_M4_A 0
#define MOTO_M4_B 6

// Arduino pins for the PWM signals.
#define MOTOR1_PWM 11
#define MOTOR2_PWM 3
#define MOTOR3_PWM 6
#define MOTOR4_PWM 5
#define SERVO1_PWM 10
#define SERVO2_PWM 9






//使用直流馬達範例 DC Motor

#include            //呼叫該函式庫

AF_DCMotor motor(4, MOTOR12_64KHZ); // AF_DCMotor 變數名稱(第幾個馬達控制, 頻率)
                                    // Motor1 & Motor2  有這幾個頻率:
                                    // MOTOR12_64KHZ, MOTOR12_8KHZ,
                                     //MOTOR12_2KHZ, MOTOR12_1KHZ
                                    // 
                                    // Motor3 & Motor4  有這幾個頻率:
                                    // MOTOR12_64KHZ, MOTOR12_8KHZ, MOTOR12_1KHZ
                                    //
void setup() {
  Serial.begin(9600);           // set up Serial library at 9600 bps
  Serial.println("Motor test!");
  
  motor.setSpeed(200);     // set the speed to 200/255
}

void loop() {
  Serial.print("tick");
  
  motor.run(FORWARD);      // turn it on going forward
  delay(1000);

  Serial.print("tock");
  motor.run(BACKWARD);     // the other way
  delay(1000);
  
  Serial.print("tack");
  motor.run(RELEASE);      // stopped
  delay(1000);
}



//使用步進馬達 Step Motor



 `stepsPerRevolution` 必須設定為你的馬達實際上一圈會有多少步,如果是 28BYJ-48 5V DC 的話,規格上寫著,步進角為 `5.625 / 64`,因此這馬達轉一圈需要的步數是 `360 / (5.625 / 64)`,也就是 `4096` 步,這是一/二相激磁才會有的步數,Stepper 程式庫原始碼它是採二相激磁的實作方式,因此,使用這個 Stepper 程式庫實際上要設的 `stepsPerRevolution` 是 `2048` 步

PWR Jumper 短路(套上)的話會對 Arduino UNO 板供電5V


#include
#include

#define SERVO1_PWM 10
#define SERVO2_PWM 9

double passos_total = 2048; //Numero de passos para 1 rotacao total

int porta_motor = 2; //1 para motor em M1/M2 e 2 para motor em M3/M4
int angulo = 30; //Angulo de rotacao do eixo

double numero_de_passos = 0; //Armazena o numero de passos que o motor vai girar

AF_Stepper arduino(passos_total, porta_motor); //Define os parametros do motor
Servo servo_1;

void setup()
{
arduino.setSpeed(10); //Define a velocidade de rotacao
Serial.begin(9600);
servo_1.attach(SERVO1_PWM);
}

void loop()
{
//Calcula a quantidade de passos, baseado no angulo determinado
numero_de_passos = angulo / (360 / passos_total);
//170.67/步

servo_1.write(0);
  delay(1000);
  servo_1.write(180);
  delay(2000);

//Mostra no serial monitor o numero de passos calculados
Serial.println(numero_de_passos);

//Move o motor. Use FORWARD para sentido horario,
//BACKWARD para anti-horario
for(int i=0;i<=5;i++){
  arduino.step(numero_de_passos, FORWARD, SINGLE);
  arduino.release();
}
delay(2000);

for(int i=0;i<=5;i++){
  arduino.step(numero_de_passos, BACKWARD, SINGLE);
  arduino.release();
}
delay(2000);
}


//---------------------------------------------------------

#include
AF_Stepper motor(48, 2);   //48表示每圈的步數(360度/步距角,48的步距角為7.5度)
                                             //2表示第二路步進電機(共支持兩路)
void setup() {
   Serial.begin(9600); // set up Serial library at 9600 bps
   Serial.println("Stepper test!");
   motor.setSpeed(10); // 10 rpm
   motor.step(100, FORWARD, SINGLE);
   motor.release();
   delay(1000);
}
void loop() {
   motor.step(100, FORWARD, SINGLE);
   motor.step(100, BACKWARD, SINGLE);
   motor.step(100, FORWARD, DOUBLE);
   motor.step(100, BACKWARD, DOUBLE);
   motor.step(100, FORWARD, INTERLEAVE);
   motor.step(100, BACKWARD, INTERLEAVE);
   motor.step(100, FORWARD, MICROSTEP);
   motor.step(100, BACKWARD, MI
}