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

2016年7月30日 星期六

Android與mBot機器人藍芽連線並透過藍芽傳送訊息

此範例檔的藍芽連線,需事先在手機做好與藍芽裝置的配對,android再指定對方藍芽裝置的MAC位置進行連線
*此範例是與mBot的藍芽裝置連線,若是藍芽裝置接麵包板可能要設定pin腳,不適用本範例,但可參考android藍芽連線


Android部分
AndroidManifest.xml
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission
android:name="android.permission.BLUETOOTH_ADMIN" />

建立一個類別檔叫AsClientConnectBT
public class AsClientConnectBT {
    BluetoothAdapter mBtAdapter = BluetoothAdapter.getDefaultAdapter();
    BluetoothSocket socket;
    BluetoothDevice device;
    InputStream inStream;
    OutputStream outStream;
    UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb")//固定的字串
    byte[] msgBuffer;

    public AsClientConnectBT(){
        device = mBtAdapter.getRemoteDevice("00:0D:19:03:17:D5")//對方藍芽裝置MAC位置
        try {
            socket = device.createRfcommSocketToServiceRecord(MY_UUID);
            inStream = socket.getInputStream();     //接收傳來的資料
            outStream = socket.getOutputStream();   //傳送資料給arduino
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void run(){
        try {
            socket.connect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void cancel(){
        try {
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    public void SendMsg(){
        try {
            outStream = socket.getOutputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }

        msgBuffer = "0".getBytes()//傳送0

        try {
            outStream.write(msgBuffer);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

MainActivity檔案
public class MainActivity extends AppCompatActivity {
    AsClientConnectBT clientCon = new AsClientConnectBT();
    TextView tv;
    Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView)findViewById(R.id.textview);
        btn = (Button)findViewById(R.id.button);
        btn.setOnClickListener(btnClick);
        clientCon.run();
    }

    public Button.OnClickListener btnClick = new Button.OnClickListener(){
        @Override
        public void onClick(View v) {
            clientCon.SendMsg();
        }
    };
}

Arduino部分


範例檔案

紀錄Arduino IDE載入函式庫方法

2016年1月17日 星期日

Arduino UNO (LED)程式入門 with Arduino IDE

第一次使用Arduino IDE寫程式到Arduino UNO板子裡面,讓板子上的L燈(LED)根據程式設定發亮,一開始開啟Arduino IDE後先設定板子的類型與跟電腦連接的port,設定完成後確認設定是否成功,如下第二張圖,然後開始寫程式(C語言),參考如下 :
void setup() {
  // put your setup code here, to run once:
  //設定第13數位腳位做輸出
  pinMode(13, OUTPUT); 
}

void loop() {
  // put your main code here, to run repeatedly:
  //第13數位腳位輸入高電壓(5V或3.3V),此時LED就會發亮
  digitalWrite(13, HIGH);
  //停1000毫秒(ms),也就是1秒
  delay(1000);
  //第13數位腳位輸入低電壓(0V),此時LED就不會發亮
  digitalWrite(13, LOW);
  delay(1000);
}
程式完成後上傳程式到板子上,就完成L燈的發亮控制,L燈是原本已經焊接在板子的13腳位.
設定板子類型與port
確認設定成功與上傳程式
結果
Arduino pinMode()函式是在設定數位輸入/輸出的腳位,格式為 : pinMode(pin, mode)
pin : 為數位腳位設定.
mode : 有三種模式 -> INPUT : 設定數位腳位為高阻抗輸入模式
                                    INPUT_PULLUP : 設定數位腳位含上升電阻輸入模式
                                    OUTPUT : 設定數位腳位為輸出模式

2016年1月12日 星期二

mBot 感測器 Port 問題

今天第一次試著自己寫一個讓mBot避免撞到東西的程式,也就是透過超音波感測器來測量距離,但將寫好的程式載入到Arduino uno 的板子後,mBot卻不是照程式的寫法動作,所以用Scratch的場景來測試距離的數值是否正確,但距離的數值竟然也不會變動,後來發現了兩個問題 :

一. mBot不照載入的程式跑.
原因 : 如果Arduino 板子已經有載入的程式,要再進行場景測試,必須Reset Default Program,如第二張圖,這樣角色才會照著程式執行.
將程式載入到Arduino板子

Scratch的場景測試(圖形程式開頭是有綠色的旗子)

二. 場景角色無法正確顯示感測器偵測到的數值.
原因 : 要顯示感測器偵測到的數值,必須設定感測器連接Arduino板子的接口(port)是幾號或是已經在Arduino板子上,而不是設定電腦連接Arduino板子的port號,下圖範例是光度感測器的設定,看到最後一張圖的光度感測器是已經在Arduino板子上,所以設定光度感測器是light sensor on board,而超音波感測器是在此範例是設定Port 3.

setting light sensor is light sensor on board


setting ultrasonic sensor is port 3

此圖的超音波感測器的連接線是連在Arduino板子的port 3

2016年1月11日 星期一

My first robot

2016.01.10 參加全佑電腦舉辦的mBot自走車機器人的半日課程,mBot是由Makeblock公司所製造的產品,由全佑電腦代理.

課程一開始先簡單的講解機器人的定義,然後說明如何組裝mBot,大致上就是將金屬外殼結合motor,lithium battery and some sensors. 而mbot 主要的microcontroller board是使用Arduino UNO,所以在程式開發是使用C語言,但在課程中我們是使用Scratch圖形化程式語言讓軟體自動轉譯成C語言,因此小學生也可以很容易的完成mBot的程式編輯. 程式開發的教學主要是教如何讓mBot行走和sensor的控制,最後是mBot的巡線應用.

在整個課程中實際動手寫程式,測試機器人,還蠻有趣的.在未來,機器人的服務可說是會越來越普及,尤其是在替代人力資源上,很開心擁有第一台robot. It is called mBot. ^^
組裝mBot

組裝mBot

當天課程的產品零件




2015年12月24日 星期四

Arduino 入門

Arduino是一個開放原始碼的單晶片微控制板 (Micro-controller UnitMCU)微控制器是使用ATMEL公司的ATMEGA系列的晶片,主要的差異為下表 :  
ATMEGA系列晶片記憶體大小比較
記憶體容量
ATMEGA8
ATMEGA168
ATMEGA328
ATMEGA1280
Flash
8KB
16KB
32KB
128KB
SRAM
1KB
1KB
2KB
8KB
EEPROM
512bytes
512bytes
1KB
4KB



腳位0,1序列通訊RX為接收TX為傳送
腳位3,5,6,9,10,11PWM類比輸出 (PWM, Plus Width Modulation)
腳位0-13數位輸入或輸出
GND為接地接腳,也代表電池的負極
AREF為類比參考

腳位A0-A5類比輸入(也可以做為數位I/O之用)
Vin連接至9-15V直流電壓輸入
GND為接地接腳
3.3V5V為電壓輸出
RESET重置

Arduino程式的結構包含setup()loop()兩個函數
void setup()
{
}
setup()用來初始化變數、設定接腳模式為輸入或輸出等。在每次通電或重置Arduino電路板時,setup()只會被執行一次

void loop()
{
}
loop()用來控制Arduino電路板執行所需的功能,loop函式執行完,會一直被重複呼叫執行,直到關閉電源。

*電阻 : 一般LED只需要1.7到4伏特,但使用的電池的電壓有5伏特,所以要確保LED不會接收過多的電流,就會使用電阻,來阻止過多的電流到LED