2016年8月28日 星期日

[Arduino]Day-10-Timer1



要記得將TimerOne解壓到Libiary資料夾裡面
基本上,可以從序列埠看到一秒顯示一次

Ardunio只有三個Timer
分別為Timer0,1,2
其中0是8bit,1是16Bit,2是8Bit



////////////////////////////////////////////////

#include <TimerOne.h>

int Timer_count = 0;

void setup()
{
  Serial.begin(9600);
  Serial.println("Serial ready" ) ;

  Timer1.initialize(1000000); // 1000000 = 1sec, set a timer of length 1 sec
  Timer1.attachInterrupt( timer_1_Isr ); // attach the service routine here

}
/// --------------------------
/// Loop Routine
/// --------------------------
void loop()
{
}

/// --------------------------
/// Custom ISR Timer Routine
/// --------------------------
void timer_1_Isr(void)
{
  Timer_count++;
  Serial.print("Timer_count = ");
  Serial.println(Timer_count);

}


http://playground.arduino.cc/Code/Timer1
https://oscarliang.com/arduino-timer-and-interrupt-tutorial/
http://coopermaa2nd.blogspot.tw/2011/07/41-blink-with-timer.html

[Arduino]Day-10-UNO-Hardware


Technical specs
MicrocontrollerATmega328P
Operating Voltage5V
Input Voltage (recommended)7-12V
Input Voltage (limit)6-20V
Digital I/O Pins14 (of which 6 provide PWM output)
PWM Digital I/O Pins6
Analog Input Pins6
DC Current per I/O Pin20 mA
DC Current for 3.3V Pin50 mA
Flash Memory32 KB (ATmega328P)
of which 0.5 KB used by bootloader
SRAM2 KB (ATmega328P)
EEPROM1 KB (ATmega328P)
Clock Speed16 MHz
Length68.6 mm
Width53.4 mm
Weight25 g


https://www.arduino.cc/en/Main/ArduinoBoardUno

2016年8月20日 星期六

[Arduino]Day-9-超音波加伺服馬達








程式碼
=========================================================

#include <Servo.h>
#define Servo_Pin      7  // 定義伺服馬達輸出腳位(PWM)
#define servo_delay    5  // 伺服馬達轉向後的穩定時間
Servo myservo;            // 宣告伺服馬達變數
int val = 0;
int Count_up = 1;

// Ultrasonic
int ECHO_Pin=2;  // ultrasonic ECHO
int TRIG_Pin=3; // ultrasonic TRIG
int distance = 0;

// initial
int Ini_Flag = 0;

void setup()
{
  Serial.begin(9600);
  pinMode(ECHO_Pin, INPUT);
  pinMode(TRIG_Pin, OUTPUT);
  myservo.attach(Servo_Pin);

  //
  val = 90;
  testServo(val);
  delay(3000);
  Serial.println("Servo 90 and serial ready" ) ;
  //
}
void loop()
{

//   //給安裝伺服馬達時的初始校正
//  if(Ini_Flag == 0)
//  {
//    testServo(0);
//    delay(3000);
//    testServo(180);
//    delay(3000);
//    testServo(90);
//    delay(5000);
//    Ini_Flag = 1;
//  }
  if(Count_up)
  {
    val+=1;
    if(val >= 170)
    {
      Count_up = 0;
    }
  }else{
    val-=1;
    if(val <= 9)
    {
      Count_up = 1;
    }
}
testServo(val);
distance = Get_Distance();
Serial.print("motor = ");
Serial.print(val);        //Output val
Serial.print(" distance = ");   //Output
Serial.println(distance);

}

int Get_Distance(void)
{
  digitalWrite(TRIG_Pin, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_Pin, HIGH); // Pulse for 10 micro sec to trigger ultrasonic detection
  delayMicroseconds(10);
  digitalWrite(TRIG_Pin, LOW);
  int distance = pulseIn(ECHO_Pin, HIGH);  // Read receiver pulse time
  distance= distance/58;   // Transform pulse time to distance
  return distance;
}

void testServo(int angle)
{
  myservo.write(angle);
  delay(servo_delay);  // 等待伺服馬達穩定
}


[轉貼]Arduino:stk500_getsync(): not in sync

下午也同樣發生這狀況,後來是燒錄時不能用腳位0與1。

燒錄時,若看到錯誤訊息「avrdude: stk500_getsync(): not in sync: resp=0x00」,雖然知道這代表著電腦端的燒錄程式avrdude不能與微控制器內的bootloader進行溝通,但卻無法知曉錯誤的源頭在哪,因為可能出錯的地方太多了。

底下列出可能導致此錯誤的原因,以及解決辦法:

原因:「工具-板子(Tools-Board)」與「工具-序列埠(Tools-Serial Port)」沒選好 
辦法:確認你的板子到底是哪一塊,確認它所連接的序列埠是哪一個,重新設定正確的值

原因:序列埠被佔用了
辦法:關閉佔用序列埠的軟體,或電腦重開機

原因:驅動程式壞了、沒裝好
辦法:重新安裝驅動程式 

原因:零件影響了燒錄所需的線路,譬如Uno板燒錄時須經由腳位0與1的線路
辦法:燒錄時拔除相關接線、暫時先拔掉擴充板

原因:舊板子與某些較小型的板子,需要自己按板子上的Reset鍵
辦法:觀看avrdude燒錄時輸出的訊息,在適當的時機按下Reset鍵;多試幾次,嘗試在不同的時間點按下

原因:若是自己買「USB轉Serial介面」模組再加上微控制器晶片,有可能TX與RX接反了
辦法:反過來接試試看

原因:微控制器裡的bootloader壞了,或根本沒有bootloader
辦法:找個ISP燒錄器,重新燒錄bootloader

原因:不明
辦法:電腦重開機

原因:不明
辦法:重新啟動Arduino IDE

原因:不明
辦法:重新拔插USB連接線

原因:不明
辦法:換插別的USB埠

原因:不明
辦法:改用USB集線器或改為直接插電腦的USB埠

原因:不明
辦法:換條USB線


出處
http://yehnan.blogspot.tw/2014/10/arduinostk500getsync-not-in-sync.html

[轉貼]Cooper Maa: 超棒的 Arduino pinout diagrams

Cooper Maa: 超棒的 Arduino pinout diagrams: 有個叫 Pighixxxx 的義大利人,最近製作了好多 Arduino 的 pinout diagrams 貼在 Arduino forum 上,有 Arduino UNO 的,有很多張 ATMega 的,例如 ATMega328 與 ATMega1284p 等,也有幾張是 A...

//筆記
Cooper Maa是個神人,他的部落格有許多玩Ardunio的玩家值得去看的文章,
這篇應該算是很有用的


Mega版本
http://forum.arduino.cc/index.php/topic,146511.0.html





[Arduino]Day-9-servo_test2


今天得要一個人在家顧女兒,
因為女兒哭鬧不止,只能一手抱在腿上,一手coding,
弄完,拍好片上傳,貼上影片跟原始碼後,
突然發現....
女兒已經打呵欠了,
呵呵,
果然程式對女兒還是沒有吸引力的。
不過女兒倒是盯著轉來轉去的馬達一陣子,
大概3分鐘吧...
抱去睡覺後,現在來補充一下這篇裡面的文字

在這實驗裡面發現,delay不加也是能跑,而且感覺不出來比較快,

另外,透過序列埠,之後可以將資料回傳,再用VC或其他軟體接資料來畫圖,
下一步想將超音波資料讀回來。





=======================================================
#include <Servo.h>

#define Servo_Pin      2  // 定義伺服馬達輸出腳位(PWM)
#define servo_delay    15  // 伺服馬達轉向後的穩定時間
Servo myservo;            // 宣告伺服馬達變數
int val;
int Count_up = 0;
void setup()
{
  myservo.attach(Servo_Pin);
  Serial.begin(9600);//
  Serial.println("servo=o_seral_simple ready" ) ;
}

void loop()
{
if(Count_up)
{
  if(val == 179)
  {
    Count_up = 0;
  }
  val++;
}else{
   if(val == 0)
   {
    Count_up = 1;
   }
   val--;
}
testServo(val);

}

 void testServo(int angle)
 {
  Serial.print("moving servo to ");
  Serial.print(angle,DEC);
  Serial.println();
  myservo.write(angle);
  delay(servo_delay);  // 等待伺服馬達穩定
 }

2016年8月19日 星期五

[Arduino]Day-8-Servo_Motor


利用Com埠送控制命令
控制Servo Motor

一如往常,組機構與找螺絲鎖孔的時間占了九成....

機構孔徑大小不合,鎖孔位置只能將就,基本上就是能鎖就好,其他就不要多要求。





=======================================================
#include <Servo.h>

#define MotorA_in1     8  //定義 馬達A in 1
#define MotorA_in2     9  //定義 馬達A in 2
#define MotorB_in1    10  //定義 馬達B in 1 to L298N IN3
#define MotorB_in2    11  //定義 馬達B in 2 to L298N IN4
#define MotorA_PWNA    5  //定義 ENA (PWM) 接腳
#define MotorB_PWNB    6  //定義 ENB (PWM) 接腳

// 伺服馬達(舵機)
#define Servo_Pin      2  // 定義伺服馬達輸出腳位(PWM)
#define servo_delay  250  // 伺服馬達轉向後的穩定時間
Servo myservo;            // 宣告伺服馬達變數
int val;
int dir;
void setup()
{
  pinMode(MotorA_in1,OUTPUT);
  pinMode(MotorA_in2,OUTPUT);
  pinMode(MotorB_in1,OUTPUT);
  pinMode(MotorB_in2,OUTPUT);
  pinMode(MotorA_PWNA,OUTPUT);
  pinMode(MotorB_PWNB,OUTPUT);

  myservo.attach(Servo_Pin);
  Serial.begin(9600);//
  Serial.println("servo=o_seral_simple ready" ) ;
}

void loop()
{

val=Serial.read();//
if(val>'0'&&val<='9')
{
  val=val-'0';
  dir=val*(180/9);//
  Serial.print("moving servo to ");
  Serial.print(dir,DEC);
  Serial.println();
  myservo.write(dir);
  delay(servo_delay);  // 等待伺服馬達穩定
}
}

2016年8月17日 星期三

[Arduino]Day7-L298N直流馬達驅動



測試L298N




#define MotorA_in1     8  //定義 馬達A in 1
#define MotorA_in2     9  //定義 馬達A in 2
#define MotorB_in1    10  //定義 馬達B in 1 to L298N IN3
#define MotorB_in2    11  //定義 馬達B in 2 to L298N IN4
#define MotorA_PWNA    5  //定義 ENA (PWM) 接腳
#define MotorB_PWNB    6  //定義 ENB (PWM) 接腳

void setup()
{
  pinMode(MotorA_in1,OUTPUT);
  pinMode(MotorA_in2,OUTPUT);
  pinMode(MotorB_in1,OUTPUT);
  pinMode(MotorB_in2,OUTPUT);
  pinMode(MotorA_PWNA,OUTPUT);
  pinMode(MotorB_PWNB,OUTPUT);
}

void loop()
{
    // 直走
    analogWrite(MotorA_PWNA,200);   //設定直流馬達轉速
    analogWrite(MotorB_PWNB,200);
    digitalWrite(MotorA_in1,HIGH);   //直流馬達(右)順時針轉動
    digitalWrite(MotorA_in2,LOW);
    digitalWrite(MotorB_in1,HIGH);   //直流馬達(左)逆時針轉動
    digitalWrite(MotorB_in2,LOW);
    delay(2000);

    //後退
    analogWrite(MotorA_PWNA,200);   //設定直流馬達轉速
    analogWrite(MotorB_PWNB,200);
    digitalWrite(MotorA_in1,LOW);    //直流馬達(右)逆時針轉動
    digitalWrite(MotorA_in2,HIGH);
    digitalWrite(MotorB_in1,LOW);    //直流馬達(左)順時針轉動
    digitalWrite(MotorB_in2,HIGH);
    delay(2000);

    //左轉
    analogWrite(MotorA_PWNA,80);    //設定直流馬達轉速
    analogWrite(MotorB_PWNB,80);
    digitalWrite(MotorA_in1,HIGH);   //直流馬達(右)順時針轉動
    digitalWrite(MotorA_in2,LOW);
    digitalWrite(MotorB_in1,LOW);    //直流馬達(左)順時針轉動
    digitalWrite(MotorB_in2,HIGH);
    delay(2000);

    //右轉
    analogWrite(MotorA_PWNA,80);     //設定馬達轉速
    analogWrite(MotorB_PWNB,80);
    digitalWrite(MotorA_in1,LOW);    //馬達(右)逆時針轉動
    digitalWrite(MotorA_in2,HIGH);
    digitalWrite(MotorB_in1,HIGH);   //馬達(左)逆時針轉動
    digitalWrite(MotorB_in2,LOW);
    delay(2000);

    //停止
    digitalWrite(MotorA_in1,HIGH);   //馬達(右)停止轉動
    digitalWrite(MotorA_in2,HIGH);
    digitalWrite(MotorB_in1,HIGH);   //馬達(左)停止轉動
    digitalWrite(MotorB_in2,HIGH);
    delay(2000);
 }

blogger沒有私密文章的現成功能


原來blogger沒有私密文章的現成功能,
必須自己加入HTLML碼
參考
http://www.wfublog.com/2013/06/blogger-private-post.html

看起來無法把讀者分群

[Sensor]MPU92/65

MPU92/65是很久以前買的感測器 基本上有加速度計、陀螺儀、電子羅盤、溫度計 以下是該電子商城的介紹 https://www.factoryforward.com/product/gy-87-mpu-9265-3-axis-9-dof-attitude-gyro-magnet...