Tag Archives: lego

[預計年底出版] LabVIEW 高階機器人教戰手冊 – 適用樂高EV3與NXT機器人平臺

我們在 2010 年末出版了 [LabVIEW 高階機器人教戰手冊],使用樂高NXT機器人作為硬體平台,經過了四年之後,要改版到 EV3 機器人也可以用囉。預計年底出版,敬請期待。

您可以先下載 LabVIEW 2012 之後版本的試用版再加上 LabVIEW Module for LEGO MINDSTORMS 就可以了。

請參考:

1. [EV3 + LabVIEW]LabVIEW Module for LEGO MINDSTORMS 可以下載了

2. CAVEDU LabVIEW研究室 

9-11    9-17a

章節如下,新增了 Ch10資料擷取與分析與 Ch15 Kinect 視覺辨識與體感互動,內容更全面囉:

1

LabVIEW概述

2

LEGO Mindstorms EV3概述

3

LabVIEW初體驗

4

迴圈

5

運動

6

感測器原理與應用

7

數值運算

8

其他EV3功能

9

直接控制模式

10

資料擷取與分析

11

LabVIEW概述

12

Lineleader 終極軌跡車

13

NXTCam  機器人視覺

14

圖靈機

15

Kinect 視覺辨識與體感互動

附錄A

基本車體組裝

附錄B

LabVIEW的EV3程式集

附錄C

LabVIEW的其它機器人平臺

附錄D

取得LEGO MindStorms NXT Module

附錄E

參考書籍與線上資源

麻花救星 – MindSensors 滾珠軸承座,特價$750

您的樂高十字軸曾經這樣過嗎?尤其是在使用NXT大扭力馬達時,常常不小心就讓軸變成這樣了…   真是悲劇啊

現在 MindSensors 推出了有趣的滾珠軸承座,金屬製的喔。四邊平均都有十字孔,可以將扭力分散到軸承座上。萬一出了差錯,也不會對結構造成太大的傷害。

一包四個特價$750,歡迎訂購,請留言、來信或來電洽詢。 service@cavedu.com / 02 23062900

2014-06-24 13.24.35 2014-06-24 13.26.01

 

 

140713 LabVIEW 樂高EV3機器人高階圖控程式研習營

報名網頁請按我

LabVIEW是由美商國家儀器股份有限公司(National Instruments,簡稱NI)所開發的圖形化程式平台。LabVIEW早期的目標是為了實現各種儀器的自動控制,至今已成為一成熟且完善的高階程式語言。LabVIEW採用圖形化程式設計,與傳統文字式程式語言,例如C或Java等,LabVIEW最大的特點在於採用了「資料流」的概念,使得程式設計者在流程圖構思完畢的同時也完成了程式的撰寫。

本日研習將使用 LabVIEW 結合熱門的樂高EV3 教育性機器人平台,除了基礎硬體控制之外,例如感測器與馬達,還可使用 LabVIEW 強大的資料分析與運算功能,將機器人作為更豐富多元的教學載具,進行各種整合應用。在本次研習中您將可藉由Raspberry Pi 踏入 Linux 的世界,以及Raspberry Pi 所展現的諸多應用。

主辦單位:CAVEDU 教育團隊、翰尼斯企業有限公司

協辦單位:台灣發展研究院 智能機器人研究所、《Make》國際中文版、普特企業有限公司

時間 : 103年7月13日星期日 09:30~17:00

地點 : 翰尼斯企業有限公司 台北市中正區中華路二段165號1樓

備註: 請自行攜帶筆記型電腦,以便實際操作。。

收費:3,000 。名額有限,請儘早報名

匯款方式:
銀行名稱 :華南商業銀行 雙園分行
戶名 :翰尼斯企業有限公司
銀行代號 :008
帳號 :122-10-015315-3

超級好禮相贈:
1. [LabVIEW高階機器人教戰手冊:打造智能與趣味兼具的機器人] 書籍一本,預計10月出版]

歡迎看看我們所有關於 LabVIEW 的有趣應用(樂高機器人、Arduino、Kinect 視覺辨識等等)

活動議程:

9:30 CAVE教育團隊簡介

9:50 安裝 LabVIEW 試用版
資料流程式設計概念
控制元件與顯示元件

10:30 樂高EV3 機器人套件
硬體介紹:主機操作選單
組裝雙輪機器人
如何使用 LabVIEW控制馬達轉速與方向

12:00 中餐

13:00 LabVIEW中的常用迴圈與決策結構
高階機器人行為設計

14:00 LabVIEW 的資料擷取與分析
基礎統計量與極值分析

15:00 結合鍵盤滑鼠來控制機器人

16:50 結語、賦歸

注意:主辦單位保留修改與解釋活動之所有權利。

服務電話:02-23062900
service@cavedu.com

140503 機器人體驗營@國立中興大學附屬高級中學

5/3 星期六, CAVEDU小黃老師,同時也是積木星球球長來到了台中的國立中興大學附屬高級中學辦理一日機器人體驗營。

興大附中以及鄰近學校的同學們都可以自由報名,就用陽光普照的周六下午來玩機器人吧。參加的女同學不少喔,表現也相當不錯

SONY DSC  SONY DSC SONY DSC

先從簡單的來,機器人左去右回

SONY DSC

進階一點則是使用觸碰感測器來走出一個ㄇ字型迷宮。需要注意不要讓機器人撞到牆壁就解體或是卡在牆角

SONY DSC

最後則是軌跡車,大家都走的很不錯喔

SONY DSC

Sariel 的積木單位換算工具

http://studs.sariel.pl/  <- Sariel 的積木單位換算工具

樂高的積木塊,是以凸點(或圓孔)圓心彼此之間的距離為單位,稱為1M = 0.8 cm(我記得實際的規格是 0.76cm)。另一方面樂高積木是底面的長寬相等(0.8cm),高不相等(0.96cm)。所以在垂直方向或斜方搭建時,有時候會對不到孔位。

因此當要製作比較大型的專題時,確實掌握專題的尺寸是很重要的。

感謝樂高大師 Sariel 提供這個好用的工具, 這樣在計算上就更方便了。另外他也提供了輪子的規格表 http://wheels.sariel.pl/ ,歡迎多多利用喔

pic02_wire.jpg96d9863f-ff42-4107-ab67-c4b281ca38d5Large

(圖片來源:http://sariel.pl)

500px-Lego_dimensions.svg_

(圖片來源: http://www.lucasbrouwers.nl/blog/2011/05/why-life-is-like-lego/)

開啟網頁之後直接填入任何欄位,其它欄位都會自動換算出來. 右上角的 Scaled result 是按比例縮放後的計算結果。超方便

444

[Android 結合 Google Chart API] 機器人原地轉一圈產生雷達圖

機器人原地轉一圈之後,將超音波感測器值透過藍牙送給Android 手機,再呼叫 Google Chart API 雲端圖表功能來取得雷達圖。可以畫出非常精美的圖表。重點在於靈活應用 Google Chart API  的語法就可以囉!

直接點選以下連結就可以看到雷達圖,詳細參數設定請參閱 Google Chart API 官網或以下延伸閱讀

https://chart.googleapis.com/chart?cht=r&chs=320×320&chxt=x&chxl=0:|0|45|90|135|180|225|270|315&chd=t:60,40,30,100,76,99,22,57,80

本範例是結合樂高機器人的超音波感測器來達到簡易地圖掃描的效果,歡迎試試看。以下範例是2014年淡江大學智慧型行動裝置整合機器人控制課程的作業之一。感謝電機系周煜同學(已畢業)做出相當好的版本呢。

 

12345

[youtube=http://www.youtube.com/watch?v=DBvhrxkb24M]

延伸閱讀:

Google Chart API 教學

Google Chart 隨機產生折線圖

淡江電機 Android 機器人整合課程網站

140523淡江電機 Android 行動裝置整合機器人控制課程,期末專題展示

Code Android端

package com.example.nxtsense;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Set;
import java.util.UUID;



import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.os.Build;

public class MainActivity extends ActionBarActivity {
	private BluetoothAdapter adapter;
	private BluetoothSocket nxtSocket;
	public DataInputStream nxtDataIn;
	public DataOutputStream nxtDataOut;
    public final int MODE_CONNECT_NXT = 0, MODE_CONTROL = 1;
    private int mode;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);
        adapter = BluetoothAdapter.getDefaultAdapter();
    	if(adapter==null)
        {
        	Toast.makeText(this, "No Bluetooth adapter found", Toast.LENGTH_SHORT).show();
        	this.finish();
        }
    	if(!adapter.isEnabled())
			startActivityForResult(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE), 1);
    	
    	try {
			setMode(MODE_CONNECT_NXT);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	
    	Button getvalue=(Button)findViewById(R.id.get);
    	getvalue.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				try {
					CommandNXT();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
		});
        
    }

    public void CommandNXT() throws IOException{
    	String y="";
    		nxtDataOut.writeInt(1);
    		nxtDataOut.flush();
    	
    	//	int x=nxtDataIn.readInt();
    		y=String.valueOf(nxtDataIn.readInt())+","
    				+String.valueOf(nxtDataIn.readInt())+","
    				+String.valueOf(nxtDataIn.readInt())+","
    				+String.valueOf(nxtDataIn.readInt())+","
    				+String.valueOf(nxtDataIn.readInt())+","
    				+String.valueOf(nxtDataIn.readInt())+","
    				+String.valueOf(nxtDataIn.readInt());
    	
					//TextView tv=(TextView)findViewById(R.id.value);
			    	//tv.setText(String.valueOf(x));
		
    	String myURL =" https://chart.googleapis.com/chart?cht=r&chs=320x320&chxt=x&chxl=0:|0|45|90|135|180|225|270|315&chd=t:"+y;         
        WebView myBrowser=(WebView)findViewById(R.id.mybrowser);  
  
        WebSettings websettings = myBrowser.getSettings();   
        websettings.setJavaScriptEnabled(true);  
         
        myBrowser.setWebViewClient(new WebViewClient());  
  
        myBrowser.loadUrl(myURL);  	
    	
    	
    	
    }
    public void setMode(int _mode) throws IOException
    {
    	Button connect=(Button)findViewById(R.id.buttonConnect);
    	mode = _mode;
    	if(mode==MODE_CONNECT_NXT)
    	{
    		
    		connect.setOnClickListener(new Button.OnClickListener() {
    			public void onClick(View arg0) {
    				connectNxt();
    				}
            });
    	}
    	
    	else if(mode==MODE_CONTROL)
    	{
    		connect.setEnabled(false);
    	}
    	else 
    		throw new IllegalArgumentException();
    }
    
    private void connectNxt()
    {
    	if(mode!=MODE_CONNECT_NXT) //檢查模式
    		throw new IllegalArgumentException();
    	
    	String name;
    	BluetoothDevice nxt = null;
    	
    	if((name = ((EditText) findViewById(R.id.editNxtName)).getText().toString()).equals("")) //檢查是否為空字串
    	{
    		Toast.makeText(this, "Please provide the name of your NXT", Toast.LENGTH_SHORT).show();
    		return;
    	}
    	
        Set<BluetoothDevice> devicesSet = adapter.getBondedDevices(); //取得裝置清單
        
        if(devicesSet.size()==0) //找不到裝置
        {
        	Toast.makeText(this, "No devices found", Toast.LENGTH_SHORT).show();
        	return;
        }
        
        for (BluetoothDevice device : devicesSet) //搜尋裝置
        {
            if (device.getName().equals(name))
            {
            	nxt = device;
                break;
            }
        }
        
        if(nxt==null) //找不到裝置
        {
        	Toast.makeText(this, "NXT not found", Toast.LENGTH_SHORT).show();
        	return;
        }
        
        try
        {
        	//建立nxt socket
			nxtSocket = nxt.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
			nxtSocket.connect();
			nxtDataOut = new DataOutputStream(nxtSocket.getOutputStream());
			nxtDataIn = new DataInputStream(nxtSocket.getInputStream());
		}
        catch(IOException e)
		{
        	Toast.makeText(this, "Connection failure", Toast.LENGTH_SHORT).show();
        	return;
		}

    	Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
		try {
			setMode(MODE_CONTROL);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }




   

}
Code. Android receive ultrasonic value from Lego robot

Code 機器人端使用 leJOS

import lejos.nxt.*;
import lejos.nxt.comm.*;
import lejos.util.Delay;

import java.io.*;
public class motor_control{
	public static void main(String args[]) throws IOException{
		Button.ESCAPE.addButtonListener(new ButtonListener(){
				public void buttonPressed(Button b){
					System.exit(0);
					}
				public void buttonReleased(Button b){
					
				}
		});
		System.out.println("Waiting");
		BTConnection btc = Bluetooth.waitForConnection(0, NXTConnection.RAW);
		DataInputStream dis = btc.openDataInputStream();
		DataOutputStream dos = btc.openDataOutputStream();
		System.out.println("Connected");
		UltrasonicSensor ultrasonic1 = new UltrasonicSensor(SensorPort.S2);
		int Ultrasonicvalue1;
		while(true){
			int a=dis.readInt();
			if(a==1){
				for(int i=0;i<7;i++){
					Motor.A.setSpeed(100);
					Motor.B.setSpeed(100);
					Motor.A.backward();
					Motor.B.forward();
					Delay.msDelay(822);
					Ultrasonicvalue1=ultrasonic1.getDistance();
		//	System.out.println(Ultrasonicvalue1);
			
				try {
					dos.writeInt(Ultrasonicvalue1);
					dos.flush();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			
			}
				Motor.A.setSpeed(0);
				Motor.B.setSpeed(0);
				Motor.A.backward();
				Motor.B.backward();
			}
		}
			}
}
Code. Robot send out ultrasonic value to Android (leJOS)

[有趣書籍] Make:樂高機器人與 Arduino 專題製作

http://www.books.com.tw/products/0010632752

Make:樂高機器人與 Arduino 專題製作  /  Make: LEGO and Arduino Projects

作者: John Baichtal 等
譯者:莊啟晃,黃藤毅,莊雯琇,林可凡
出版社:歐萊禮
出版日期:2014/04/17
語言:繁體中文

定價:580

getImage (1)

 

期待這本書很久了,還是全彩的很有質感呢。以下是博客來的書目與章節

結合 Lego Mindstorms NXT 與開源電子的專案製作
運用積木、感測器和微電腦控制器製作機器人

  使用當今最酷炫的 DIY 技術製作神奇的機器人與裝置。本書提供詳盡清楚的操作指引,您將學習到用 Lego Mindstorms NXT2.0 和 Arduino 模型平台製作各種電子裝置,讓您以 Mindstorms 就能創作出令人稱羨的神奇裝置;加上 Arduino 的應用能帶給我們一些意想不到的功能,進而開發出嶄新的應用。

  製作出飲料販賣機、電子音樂聲成器、無線遙控燈具等等

  書中每個有趣且神奇的實驗項目皆有詳盡製作程序及清晰的圖解說明,讓您能夠按部就班的完成各個實驗。您將學習如何設定 Arduino 撰寫程式的環境,下載 sketches 語言和所需要的函式庫,以及協助非程式專業人仕使用 Arduino 程式語言。這本書適用於學生、老師、業餘愛好人仕、製造者、駭客一族以及各個年齡層的孩童。

  透過本書您將學習到
  ‧利用繪圖機器人(Drawbot),本實驗帶您製作一個用畫筆來繪製各種圖案的機器人
  ‧示範如何使用 Mindstorms 馬達製作一個時鐘裝置,顯示精確的時間
  ‧只要按壓一個按鈕,就可以讓巧克力牛奶製造機將牛奶和巧克力糖漿均勻攪拌並放入杯中
  ‧利用滑輪與 Arduino 的護腕裝備以及一組無線控制器所組合而成的魔爪機器人(Gripperbot)
  ‧一個樂高吉他的裝置,安裝各種按鈕和旋鈕可以發出各種電子音樂!
  ‧用智慧手機控制的樂高燈具,具備 on/off 開關與明亮度調整的功能
  ‧藉由認識歐姆定律以及基本電子元件,進而親身體驗美麗的電子世界

  本書範例所引用的作法皆經由經驗豐富的專業製造人仕認證

  John Baichtal 是 MAKE 雜誌作者並負責有線(Wired)雜誌 GeekDad 部落格
  Matthew Beckler 和 Adam Wolf 是提出開源硬體構想 Wayne and Layne, LLC 的共同創辦人

chapter 01 實驗項目:Drawbot
chapter 02 樂高機器人 – 解剖分析
chapter 03 Arduino 的插曲
chapter 04 實驗項目:時鐘裝置
chapter 05 實驗項目:巧克力牛奶機
chapter 06 基本電子理論
chapter 07 魔爪機器人(Gripperbot)
chapter 08 實驗項目:吉他裝置(Keytar)
chapter 09 燈具的實驗項目
chapter 10 實驗項目:進階的技術
appendix 零件表
索引

 

140418 淡江電機 Android 行動裝置整合機器人控制課程,期中專題展示

今天阿吉老師到淡江大學上課,而今天的課程是期中的專題展示,主要的內容是於 Eclipse IDE 中使用 Java程式語言來開發各種機器人控制專題。

這次的主題有保全機器人、路面避障機器人、發射機器人、生活便利機器人、繪圖機器人、堆高機、分類機器人、測速照相機器人、搬運機器人、搖擺彈彈球、搬運機器人、大嘴鱷魚、全景拍照機器人等等。

既然是Android,同學們就要思考Android手機資源要如何與機器人整合,而不是換個程式語言玩碰碰車而已。手機上的動作感測器、GPS、照相機、網路連線、麥克風等等,對機器人來說都是很關鍵的功能啊!

另一方面,各種 Google API例如 Google Map、Google Chart、Google Application Engine 或是較簡單的語音輸入/輸出等,都能讓機器人更豐富。

來看看CAVEDU之前做的 Google Map 結合機器人的概念影片以及 openCV / Android 實作,讓機器人可以透過手機的影像辨識結果來移動。

[youtube=https://www.youtube.com/watch?v=qvI04snZRuU] [youtube=https://www.youtube.com/watch?v=k6Lelf7SNWI]

軟滑小編也有修這堂課喔!會修這堂課是因為,之前大三有修過 leJOS 樂高機器人的課程。想說要更進一步的學更多相關的課程才修的。不過本學期的課程內容比起以往難度提高很多很多,許多同學都為了把專題做的更好,準備了很久。

寫app的方式有很多種,相較起來App Inventer,java的變化更多更複雜,也代表著程式碼更多更難。所以App Inventer真的是很適合學習Android入門的程式語言喔!但換個角度來說,如果要做到更完整的功能,還是要回到 Android 正規開發環境哩,真難抉擇啊

同學們都很認真的上台報告

這組的目標是藉由手機的姿態感測器讓機器人保持在翹翹板中央,做到簡易的動態平衡控制。

來看一下同學們的作品有哪些,有些的機構設計的很不錯!

分類機器人
分類機器人Demo
大嘴鱷魚
全景拍照機器人
推高機

最後由老師講評整個專題展示結果,大家的表現… 還有很大的進步空間啦,希望學期末報告的時候都可以更棒!

阿吉老師講評

閱讀延伸

AppInventor – 圖形化Android

Android相關文章

NXT 接收 Android 藍牙字元 – 使用 LabVIEW

http://lab.cavedu.com/labview_nxt_bt   <- 程式碼請由此下載

使用Android 手機與樂高機器人之間藍牙互傳訊息。手機端程式使用App Inventor,機器人端則使用 LabVIEW 與 NXT-G。請由本頁最下方下載程式碼。
 
Android – App Inventor 2程式說明
 
STEP1:在 ListPicker1.BeforePicking事件中,將 BluetoothClient.AddressAndNames指令為 ListPicker1內容,代表點選將其內容連結到手機的已配對藍牙裝置清單。
STEP2:在 ListPicker1.AfterPicking事件中,確認連線成功之後,設定相關按鈕為 enabled/ disabled。
 
STEP3:按下按鈕之後,根據 message變數值的內容來發送 “a” 或 “b”。使用 NxtDirectCommand 對NXT指定的 mailbox (本例為 1號),送出 message變數值( “a” 或 “b”)。

 
NXT端程式說明 – LabVIEW
 
使用 Read NXT Mailbox (String)指令來讀取指定 mailbox 內容之後顯示在 NXT螢幕上。延遲時間為 0.5 秒。

lv3

[2014 Robocon雜誌專欄]輕鬆使用Android 裝置控制樂高機器人:機器人感測器如何結合Google雲端圖表

2014 年3月號的 [輕鬆使用Android 裝置控制樂高機器人] 系列來了,結合了機器人感測器與 Google Chart 雲端圖表功能,讓您的機器人在資料呈現上更豐富有趣。泛科學文章連結:http://pansci.tw/archives/57646

文/曾吉弘(CAVEDU教育團隊

MIT 行動學習中心已發表 App Inventor 2 ,省略了需要使用 Java 才能開啟的 Blocks Editor,將其整合在網頁中即可使用,可說是與 Scratch 愈來愈像了。在操作上也將各指令藉由下拉式選單大幅簡化。不過App Inventor 2在指令上與前一版的App Inventor 是差不多的,相信您可以很快上手。請到App Inventor 中文學習網(http://www.appinventor.tw) 來登入App Inventor 2 開發網站並認識更多新功能。

本次是要把樂高NXT的光感測器值,每十筆為單位更新到GoogleChart 雲端圖表來取得折線圖。只要熟悉基本語法就可以產生各式各樣的圖表, 非常方便! 有接觸過App Inventor 的師長朋友們,歡迎從App Inventor 中文學習網下載原始碼回去加入更多有趣的功能。這次的主題範例需用到網路連線,請先確認您的手機是使用Wi-Fi 或3G 行動網路來連上網路,否則將無法顯示Google 雲端圖表。

 

光感測器

樂高NXT 套件中的光感測器前端有兩個燈泡,一個是普通燈泡,另一個則是光敏電阻,可將前方物體的反射光強度由亮到暗(或由白到黑)回傳100~0 之間的整數(integer)。在App Inventor 中,我們使用NxtLightSensor元件的GetLightLevel 指令來取得光感測器值(圖1)。

01

開始玩機器人

範例的機器人只要將一個光感測器接在NXT 主機的3 號輸入端即可。請確認NXT 主機的藍牙是啟動的,接著將NXT 主機與Android 手機進行藍牙配對(註2),完成之後就可以把機器人放到一邊了。啟動藍牙之後您可以從NXT 主機的螢幕左上角看到藍牙的符號。

接下來依序介紹程式的各個功能:

STEP1 登入畫面:

首次進入程式的畫面如圖2a , 您會看到畫面中央載入了CAVE 技術部落格(http://blog.cavedu.com) 的畫面, 這是WebViewer 元件的最重要功能,可用來載入網頁,本範例的Google 雲端圖表也是以此方式載入。另外, 這時只有「連線」按鈕可以按,其它所有按鈕都無法操作。點選「連線」按鈕後進入藍牙裝置清單(圖2b),請找到剛剛配對完成的NXT 主機名稱(本範例為abc),點選之後就會由Android 裝置對NXT 主機發起藍牙連線。順利連線成功的話, 「連線」按鈕會變成不可按的狀態,只有「斷線」按鈕可以按(圖2c)。

STEP2 程式初始化:

在點選連線清單之前(ListPickerConnect 的BeforePicking 事件),需先將清單內容指定為Android 裝置上的藍牙配對清單(圖3a)。點選之後則先測試連線是否成功,成功則將「NXT 主機/ 連線」設為不可點選,「記錄感測器值」與「斷線」等兩個按鈕設為可點選(圖3b)。


圖3a 指定藍牙配對裝置清單。


圖3b 連線成功後啟動相關元件。

 

STEP3 按鈕記錄光感測器值:

每當我們點擊一次「記錄感測器值」這個按鈕時,就會將光感測器當下的數值搭配一個半形逗號組合到sensorValue 這個字串中。接著, 使用count 這個變數來計算一共記錄了幾次,累計到10 次之後,count 變數值會設定為1 代表要重新開始記錄新的十筆資料。並且「產生圖表」這個按鈕會變為可按(圖4)。

04
圖4 按按鈕記錄光感測器值。

STEP4 按鈕取得Google雲端圖表:

Google Chart 雲端圖表讓我們可用超連結的方式來取得各式圖表。以本範例來說,我們只要將十筆光感測器值組合到chart 字串變數的後方, 再由WebViewer 元件去取得這個超連結就可以了。說穿了就是去操弄這個字串,就能取得我們所需要的圖表。讓我們來看看這個chart 這個字串中的一些重要參數:

.http: / /char t .googleapis.com/chart?
.chs=320×300:圖片尺寸為320 x300像素。
.cht=lc:圖表類型為折線圖(linechart)。
. chd=t : : 圖表資料, 我們就是把sensoValue這個變數組合在chart變數之後來組成一個完整的超連結。每筆資料之間需使用「, 」隔開。其餘的參數請您自行參閱Google Chart API網站。

按下這個按鈕( 圖5), 會先把sensorValue 最後一個字元( 就是半形逗號)刪除,接著使用WebViewer.GoToUrl 來載入chart 與sensorValue兩者所組合成的超連結。並且為了讓下次也能順利執行,最後要把sensorValue 內容清空。


圖5 按下按鈕顯示Google 雲端圖表。

STEP5 斷線:

按下「斷線」按鈕之後,會中止藍牙連線(BluetoothClient.Disconnect指令),並使畫面上的各個元件恢復到程式一開始時的狀態(圖6)。


圖6 按下「斷線」按鈕時中斷藍牙連線。

操作

實際執行的時候,請先確認NXT已經開機且藍牙也啟動了(圖7a)。接著在您的Android 裝置上點選畫面中的「NXT 裝置/ 連線」按鈕, 會進到如圖2b 的藍牙清單畫面,點選您所要的NXT 主機名稱並連線成功後,就能按下「記錄感測器值」按鈕來記錄光感測器值(圖7b),連按十次之後,即可點擊「產生圖表」來產生圖表(圖7c)。


圖7a 程式初始畫面。
圖7b 紀錄感測器值時,數值會同時顯示在螢幕最上方。
圖7c 產生Google 雲端折線圖。

小挑戰

我們為各位讀者準備了小挑戰,要不要挑戰看看呢?

  1. 請將本程式改為計時器版本,與機器人成功連線之後,每秒記錄一次光感測器值, 每10秒更新一次畫面。(提示:使用Clock元件)
  2. 請製作下拉式選單(ListPicker)讓使用者可以調整所要顯示的感測器類型,例如聲音、顏色或超音波感測器等等。
  3. 請製作下拉式選單讓使用者可以調整所要顯示的圖表類型,例如折線圖、長條圖等等。(提示:將lc改為bvs就能將圖表改為長條圖)

本次介紹了如何將機器人感測器值藉由Google 雲端圖表來顯示,與自行畫圖相比,這樣做的話畫面會更漂亮,操作也會更簡單囉!

 

歡迎大家由以下連結或掃描以下的QRCode 來下載本程式:

本程式已上架Google play,請到Google Play 搜尋「CAVEDU 教育團隊」就找得到我們的樂高機器人系列app 了。請在App Inventor 中文教學網上直接下載本範例的App Inventor 原始檔與apk 安裝檔。

註1:想學如何開發App Inventor程式嗎?請到App Inventor中文學習網與我們一同學習。
註2:將Android手機設定為可安裝非Google Play下載的程式以及讓手機與樂高NXT主機連線等說明請參考此連結
註3:與NXT連線後如果出現[Error 402]之錯誤訊息請不必理會,程式依然能正確執行。

文章原文刊載於《ROBOCON》國際中文版2014/3月號

新Technic系列? Lego Technic 42030 Volvo L350F Wheel Loader

準備要上市的新 Technic 系列 42030 Volvo L350F Wheel Loader。特點在於所有的傳動裝置都在車體後方,皆由傳動軸來帶動車體前方的手臂來挖取東西。車體前方有三隻油壓桿(樂高改用齒輪帶動蝸桿伸縮)。

與吊車的超大吊臂相比,Wheel Loader 的魅力在於精密的傳動機構,這裡再次見識到樂高設計的威力!

工程系列不敗,重型機具永遠令人著迷啊~

先來看影片

[youtube=”http://www.youtube.com/watch?feature=player_embedded&v=NUHfogc989c”]

由此可看到帶動蝸桿的斜齒輪

0003

由此可看到三根蝸桿的伸縮對於手臂動作的關係

0007

這張車屁股真的很霸氣,還有一根排氣管

0004

 lego_technic_42030_volvo_front_end_loader_by_ryanthescooterguy-d74ffls

還有兩個紅外線遙控器,用來帶動車體前進後退、左右擺動、手臂抬高放下以及挖勺抬高放下等動作。

0005 0006  

與上一款的 Wheel Loader 8265 比一下,42030 會更大喲,當然價錢也就…

0002lego_8265

Raspberry Pi 機器人 Python篇-Part1 環境安裝

接續上篇【[開箱文]BrickPI – 讓 Raspberry Pi 接上您的樂高機器人感測器與馬達】,本篇將告訴您如何安裝包含了 Brick Pi 相關函式庫的開機用 SD 卡。

宣傳區

3/9 Brick Pi 機器人研習營,報名請按我   

什麼是 BrickPi

Raspberry Pi 機器人P控制循跡 – 使用BrickPi轉接板

一、安裝SD卡

1. 準備容量在4GB以上的SD卡

請下載開機映像檔的zip壓縮檔,請點我下載(檔名為2014.01.20_Dexter_Industries_wheezy.zip

下載之後請解壓縮。

2.下載並且安裝 Win32DiskImager 記憶卡燒錄程式

3.開啟 Win32DiskImager,點選右側磁碟片圖案選取剛下載好的映像檔,並勾選MD5 選項來驗證您下載的檔案是否正確(通常不太會出錯啦)

未命名

5. 接著就是將檔案寫入 SDCard裡  注意!請確認您所選擇的裝置(磁碟)是否正確,否則所有檔案都會不見!

安裝完畢後,將 SD 卡裝到RaspberryPi ,插上電源即可開機。登入預設帳號後請在 terminal 下執行 sudo raspi-config 進入設定畫面,找到 expand_rootfs 選項來使用全部的SD卡空間,否則即便您是使用16GB 的SD 卡,但從系統中看到的空間還是只會有2GB。

接著執行(請先確認 Raspberry Pi 是否能正常上網)

sudo apt-get update
sudo apt-get upgrade

來更新所有軟體

二、安裝BrickPi 的Python 函式庫

Raspberry Pi 的預設程式開發環境就是Python,本步驟是要下載 Brick Pi 擴充板要用到的 Python 函式庫。

1. 我們要先從網路上複製 BrickPi Python的函式庫,請直接在 terminal 輸入,或在桌面環境下開啟LXTerminal 來輸入:

git clone https://github.com/DexterInd/BrickPi_Python.git

2.安裝
我們要從上方複製的函式庫中,執行 setup.py 這個 python檔案來安裝BrickPi 模組,請在 terminal 中輸入:
sudo apt-get install python-setuptools
sudo python setup.py install

這樣就安裝完成了,下一篇就會開始介紹!

 

Google 與樂高合作的開放地圖創世神計劃

Google 與樂高合作的開放地圖創世神計劃,您可以在 Google Map 上來組裝房子,搭配您的Google+帳號就能與世界各地的網友分享您的建築作品。

在操作上與LEGO digital Designer相當類似,也因為是建築物導向,所以零件的種類與顏色的選擇並不多,但以建築物來說的話還算足夠。

剛剛試玩一下的心得是操作相當直覺,但與LEGO digital Designer相比少了群組(group)的功能,這樣要組裝大型的建築物時,就得重複做類似的動作,很容易失去耐心啊…

請由此開始:http://www.buildwithchrome.com/

螢幕快照 2014-01-31 上午12.03.09

如果您是新手的話,也可到 Build學院,裡面的樂高小神會教您一步步完成各種建築物與不同主題。

 

 

 

螢幕快照 2014-01-31 上午12.16.53

既然已經結合了Google Map,當然就要來看看世界各地的網友的作品(目前好像還不太多)

螢幕快照 2014-01-31 上午12.18.01