顯示具有 Arduino 標籤的文章。 顯示所有文章
顯示具有 Arduino 標籤的文章。 顯示所有文章

2020年6月19日 星期五

ROSA 2020 系統開發 4 ─ 超音波距離偵測器

https://4rdp.blogspot.com/2020/06/rosa-2020-4.html

會開發這個程式是因為正好在重新設計 ROSA,文創造設計工作室的張宇文老師正在設計一個超音波感測讓垃圾桶蓋開閉的程式,因此就順手寫一個相同功能的程式。

主程式為 ROSA_Door.ino,Arduino pin 12, 11 分別連接超音波感測器 trig, echo,pin 9 接 servo ,並使用 USB 來幫忙除錯,所以 pin 1, 0 分別為 TX, RX,baud 115200 bps,程式碼如下:

// (C) 2019-2020, Bridan Wang, CC BY-NC-SA 3.0 TW
// This is a demo program applied Robot Operating System for Arduino (ROSA)
// http://4rdp.blogspot.tw/search/label/ROSA%20(Arduino)

//軟件許可協議
//
//研發養成所 Bridan Wang 提供此軟體供學校教育或個人單獨使用
//對外分享展示本軟體時,請說明來源來自研發養成所
//你可以架構在本軟體基礎上,設計新功能或修改
//本軟體屬於 Bridan 和或其它原始碼供應商,並受適用的法律版權保護
//此軟體按“原樣”提供,可能含有錯誤,不作任何明示,暗示或法律的保證
//本軟體僅限 Arduino 部分微控制器產品,適用於特定用途
// Bridan 在任何情況、環境以及特殊使用不負任何原因損害賠償責任
//
//這是 ROSA 韌體版本的一部分。
//
//建議使用 Arduino-1.8.8 以後版本編譯,因為有發現舊版本有錯誤情形

 
/***********************************************************
// System Condition DEFINE
************************************************************/
#define PRODUCT  "ROSA,Door "
#define VERSION  "v2020.5.12"

//#define TIME_2ms      // ROSA_TIME_2ms()
//#define TIME_10ms     // ROSA_TIME_10ms()
#define TIME_50ms       // ROSA_TIME_50ms()
//#define TIME_100ms    // ROSA_TIME_100ms()
//#define TIME_250ms    // ROSA_TIME_250ms()
#define TIME_500ms      // ROSA_TIME_500ms()
//#define TIME_1sec     // ROSA_TIME_1sec()

//#define TIME_SYSTEM   // ROSA_TIME_SETUP()

#define STRING_LENGTH 25
/*********************************************************** // Include ************************************************************/ #include ".\ROSA\ROSA_BASE.cpp" #include ".\ROSA\ROSA_LINK.cpp" #include ".\ROSA\ROSA_SENSOR.cpp" #include ".\ROSA\ROSA_SERVO.cpp" ROSA_LINK  link; ROSA_SONAR sonar; ROSA_SERVO servo; /*********************************************************** // Main Program ************************************************************/ void setup() {   link.USB_SETUP(115200);         // pin 1, 0  TX, RX USB, 115200 baud   sonar.SETUP(12, 11);            // pin trig, echo   servo.SETUP(9);                 // pin 9 } void loop()  {   ROSA_TIME_RUNNING();       // 系統時間處理 } /*********************************************************** // SYSTEM TIMER ************************************************************/ void ROSA_TIME_50ms() {   servo.PROCESS();           // 伺服馬達處理 } void ROSA_TIME_500ms() {   int cm = sonar.DETECT();   // 超音波偵測   link.PRINT(STRING("Distance : %d cm\n", cm)); // 印出以便偵錯      if (cm < 25) {             // 接近時開動     servo.setAngle = 180;     servo.hold = HOLDON;   } else if (cm > 100) {     // 遠離時關閉     servo.setAngle = 0;     servo.hold = 0;   } }

2020年5月30日 星期六

ROSA 2020 系統開發 2 ─ 投幣計時器 (4rdp Timer)

https://4rdp.blogspot.com/2020/05/rosa-2020-2-4rdp-timer.html

每次創客活動擺攤,4rdp 益智拼圖攤位前總是一堆遊客玩拼圖,因此讓我興起十元投幣贈獎的念頭,設計一個投幣計時器,投入十塊錢開始計時,只要五分鐘內排好拼圖,現場獎品隨便挑,反正家中很多雜物藉機出脫,即使拼圖沒賣出一個,總是有人會殺時間嘗試拼圖能力吧!

去年因參加創客比賽,學會雷切木盒子設計,因此計時器從外觀設計到內部電路及程式設計,一手包辦,下次擺攤時,這個計時器就可以讓遊客們打賞使用。

電路的挑選就是 Arduino Uno 和 LCD KeyPad 模組,一個按鈕 (停止鍵) 和微動開關 (偵測投幣)。

這個 LCD KeyPad 模組,使用 Arduino pin 4 ~ 9,pin 10 為背光控制,A0 是按鍵讀取的腳位,利用類比方式處理,因此不會占用過多數位腳,不過模組的按鍵這裡沒有使用。 另外這個投幣計時器使用 pin 3 偵測計時啟動,pin A1 偵測計時停止,這兩隻腳都設定數位輸入,並且 PULLUP,所以未按鍵時會讀到 1。

程式當然是使用 ROSA 2020,它使用了ROSA_BASE.cpp 、ROSA_DISPLAY.cpp、ROSA_TIMER.cpp 三個函式庫,ROSA_DISPLAY 內含 LCD KeyPad 驅動程式,並引用外部的程式庫 LiquidCrystal.h (Arduino 內含的程式庫)、LCDKeypad.h,ROSA_TIMER 函式可以處理碼錶正數和倒數計時,ROSA_BASE 除了基本時間和 IO 腳控制外,還加入 STRING,可將整數依據格式轉換成字串,這個 STRING 讓我花了五天時間把它最佳化,下一篇文章再仔細介紹設計的關鍵在哪裡。

現在繼續看 ROSA_Coin.ino 程式碼,系統使用 2ms 和10ms,2ms 用於碼錶計時,也是 ROSA 系統最小時間單位,10ms 為按鍵讀取時間間隔,原本設定 50ms 即可,不需要這麼密集,但是怕有人反應計時器按鍵反應遲鈍誤差高達 50ms,所以選擇 10ms,另外 Stop 按鍵持續一秒鐘,會把時間歸零。










// (C) 2019-2020, Bridan Wang, CC BY-NC-SA 3.0 TW
// This is a demo program applied Robot Operating System for Arduino (ROSA)
// http://4rdp.blogspot.tw/search/label/ROSA%20(Arduino)

//軟件許可協議
//
//研發養成所 Bridan Wang 提供此軟體供學校教育或個人單獨使用
//對外分享展示本軟體時,請說明來源來自研發養成所
//你可以架構在本軟體基礎上,設計新功能或修改
//本軟體屬於 Bridan 和或其它原始碼供應商,並受適用的法律版權保護
//此軟體按“原樣”提供,可能含有錯誤,不作任何明示,暗示或法律的保證
//本軟體僅限 Arduino 部分微控制器產品,適用於特定用途
// Bridan 在任何情況、環境以及特殊使用不負任何原因損害賠償責任
//
//這是 ROSA 韌體版本的一部分。
//
//建議使用 Arduino-1.8.8 以後版本編譯,因為有發現舊版本有錯誤情形


/***********************************************************
// System Condition DEFINE
************************************************************/
#define PRODUCT  "ROSA- 4rdp Timer"
#define VERSION  "v2020.5.12"

#define TIME_2ms      // ROSA_TIME_2ms()
#define TIME_10ms     // ROSA_TIME_10ms()
//#define TIME_50ms     // ROSA_TIME_50ms()
//#define TIME_100ms    // ROSA_TIME_100ms()
//#define TIME_250ms    // ROSA_TIME_250ms()
//#define TIME_500ms    // ROSA_TIME_500ms()
//#define TIME_1sec     // ROSA_TIME_1sec()

//#define TIME_SYSTEM   // ROSA_TIME_SETUP()

#define PROJECT_ROOT C:\Users\bridwang\Desktop\Bridan\ROSA_2020
#define TO_STRING(s) #s
#define ABSOLUTE_PATH(root, relative_path) TO_STRING(root\relative_path)
#define RELATIVE_PATH(library) ABSOLUTE_PATH(PROJECT_ROOT, library)
/***********************************************************
// Include
************************************************************/
#include RELATIVE_PATH(ROSA\ROSA_BASE.cpp)
#include RELATIVE_PATH(ROSA\ROSA_DISPLAY.cpp)
#include RELATIVE_PATH(ROSA\ROSA_TIMER.cpp)

ROSA_PIN        key_start;
ROSA_PIN        key_stop;
ROSA_LCD_KEYPAD lcd;
ROSA_TIMER      timer;

/***********************************************************
// Main Program
************************************************************/
void setup() {
  timer.START(0, 0, 0, 0, 0);        // start, hr, min, sec, msec  
  key_start.SETUP(3, INPUT_PULLUP);  // pin 3
  key_stop.SETUP(A1, INPUT_PULLUP);  // pin A1
  lcd.SETUP();                       // pin 4 ~ 9, 10, A0
  DISPLAY_INITIAL();
}

void loop() 
{
  ROSA_TIME_RUNNING();     // 系統時間處理
  DISPLAY_UPDATE();
}

/***********************************************************
// DISPLAY
************************************************************/

void DISPLAY_INITIAL() {
  lcd.CLEAR();
  lcd.PRINT(PRODUCT);
  lcd.CURSOR(0,1);   // 換行
  lcd.PRINT("  00:00:00.000");
}

void DISPLAY_UPDATE() {
  lcd.CURSOR(2,1);   // 換行
  lcd.PRINT(STRING("%02d:", timer.hr));
  lcd.PRINT(STRING("%02d:", timer.min));
  lcd.PRINT(STRING("%02d.", timer.sec));
  lcd.PRINT(STRING("%03d", timer.msec));
}

/***********************************************************
// SYSTEM TIME
************************************************************/
void ROSA_TIME_2ms()
{
  timer.RUNUP();
}

void ROSA_TIME_10ms()
{
  if (key_stop.IN()==0) {
    if (key_stop.count == 100)        // 持續按 STOP 一秒
      timer.START(0, 0, 0, 0, 0);     // start, hr, min, sec, msec
    else {
      timer.start = 0;                // 按一下 STOP
      key_stop.count++;
    }
  } else {
    key_stop.count = 0;
    if (key_start.IN()==0)            // 投幣 START
      timer.START(1, 0, 0, 0, 0);     // start, hr, min, sec, msec
  }
}

2020年5月22日 星期五

ROSA 2020 系統開發 1 ─ LED control

https://4rdp.blogspot.com/2020/05/rosa-2020-1-led-control.html

今年因為 COVID-19 的關係,把一些活動行程打亂,最近有空再重整 ROSA (Robot Operation System for Arduino) 程式碼,程式庫改以 C++ 物件導向設計,因此 ROSA 2020 跟 ROSA 2019 還是有許多差異,不過基本概念仍然相通。以下程式使用 Arduino Uno 控制 LED 為例,將程式寫得更結構化,以此 ROSA 再出發。


ROSA 主程式目錄檔案

ROSA 函式庫檔案

主程式為 ROSA_LED.ino,下面藍色部分,它讓 pin 13 的 LED 亮 250 ms,滅 250 ms 循環閃爍,因為這程式不需要處理日期時間,所以取消綠色部分的程式,可讓程式更小。關於 ROSA 系統參數設定,基本上標示作品名稱及日期版本,和重要 #define,ROSA 設計成函式庫型式,就是讓一般使用者專注寫自己的程式碼,而專業開發者提供精簡好用的功能, 這些 #define 和 #include 是介於兩者之間的橋樑,讓那些函式庫程式碼引入,個人覺得這些放在主程式比較醒目,提醒使用者他的設定。

// (C) 2019-2020, Bridan Wang, CC BY-NC-SA 3.0 TW
// This is a demo program applied Robot Operation System for Arduino (ROSA)
// http://4rdp.blogspot.tw/search/label/ROSA%20(Arduino)

//軟件許可協議
//
//研發養成所 Bridan Wang 提供此軟體供學校教育或個人單獨使用
//對外分享展示本軟體時,請說明來源來自研發養成所
//你可以架構在本軟體基礎上,設計新功能或修改
//本軟體屬於 Bridan 和或其它原始碼供應商,並受適用的法律版權保護
//此軟體按“原樣”提供,可能含有錯誤,不作任何明示,暗示或法律的保證
//本軟體僅限 Arduino 部分微控制器產品,適用於特定用途
// Bridan 在任何情況、環境以及特殊使用不負任何原因損害賠償責任
//
//這是 ROSA 韌體版本的一部分。
//
//建議使用 Arduino-1.8.8 以後版本編譯,因為有發現舊版本有錯誤情形


/***********************************************************
// System Condition DEFINE
************************************************************/
#define PRODUCT  "ROSA,LED "
#define VERSION  "v2020.5.11"

//#define TIME_2ms      // ROSA_TIME_2ms()
//#define TIME_10ms     // ROSA_TIME_10ms()
//#define TIME_50ms     // ROSA_TIME_50ms()
//#define TIME_100ms    // ROSA_TIME_100ms()
#define TIME_250ms    // ROSA_TIME_250ms()
//#define TIME_500ms    // ROSA_TIME_500ms()
//#define TIME_1sec     // ROSA_TIME_1sec()

//#define TIME_SYSTEM   // ROSA_TIME_SETUP()

/***********************************************************
// Include
************************************************************/
#include ".\ROSA\ROSA_BASE.cpp"

ROSA_PIN     led;

/***********************************************************
// Main Program
************************************************************/
void setup() {
  //ROSA_TIME_SETUP(20, 5, 9, 0, 0, 0) ;  // YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
  led.SETUP(13, OUTPUT);                  // pin 13
}

void loop() 
{
  ROSA_TIME_RUNNING();     // 系統時間處理
}

/***********************************************************
// SYSTEM TIME
************************************************************/
void ROSA_TIME_250ms()
{
  led.OUT(CHANGE);     // 閃爍
}

所有 ROSA 程式必須包含 ROSA_BASE.cpp 函式庫,它是 ROSA 的基礎程式,先看一下程式碼,先說明跟時間相關部分,根據主程式 #define 設定,將需要的程式碼含入編譯。

2019年8月18日 星期日

呼吸燈設計

https://4rdp.blogspot.com/2019/08/blog-post.html

以 mBot 當載體,以 ROSA 為程式架構,設計呼吸燈

為 4rdp 拼圖夜燈設計燈光控制,這程式包含了亮度控制、呼吸燈、變色燈三種模式,現在簡易說明如下:

顏色控制 ─ 以 RGB 三色混光,每色數值 0 ~ 255
亮度控制 ─ lit_speed = 0 時,lit_auto 決定亮度,lit_auto = 0 燈滅, lit_auto = 255 燈最亮
呼吸燈 ─ lit_auto = 0 時,lit_speed 控制呼吸速度,1 最快,9 最慢,變化範圍 0.3 ~ 2.7 秒
變色燈 ─ lit_auto = 1~7 時,lit_speed 控制變色速度,1 最快,9 最慢,變化範圍 0.3 ~ 2.7 秒

程式碼如下:

2017年11月5日 星期日

ROSA 系統開發 44 ─ ROSA 四合一控制

https://4rdp.blogspot.com/2017/11/rosa-44-rosa.html


11月4, 5 兩天,馥林文化在台北華山舉辦 Maker Faire Taipei - 2017,受林益成的機甲人形師的覓星工坊邀請,帶著 RWG Spider 6x2 以及 OTTO like 去他的攤位支援,這次參展和十月新北自造者嘉年華差異的地方,主要在展現 ROSA 四合一控制。

什麼是 ROSA 四合一控制?可以 PS2 搖桿、紅外線、藍牙、USB 同時下指令控制,無需模式切換,這代表 ROSA 已經完全內部整合這些操控裝置。

新增 PS2 無線搖桿控制,喜歡機器人打鬥的人一定超喜歡這支搖桿,因為十月新北自造嘉年華參展時,看到益成利用 PS2 無線搖桿控制它的機器人,很受小朋友歡迎,因此在十幾天內加入了這支搖桿控制功能,它有三種方式操控:走路模式、攻擊模式、跳舞模式

2017年9月3日 星期日

Power Bank IC 研究系列 3 - MP3401

https://4rdp.blogspot.com/2017/09/power-bank-ic-3-mp3401.html

之前分析過 FM9833ETP4293 ,現在以相同手法測這個 MP3401。


雖然上網查不到 MP3401 的規格書,

2017年8月26日 星期六

Power Bank IC 研究系列 2 - TP4293

https://4rdp.blogspot.com/2017/08/power-bank-ic-2-tp4293.html

圖片來源 http://china.herostart.com
之前分析過 FM9833E ,現在以相同手法測這個 TP4293。

雖然上網查不到 TP4293 的規格書,

2017年8月10日 星期四

Power Bank IC 研究系列 1 - FM9833E

https://4rdp.blogspot.com/2017/08/power-bank-ic-1-fm9833e.html

製作機器人時,電源是很重要的關鍵部分,少了電源,就像人沒吃飯一樣,不是軟弱無力,不然就是一動也不動,雖然以前我曾經提出兩種解決方案 (一個是行動電源,另一個是 18650 簡易電源),但它們不是最佳方案,所以拆解手邊廢棄的行動電源進行研究,看看別人怎樣設計,我可以改善甚麼?所以這一系列研究,就是先看裡面的控制 IC,然後進行一些簡易測試,以了解控制特性。


上網查 FM9833E 的規格書,

2016年8月6日 星期六

C++程式設計實習 ─ 趣玩 Arduino

https://4rdp.blogspot.com/2016/08/c-arduino.html


C++程式設計實習 ─ 趣玩 Arduino,ISBN 978-986-463-276-3,陳會安編著,全華圖書出版。

會發現這本書,是因為近日工作任務更動,以前專寫嵌入式系統控制器,而新任務是寫 PC 端的驅動程式 DLL,需重新學習 C++ 與 C# 程式語言, 雖然此書跟工作沒有直接關連,由於本人有在玩 Arduino,所以就在書局翻翻內容,發現書中有兩樣有趣的東西值得關注。

第一個有趣的東西是作者自己開發的 fChart 流程圖直譯教學工具

2016年7月30日 星期六

自製 18650 電源給 Arduino

https://4rdp.blogspot.com/2016/07/18650-arduino.html

看網友 Pizg 日前發表一篇「自製取代9V方形電池的Arduino電源」,而我手邊只有 18650 鋰電池,但是沒有 16500 鋰電池,雖然兩者在尺寸及電容量大小方面有顯著差異,不過 3.7 V 電壓卻是相同的,我就以 18650 當實驗對象,看它應用於 RWG Spider 有甚麼需要注意的事項。

RWG Spider 的 Arduino 電路結構是以 Uno 為底,架疊一個 IO 擴展板在上方,如果使用 USB 隨身行動電源,電路板是不必做任何更動,因為上下電源一致 5 V。但是直接使用兩顆鋰電池串接電壓 = 7.4 V,不能直接把這高於 5 V 電壓灌入 Uno,因為這樣 Uno 上的晶片都會過電壓燒毀。解決的方法就是把 IO 擴展板的 5 V 針腳切斷,如下圖紅箭頭所示,上圖打 X 的地方就是表示針腳切斷。

切斷 5 V 後,兩塊板子是共地相連,雖然

2016年1月27日 星期三

P&B Spider 的 Arduino 接線

https://4rdp.blogspot.com/2016/01/p-spider-arduino.html

今天貼出 P&B Spider 電路接線的方法,將 Arduino Shield V5 接到 Arduino Uno 上方,然後紅外線接收模組接在 D2,USB 轉 TTL 傳輸線 (也可以自製 USB 電源線) 的紅線接在 V,黑線接在 G,綠及白線未使用。

然後 SG-90 分別接到 4, 5, 6, 7, 9, 10, 11, 12。

2015年10月31日 星期六

ROSA 系統開發 11 ─ PS2 搖桿控制

https://4rdp.blogspot.com/2015/10/rosa-11-ps2.html

圖片來自 http://www.ltc.com.tw/
能與 Arduino 相連接的遊戲模組,以 PS2 搖桿最常見,俗稱香菇頭,它有 5 pin 端子,為 +, -, B, X, Y,分別與 Arduino 的 5V、GND、Dx、Ax、Ax 相接,Dx 是數位輸入腳,平時為 0當有按壓時為 1,Ax 為類比輸入腳,平常讀值約為 512,當搖桿偏一邊為 <200 或 >800,所以可以用這判斷搖桿偏向何處。










// (C) 2015, Bridan Wang, CC BY-NC-SA 3.0 TW
// http://4rdp.blogspot.tw/search/label/ROSA%20(Arduino)

// normal pin control
byte D_IN(byte p){
  pinMode(p, INPUT);
  return digitalRead(p);
}
unsigned int A_IN(byte p){
  pinMode(p, INPUT);
  return analogRead(p);
}

void PROCESS_1sec(void){
  Serial.print("A0 - (Y) ");
  Serial.println(A_IN(A0));
  Serial.print("A1 - (X) ");
  Serial.println(A_IN(A1));
  Serial.print("A2 - (B) ");
  Serial.println(D_IN(A2));
}

2015年8月12日 星期三

Arduino 程式空間比較

https://4rdp.blogspot.com/2015/08/arduino.html

這份技術文件對直接使用 Arduino 寫系統大程式的朋友應該會有些幫助,因為之前設計 ROSA 時把 RAM 寫爆掉,因此我需要重新思考,如果想將 mBot 含入 ROSA 功能,那麼 Arduino 還剩多少記憶空間可以給 ROSA 使用?

因此,我計算一下 Arduino 常用程式庫大約占用記憶體空間狀況如下:

2015年7月4日 星期六

程式壓縮技巧 2 ─ 彙整副程式

https://4rdp.blogspot.com/2015/07/2.html

這個技巧可以壓縮較多程式碼,簡單的說就是把重複的程式碼彙整出副程式,請見下例:


修改前,程式使用 522 bytes

char num = 2;
char a = 'D';

void setup()
{    
    if (num == 0) {
        a = 'A';
        num += 1;        
    } else if (num == 1) {
        a = 'B';
        num += 1;
    } else if (num == 2) {
        a = 'C';
        num += 1;
    }
}

void loop()
{
}

2015年6月27日 星期六

程式壓縮技巧 1 ─ 常數、變數排列重整

https://4rdp.blogspot.com/2015/06/1.html

從本週起,有空將陸陸續續發表一些程式壓縮技巧,通常 PC 上執行的程式比較沒有大小限制的問題,不過這對單晶片程式設計很重要,尤其是低價或是簡易功能的商品,多是選用小型 MCU,ROM size <= 64 kB,以前曾設計過 4 kB 微波爐控制器還含有食譜的火力表,因此寸土寸金的程式空間要擠下那麼多功能,再再考驗程式設計師的智慧與功力。

言歸正傳,程式壓縮技巧百百種,只要掌握基本原則,編譯後程式碼自然縮減許多,本文先點出一個簡單但很容易忽略的方法,那就是把常數、變數位址重新整理調整

Arduino 例子如下: