2009年6月8日 星期一

自動尋徑室內導航系統-讀後感想

我覺得他們的整個的報告架構非常的完整,內容而言也很流暢,一步步導引讀者接續的繼續閱讀下去,專業部分的文字敘述也不會太冗長,圖文並用相輔相成,我覺得很好,此外利用演算法找出最短的路徑,也考慮到有輪椅的部分,對於其他障礙者有多方面的設想,還有那幾張示意圖真的很厲害,很清楚的表達出概念,很值得我們學習。

另外我想說關於手持裝備,是否也可以用在不一樣的平台,如手機等等的,還有關於QR code的部分還可以多做些介紹,對於第一次接觸的人可以讓他們清楚知道其功用,另外在藍芽的部分著墨不多,知道是個發射端,之後讀到後面藍芽給的印象都不見了。另外提示的部分是語音影像,不過文中都是談論影像,到是很少提到語音的實際效益。

後面加入三創時的比賽,更提高可看性,也增加了此研究的可行性,我覺得真的很厲害,是我們要看齊的。

用於輔助認知障礙者就業之行動定位社會網路-讀後看法

利用GPS衛星定位系統結合手持裝置幫助認知障礙者們,在科技的幫助下更能讓學員們接受人群,走入社會。一開始明確的開頭法讓讀者很容易產生概念。
到是在開頭提到的行動定位社會網路(MLSN)似乎沒有解釋的很清楚,不懂的人可能看得會有點含糊。

在介紹行動網路的部分也很仔細的分析了研究可能會用到的網路,也都能提跟手持結合後的效果跟問題,到是我覺得可以用個比較各模式的優缺點,這樣也比較清楚的。

在文中提到的Skype API 能夠發送簡訊給就輔員,這點很在我們的研究計畫裡也會有這樣的功能,希望跟夠多多的跟你們學習。

在系統架構圖方面,我想這一看就能一目瞭然是我們值得學習的地方,不過文字解釋的部分不夠明確,我覺得圖片是增加文字的閱讀印象,應該還可以多做些說明。在學員、伺服器與就輔員的流程這張圖,單單看黃色的部分可以大概知道其功用,不過外加了那些箭頭有點擾亂了架構,而且沒有標示出箭頭的功用。
另外圖的編號跟內文的圖X沒有對到唷!!



以上是我的一些看法,還希望能夠向你們多多學習!!

2009年6月7日 星期日

新式認知障礙者室內導航系統-讀後心得

這份報告寫的內容很流暢,第一次掃讀的時候就能夠很清楚的知道他們在做甚麼了,圖文搭配的剛剛好,圖片增強文字的敘述的效果,而研究的目的主要是幫助認知障礙者的室內導航,輔助的科技是藍芽及PDA,兩者相輔相成,該介紹到的都有提到,很容易的讓不懂的或第一次接觸的人進入狀況,到是在系統設計的地方我覺得可以用簡單的架構圖來表示認知障礙者與PDA,藍芽及操作後的關係模式,還有剛開始看到主題時新式認知障礙者室內導航系統,因為有提到新式,讓我自然而然的想到會有舊式的,想看看是否有兩種的比較之類的,這樣才能更明確的知道為何要開發出此系統,以上是我個人的一點點看法。

程式碼coordinator 812~1625解釋

/****************************************************************************
*
* NAME: vProcessKeys
*
* DESCRIPTION:
* Gets the latest button presses and detects any change since the last time
* the buttons were checked. If there is a change it is passed to the
* individual handler for the screen currently being displayed (the buttons
* are all 'soft' keys so their meaning changes from screen to screen).
//偵測最新一次的按鈕後的改變,假使改變了便會在屏幕上顯示最近一次的操作。
*
* PARAMETERS: Name RW Usage
* pu8Keys RW Persistent value of buttons pressed
* //壓下按鈕後的固定值
****************************************************************************/
PRIVATE void vProcessKeys(uint8 *pu8Keys)
{
uint8 u8KeysDown; //設置按鍵按下
uint8 u8NewKeysDown;//新按鍵按下

u8KeysDown = *pu8Keys; //按鍵按下會等於壓下按鈕的固定值

/* Process key press */ // 按下按鍵的程序
u8NewKeysDown = u8ButtonReadFfd(); //讀取按鈕在板子上的狀態

if (u8NewKeysDown != u8KeysDown)//假使新的鍵相等於設置的鍵
{
u8KeysDown = u8NewKeysDown; //則相等

/* Key presses depend on mode */ //按鍵決定模式
switch (sDemoData.sSystem.eState) //狀態設置
{
case E_STATE_SPLASH: //回應按鍵的值設置資料或者轉至介紹屏幕;JN-3033.p23
vProcessSplashKeyPress(u8KeysDown);
break;

case E_STATE_NETWORK: //回應按鍵的值設置資料或者轉至加入網路屏幕;JN-3033.p23
vProcessNetworkKeyPress(u8KeysDown);
break;

case E_STATE_NODE: // 回應按鍵的值設置資料或者轉至最新接收值的屏幕;JN-3033.p23
vProcessNodeKeyPress(u8KeysDown);
break;

default:
break;
}
}

/* Store value for use next time */ //儲存下次使用的值
*pu8Keys = u8KeysDown;
}


/****************************************************************************
*
* NAME: u8UpdateTimeBlock
*
* DESCRIPTION:
* Moves the state machine time block on by one time period. //利用一個時間週期移動一個狀態的時間區塊
*
* PARAMETERS: Name RW Usage
* u8TimeBlock R Previous time block //上一個時間區塊
*
* RETURNS:
* uint8 Next time block //回傳下一個時間區塊
*
****************************************************************************/
PRIVATE uint8 u8UpdateTimeBlock(uint8 u8TimeBlock) //設定一個時間參數
{
u8TimeBlock++; //時間遞增時
if (u8TimeBlock >= MAX_BLOCKS) //假如大於等於最大值時
{
u8TimeBlock = 0; //此時的時間區為0
}

return u8TimeBlock; //回傳原本的值
}

/****************************************************************************
*
* NAME: vSendData
*
* DESCRIPTION:
* Generates and sends a frame consisting of 1 KVP transaction, for the
* setting of the LED at the receiving device. The address is provided in the
* call but the endpoint is fixed. //產生並且傳送一個1個KVP(關鍵值對),以控制一個LED的傳感節點
*
* PARAMETERS: Name RW Usage
* u16Addr R Address to send data to //資料傳輸的位置
* u8Switch R Switch value (0 or 1) //轉換0或1的值
*
****************************************************************************/
PRIVATE void vSendData(uint16 u16Addr, uint8 u8Switch) //設定參數
{
uint8 u8SrcEP = 0x30; //源設備的端口號,Source endpoint number
APS_Addrmode_e eAddrMode; //接收函數中判斷參數
AF_Transaction_s Transaction; //設定一個轉換的結構變量
uint16 u16DestAddr;
uint8 u8DestEndpoint;
uint8 transCount = 1;

eAddrMode = APS_ADDRMODE_SHORT;
u16DestAddr = u16Addr;
u8DestEndpoint = 0x40;

Transaction.u8SequenceNum = u8AfGetTransactionSequence(TRUE);
Transaction.uFrame.sKvp.eCommandTypeID = KVP_SET;
Transaction.uFrame.sKvp.eAttributeDataType = KVP_UNSIGNED_8BIT_INTEGER;
Transaction.uFrame.sKvp.eErrorCode = KVP_SUCCESS;
Transaction.uFrame.sKvp.u16AttributeID = 0x0000;
Transaction.uFrame.sKvp.uAttributeData.UnsignedInt8 = u8Switch;

afdeDataRequest(eAddrMode,
u16DestAddr,
u8DestEndpoint,
u8SrcEP,
DAP_PROFILE_ID,
DAP_CID_SWITCH,
AF_KVP,
transCount,
&Transaction,
APS_TXOPTION_NONE,
ENABLE_ROUTE_DISCOVERY,
0);
}

/****************************************************************************
*
* NAME: vProcessUpdateBlock
*
* DESCRIPTION:
* Called once per second to update the scrolling graphs and, if showing a
* screen with graphs on, updating the LCD. /此功能更新所有圖型的節點,數據的縮放然後更新顯示在屏幕上
*
* RETURNS:
* void
*
****************************************************************************/
PRIVATE void vProcessUpdateBlock(void)
{
tsNodeData *psNodeData;
tsNodeElementData *psNodeElementData; //節點的基本數據
uint8 *pu8GraphData;// 繪製資料的圖
uint8 u8PrevPoint; //上一個點
uint8 u8Node; //節點
uint8 u8Sensor;//感測器
uint8 u8Value; //參數的值

/* Update graphs */ //更新圖型
for (u8Node = 0; u8Node < DEMO_ENDPOINTS; u8Node++)
{
psNodeData = &sDemoData.sNode.asNodeData[u8Node];
if (psNodeData->u8FramesMissed)
{
/* Missed data, so copy previous value forward */ //資料遺失時複製前一個值
u8PrevPoint = (sDemoData.sGui.u8GraphPos - 1) & (DEMO_HISTORY_LEN - 1);
for (u8Sensor = 0; u8Sensor < DEMO_SENSOR_LIST_LEN; u8Sensor++)
{
pu8GraphData = psNodeData->asNodeElementData[u8Sensor].au8GraphData;
pu8GraphData[sDemoData.sGui.u8GraphPos] = pu8GraphData[u8PrevPoint];
}
} // 所繪出的圖為上一個點的數據
else
{
/* Data must be scaled for graph (0-13)// 數據的所繪出的圖規模為0-13
Temp range is 0-52 //測出溫度的範圍為0-52
Humidity range is 0-104 //濕度的感測範圍為0-104
Light range is 0-6 //光的感測範圍為0-6
*/
for (u8Sensor = 0; u8Sensor < DEMO_SENSOR_LIST_LEN; u8Sensor++)
{
psNodeElementData = &psNodeData->asNodeElementData[u8Sensor];
u8Value = psNodeElementData->u8NowValue; //感測的範圍從0開始到最大值,範圍內取得現在的所測到的值
switch (u8Sensor) //感測器所測到的,溫度,濕度,光度的值
{
case E_SENSOR_TEMP:
u8Value = u8Value >> 2;
break;

case E_SENSOR_HTS:
u8Value = u8Value >> 3;
break;

case E_SENSOR_ALS:
u8Value = u8Value * 2;
break;
}
if (u8Value > 13)
{
u8Value = 13; //假使得到的值大於13則等於13
}
psNodeElementData->au8GraphData[sDemoData.sGui.u8GraphPos] = u8Value; //所繪出的圖型為所得到的值
}
}

/* For next time, assume failed until proven otherwise */
if (psNodeData->u8FramesMissed < FRAMES_MISSED_INDICATION)
{
psNodeData->u8FramesMissed++;
}
}

/* Increment graph position */
sDemoData.sGui.u8GraphPos = (sDemoData.sGui.u8GraphPos + 1) & (DEMO_HISTORY_LEN - 1);

/* Update display */ //更新顯示為節點或網路模式
switch (sDemoData.sSystem.eState)
{
case E_STATE_NETWORK://網路模式
vUpdateNetworkScreen(sDemoData.sGui.eCurrentSensor);
break;

case E_STATE_NODE: //節點模式
vUpdateNodeScreen(sDemoData.sGui.u8CurrentNode);
break;

default:
break;
}
}

/****************************************************************************
*
* NAME: vProcessSplashKeyPress
*
* DESCRIPTION:
* Handles button presses on the splash screen. The buttons show the stack
* version. //按住按鈕後可跳至介紹畫面,可以知道為第幾版本
*
* PARAMETERS: Name RW Usage
* u8KeyMap R Current buttons pressed bitmap
*
* RETURNS:
* void
*
****************************************************************************/
PRIVATE void vProcessSplashKeyPress(uint8 u8KeyMap)
{
char acString[9];

switch (u8KeyMap)
{
case E_KEY_0: //按鍵0時會在LCD板上顯示的字樣
vUTIL_NumToString(sDemoData.sSystem.u32ZigbeeStackVersion, acString);
vLcdWriteText("Stack release", 6, 0);
vLcdWriteText(acString, 6, 80);
vLcdRefreshAll();
break;

case E_KEY_1: //按鍵1時會在螢幕出現通道的增加
/* Plus button: increment value */
sDemoData.sSystem.u8Channel++;
if (sDemoData.sSystem.u8Channel > CHANNEL_MAX)
{
sDemoData.sSystem.u8Channel = CHANNEL_MIN;
}
vUpdateSplashScreen();
break;

case E_KEY_2: //按鍵2時會在屏幕出現通道的遞減
/* Minus button: decrement value */
sDemoData.sSystem.u8Channel--;
if (sDemoData.sSystem.u8Channel < CHANNEL_MIN)
{
sDemoData.sSystem.u8Channel = CHANNEL_MAX;
}
vUpdateSplashScreen();
break;

case E_KEY_3: // 選定通道後按按鍵3會跳至加入網路的畫面
/* Done button: start network and go to network screen */
sDemoData.sSystem.eState = E_STATE_NETWORK;
JZS_sConfig.u32Channel = sDemoData.sSystem.u8Channel;
JZS_vStartStack();
vBuildNetworkScreen();
break;

default:
break;
}
}

/****************************************************************************
*
* NAME: vProcessNetworkKeyPress
*
* DESCRIPTION:
* Handles button presses on the Network screen. The buttons can move onto
* the first Node screen (if there are any nodes) or select a particular
* sensor. //選擇按鈕可以跳至加入網入的螢幕,如果有其他的節點或特定感測也可以選擇
*
* PARAMETERS: Name RW Usage
* u8KeyMap R Current buttons pressed bitmap
*
* RETURNS:
* void
*
****************************************************************************/
uint8 u8PermitJoining = 0xff;

PRIVATE void vProcessNetworkKeyPress(uint8 u8KeyMap)
{
switch (u8KeyMap)
{
case E_KEY_0:
/* Node button: go to node screen (if there are any nodes) */ //如果節點數大於0按鍵0可以跳至節點的屏幕
if (sDemoData.sNode.u8AssociatedNodes > 0)
{
sDemoData.sSystem.eState = E_STATE_NODE; //為節點狀態
sDemoData.sGui.u8CurrentNode = 0; //第一個節點
vBuildNodeScreen(sDemoData.sGui.u8CurrentNode); //顯示第一個節點感測的數據
}
break;

case E_KEY_1: //
/* Temp button: change if not already there */ //在節點的銀幕上換至感測溫度的畫面
sDemoData.sGui.eCurrentSensor = E_SENSOR_TEMP; //選擇溫度
u8PermitJoining = 0xff - u8PermitJoining;
nlmePermitJoiningRequest(u8PermitJoining);
vBuildNetworkScreen(); //產生畫面
break;

case E_KEY_2:
/* Humidity button: change if not already there */ // 在螢幕上換至感測濕度的畫面
sDemoData.sGui.eCurrentSensor = E_SENSOR_HTS; //濕度
vBuildNetworkScreen();
break;

case E_KEY_3:
/* Temp button: change if not already there */ //同上是亮度
sDemoData.sGui.eCurrentSensor = E_SENSOR_ALS;
vBuildNetworkScreen();
break;
}
}

/****************************************************************************
*
* NAME: vProcessNodeKeyPress
*
* DESCRIPTION:
* Handles button presses on the Node screens. The first button can move to
* the next Node screen (if there are any more nodes) or back to the Network
* screen. Another button selects the Node Control screen and the other two
* toggle the state of the remote switch. //按鈕的設定控制螢幕為跳至下一個節點,或控制其他板子
*
* PARAMETERS: Name RW Usage
* u8KeyMap R Current buttons pressed bitmap
*
* RETURNS:
* void
*
****************************************************************************/
PRIVATE void vProcessNodeKeyPress(uint8 u8KeyMap)
{
switch (u8KeyMap)
{
case E_KEY_0:
/* Node button: go to next node or network screen */ //多個節點加入可按按鍵0換下個節點的畫面
sDemoData.sGui.u8CurrentNode++;
if (sDemoData.sGui.u8CurrentNode == sDemoData.sNode.u8AssociatedNodes) //假使切換至最後一個節點後再按按鍵0
{
sDemoData.sSystem.eState = E_STATE_NETWORK; //會跳至節點加入網路的模式
sDemoData.sGui.eCurrentSensor = E_SENSOR_ALS; //測的數據為光
vBuildNetworkScreen();
}
else
{
vBuildNodeScreen(sDemoData.sGui.u8CurrentNode);
}
break;

case E_KEY_2:
/* Off button */ //可傳送資料控制其他板子為關掉的按鈕
case E_KEY_3:
/* On button */ //為開啟的按鈕
vSendData(sDemoData.sNode.asNodeData[sDemoData.sGui.u8CurrentNode].u16ShortAdr, (u8KeyMap == E_KEY_2) ? 0 : 1);
break;
}
}

/****************************************************************************
*
* NAME: vUpdateSplashScreen
*
* DESCRIPTION:
* Updates the Splash screen, when it first appears or when the user
* changes the channel number. //更新啟動畫面,使用者可以切換使用的通道
*
* RETURNS:
* void
*
****************************************************************************/
PRIVATE void vUpdateSplashScreen(void)
{
char acString[5];

vValToDec(acString, sDemoData.sSystem.u8Channel, " ");
vLcdWriteText(acString, 7, 16); //LCD顯示jennicLogo.c的字樣 7,16為LCD上的位置

vLcdRefreshAll();
}

/****************************************************************************
*
* NAME: vBuildNetworkScreen
*
* DESCRIPTION:
* Creates the Network screen. Depending on how the GUI has been configured
* it may want to display up to 3 or up to 4 nodes simultaneuously. Also, it
* only shows nodes that have successfully associated. To achieve this, it
* makes use of an array of the four display positions on the screen, and
* loops through this to position each node in the correct position.
* //創造加入網路的螢幕,最多可加入3-4個節點,當被接受的節點可顯示在螢幕上,根據先後順序分別有四個位置
* This function only draws the text required, then uses the related update
* function to display the actual data and to refresh the LCD.
* //根據相關的函數來顯示實際數據更新在LCD上
* PARAMETERS: Name RW Usage
* eSensor R Sensor to display
*
* RETURNS:
* void
*
****************************************************************************/
PRIVATE void vBuildNetworkScreen(void)
{
static const char *apcSensorLabel[DEMO_SENSOR_LIST_LEN] = {
"Temp", "Humidity", "Light"}; //感測的項目分別有溫度,濕度,亮度
static const uint8 au8LabelPos[DEMO_SENSOR_LIST_LEN] = {29, 58, 102};
uint8 u8Node;
int iIndex;
teSensor eSensor = sDemoData.sGui.eCurrentSensor;

vLcdClear();

if (u8PermitJoining == 0)
{
vLcdWriteText("Joining off", 6, 0);
}
else
{
vLcdWriteText("Joining on", 6, 0);
}

/* Show labels */ //沒有節點的連結時會出現No sensors detected
if (sDemoData.sNode.u8AssociatedNodes == 0)
{
vLcdWriteText("No sensors detected", 3, 0);
}
else
{
u8Node = 0;
while ((u8Node < sDemoData.sNode.u8AssociatedNodes) && (u8Node < 4))//當有節點連接時LCD的行列顯示節點的名稱
{
vLcdWriteText((char *)apcNodeNameList[u8Node], au8NodeLcdRow[u8Node], au8NodeLcdCol[u8Node]);
u8Node++;
}
}

/* Hot buttons at bottom of screen */ //螢幕上的熱鍵
vLcdWriteText("Node", 7, 0);

for (iIndex = 0; iIndex < DEMO_SENSOR_LIST_LEN; iIndex++)
{
vLcdWriteText((char *)apcSensorLabel[iIndex], 7, au8LabelPos[iIndex]);
}
vLcdWriteInvertedText((char *)apcSensorLabel[eSensor], 7, au8LabelPos[eSensor]);

vUpdateNetworkScreen(eSensor);
}

/****************************************************************************
*
* NAME: vUpdateNetworkScreen
*
* DESCRIPTION:
* Draws the graphs and values for the Network screen. See the description
* for vBuildNetworkScreen for an explanation of the positioning of elements
* on the display.
* //將所得到的值畫出在顯示器上,更新現有的或之前保留的數據在屏幕上
* PARAMETERS: Name RW Usage
* eSensor R Sensor to display
*
* RETURNS:
* void
*
****************************************************************************/
PRIVATE void vUpdateNetworkScreen(teSensor eSensor)
{
uint8 u8Node;
uint8 u8Row; // 在LCD上分行
uint8 u8Col; // 在LCD上分列


u8Node = 0;

while ((u8Node < sDemoData.sNode.u8AssociatedNodes) && (u8Node < 4)) // node的最大值為4
{
u8Row = au8NodeLcdRow[u8Node] + 1; //增加行數
u8Col = au8NodeLcdCol[u8Node];

vLcdUpdateElement(&sDemoData.sNode.asNodeData[u8Node], //LCD上節點的基本參數
eSensor, u8Row, u8Col, TRUE);

u8Node++;
}

vLcdRefreshAll();
}

/****************************************************************************
*
* NAME: vLcdUpdateElement
*
* DESCRIPTION:
* Draws the graph and text for a single sensor for a single node. The text
* includes alarm indications if the sensor value exceeds user specified
* limits.
* //顯示出單一感測器的文字及圖形,當子文字也包含感測的值超出用戶設定的限制提出警告
* PARAMETERS: Name RW Usage
* psNodeElementData R Pointer to data for node
* u8Row R Character row to display on
* u8Col R Pixel column to display on
* boShowInfo R TRUE to show missed frames indication
*
* RETURNS:
* void
*
****************************************************************************/
PRIVATE void vLcdUpdateElement(tsNodeData *psNodeData, teSensor eSensor,
uint8 u8Row, uint8 u8Col, bool_t boShowInfo)
{
char acString[10];
uint8 u8NowValue;
tsNodeElementData *psNodeElementData = &psNodeData->asNodeElementData[eSensor];

u8NowValue = psNodeElementData->u8NowValue;

switch (eSensor)
{
case E_SENSOR_TEMP: //測到的數字加上度C
vValToDec(acString, u8NowValue, "[C ");
break;

case E_SENSOR_HTS: //測到的數字加上%
vValToDec(acString, u8NowValue, "% ");
break;

case E_SENSOR_ALS:
/* This is a light sensor so display symbol */ //測到的值以一圖案表示
acString[0] = '&' + u8NowValue;
acString[1] = '\0';
break;

default:
break;
}

vLcdWriteText(acString, u8Row, u8Col);

/* Print alarm */
vLcdWriteText(" ", (uint8)(u8Row + 1), u8Col);

if (boShowInfo)
{
vUTIL_NumToString(psNodeData->u16ShortAdr, acString);
vLcdWriteText(&acString[4], (uint8)(u8Row + 1), u8Col);
vValToDec(acString, psNodeData->u8FramesMissed - 1, "");
vLcdWriteText(acString, (uint8)(u8Row), u8Col + 20);
}

/* Draw graph */ //畫圖
vDrawGraph(psNodeElementData->au8GraphData, (uint8)(u8Col + 27), u8Row);
}

/****************************************************************************
*
* NAME: vBuildNodeScreen
*
* DESCRIPTION:
* Builds the text to appear on a Node screen, then uses the update function
* to populate it with data. //建立了顯示屏幕的節點上的文字,然後使用更新功能來填充它的數據
*
* PARAMETERS: Name RW Usage
* u8Node R Node to display
*
* RETURNS:
* void
*
****************************************************************************/
PRIVATE void vBuildNodeScreen(uint8 u8Node)
{
vLcdClear();
vLcdWriteText((char *)apcNodeNameList[u8Node], 0, 0); //設置名稱
vLcdWriteText("Humidity", 0, 64); //後面的數字為在LCD上的位置
vLcdWriteText("Temp", 3, 0);
vLcdWriteText("Light", 3, 64);
vLcdWriteText("Node", 7, 0);
vLcdWriteText("Off", 7, 75);
vLcdWriteText("On", 7, 115);

vUpdateNodeScreen(u8Node);
}

/****************************************************************************
*
* NAME: vUpdateNodeScreen
*
* DESCRIPTION:
* Draws the three sensor graphs for a node.
* //畫出一個節點上的三個感測值
* PARAMETERS: Name RW Usage
* u8Node R Node to display
*
* RETURNS:
* void
*
****************************************************************************/
PRIVATE void vUpdateNodeScreen(uint8 u8Node)
{
tsNodeData *psNodeData;
char acString[8];

psNodeData = &sDemoData.sNode.asNodeData[u8Node];

/* Status */ //顯示是哪個節點及名稱
vValToDec(acString, psNodeData->u8FramesMissed - 1, " ");
vLcdWriteText(acString, 1, 20);

/* Update graphs, alarms and values */ //按照位置畫出此節點的溫度,濕度,亮度的圖,
vLcdUpdateElement(psNodeData, E_SENSOR_TEMP, 4, 0, FALSE);
vLcdUpdateElement(psNodeData, E_SENSOR_HTS, 1, 64, FALSE);
vLcdUpdateElement(psNodeData, E_SENSOR_ALS, 4, 64, FALSE);

vLcdRefreshAll();
}

/****************************************************************************
*
* NAME: vDrawGraph
*
* DESCRIPTION:
* Creates a bitmap from an array of values. Each value is represented by a
* column on the graph, and a lookup table is used to translate each value
* (assumed to be in the range 0 to 13) to the data required for the bitmap.
* Finally, the bitmap is displayed via a board API.
* //產生一個範圍為1-13的點陣圖,值為圖上的所增加的列數
* PARAMETERS: Name RW Usage
* pu8GraphData R Array of 32 elements of graph data
* u8StartCol R First column of bitmap
* u8StartRow R Top character row of bitmap
*
* RETURNS:
* void
*
****************************************************************************/
PRIVATE void vDrawGraph(uint8 *pu8GraphData, uint8 u8StartCol,
uint8 u8StartRow)
{
static const uint16 au16LineData[14] = {0x4000, 0x6000, 0x7000, 0x7800,
0x7c00, 0x7e00, 0x7f00, 0x7f80,
0x7fc0, 0x7fe0, 0x7ff0, 0x7ff8,
0x7ffc, 0x7ffe}; //範圍為0-13 所以存在14個值
uint8 au8GraphBitmap[66];
const tsBitmap sGraphBitmap = {au8GraphBitmap, 33, 2};
int i;
uint16 u16LineData;
uint8 u8DataPos = sDemoData.sGui.u8GraphPos;

/* Draw y axis */ //編輯y軸
au8GraphBitmap[0] = 0xfe;
au8GraphBitmap[33] = 0x7f;

/* Fill in data */ //填入資料
for (i = 0; i < DEMO_HISTORY_LEN; i += 1) //
{
u16LineData = au16LineData[pu8GraphData[u8DataPos]];

au8GraphBitmap[i * 2 + 1] = (uint8)(u16LineData & 0xff);
au8GraphBitmap[i * 2 + 2] = (uint8)(u16LineData & 0xff);
au8GraphBitmap[i * 2 + 34] = (uint8)(u16LineData >> 8);
au8GraphBitmap[i * 2 + 35] = (uint8)(u16LineData >> 8);
// 繪製圖形隨著變數i的增加顯示在圖形上增加數
/* Increment data point */ //增量數據點
u8DataPos = (u8DataPos + 1) & (DEMO_HISTORY_LEN - 1);
}

/* Write bitmap to shadow memory */ //內存點陣
vLcdWriteBitmap((tsBitmap *)&sGraphBitmap, u8StartCol, u8StartRow);
}

/****************************************************************************
*
* NAME: vStringCopy
*
* DESCRIPTION:
* Simple string copy as standard libraries not available.
*
* PARAMETERS: Name RW Usage
* pcFrom R Pointer to string to copy
* pcTo W Pointer to store for new string
*
* RETURNS:
* void
*
****************************************************************************/
PRIVATE void vStringCopy(char *pcFrom, char *pcTo)
{
while (*pcFrom != '\0')
{
*pcTo = *pcFrom;
pcTo++;
pcFrom++;
}
*pcTo = '\0';
}

/****************************************************************************
*
* NAME: vValToDec
*
* DESCRIPTION:
* Converts an 8-bit value to a string of the textual decimal representation.
* Adds a text string after the text.
*
* PARAMETERS: Name RW Usage
* pcOutString R Location for new string
* u8Value R Value to convert
* pcLabel R Label to append to string
*
* RETURNS:
* void
*
****************************************************************************/
PRIVATE void vValToDec(char *pcOutString, uint8 u8Value, char *pcLabel)
{
static const uint8 au8Digits[3] = {100, 10, 1};
uint8 u8Digit;
uint8 u8DigitIndex;
uint8 u8Count;
bool_t boPreviousDigitPrinted = FALSE;

for (u8DigitIndex = 0; u8DigitIndex < 3; u8DigitIndex++)
{
u8Count = 0;
u8Digit = au8Digits[u8DigitIndex];
while (u8Value >= u8Digit)
{
u8Value -= u8Digit;
u8Count++;
}

if ((u8Count != 0) (boPreviousDigitPrinted == TRUE)
(u8DigitIndex == 2))
{
*pcOutString = '0' + u8Count;
boPreviousDigitPrinted = TRUE;
pcOutString++;
}
}

vStringCopy(pcLabel, pcOutString);
}

#ifdef TEST_BOS_TIMER
PRIVATE void vTimerFired0(void *pvMessage, uint8 u8Len)
{
uint8 u8Dummy;

u8LedFlash0 = 1 - u8LedFlash0;
vLedControl(0, u8LedFlash0);

bBosCreateTimer(vTimerFired0, NULL, 0, 10, &u8Dummy);
}
#endif

/****************************************************************************
*
* NAME: vAddDesc
*
* DESCRIPTION:
* Draws the three sensor graphs for a node.
*
* PARAMETERS: Name RW Usage
* u8Node R Node to display
*
* RETURNS:
* void
*
****************************************************************************/
PRIVATE void vAddDesc(void)
{ //控制板為一組輸入一組輸出
uint8 u8DeviceVer = 0x00;
uint8 u8Flags = 0x00;
uint8 u8EndPoint = 0x40;
uint16 u16DeviceId = 0x0000;
// 使用相同的組編號為輸入和輸出集群。這意味著從一個節點的輸出組會符合其他節點的輸入組
uint8 u8InputClusterCnt = 1;
uint8 au8InputClusterList[] = {DAP_CID_SENSOR_READINGS};
uint8 u8OutputClusterCnt = 0;
uint8 au8OutputClusterList[] = {};

(void)afmeSimpleDescAdd(u8EndPoint, DAP_PROFILE_ID, u16DeviceId,
u8DeviceVer, u8Flags, u8InputClusterCnt,
au8InputClusterList, u8OutputClusterCnt,
au8OutputClusterList);
}

/****************************************************************************/
/*** END OF FILE ***/
/****************************************************************************/

有些大段的程式碼真的是看不懂還有待研究!!

906~938 1009~1033 1238~1282 1520~1588

這些是看不懂查不到的行數 我會再找看看的!!

連續看了幾天的程式碼發現其實用的語法沒有很多

只是一些設的參數名稱的縮寫要查

大致上的功能看程式碼能看得懂

而這也是Zigbee的API層 也是我們要努力的層

所以要加油

2009年6月5日 星期五

"身心障礙者行為問題處理" 一書讀後感想

第二章 行為問題的意義與內涵
行為問題或者是問題行為: 主要的是強調行為本身會因為條件的不同而有所差異,因為發生的行為在因為環境的不同會影響別人對此行為的接納度。
產生行為問題的其因素又可分為四項
1. 行為本身是否合乎年齡、性別與發展程度
2. 行為發生的地點是否適當
3. 行為對於周遭人的看法
4. 產生的行為對個體是來說是否適當

身心障礙者的行為問題
身心障礙者指的是因為身理及心理有顯著的障礙,造成他們可能產生的行為問題的原因又可分為三類
1. 行為的型態:型式和動作
2. 行為的功能:大致上的要產生行為主要為的是引起其他人的注意
3. 行為的病原:是為疾病所引起的如焦慮症,恐懼症等等

我們從型態的角度看又可分為六項

(1). 固著行為:
只一再重複某種特定的行為,而此行為不具特別的意義,且會持續相當的一段時間;當中又可以照口語、動作、強迫性的收集行為,不當的戀物行為、固定形式而抗拒改變的行為。
而固著行為會依照年齡或能力的增加在內容和形式上會有所改變,但極少數的行為會不。

(2). 自傷行為:
這類的行為被視為最嚴重且最急需被處理的問題,此行為又可分為兩類
狹義:指個體蓄意會無意識重複各種方式傷害自己
廣義:指任何傷害自我身體形象或健康行為
自傷行為又可細分三種
1. 重度自傷行為
2. 固定是自傷行為
3. 淺性或中度自傷行為

(3). 攻擊行為:
此行為被認為是個體的發脾氣的一部份,可分為三種
1. 身體的攻擊
2. 口語和對物品的攻擊
3. 消極的抵制或是不聽話的反抗

(4). 不適當的社會行為
此行為稱之為反社會的行為,指個體在公開在公開場合中表現出不合常理的行為,而違反社會的規範,甚至侵犯他人的基本權益,以至於減少他人對於個體的接納度。此行為又可分為兩項
外顯:不適當的社會行為是指個體公然從事與受害者正面衝突
內隱:外人往往無法看到行為發生的不適當的社會行為
其行為可分成四大類
1. 技巧的缺陷
2. 表現的缺陷
 此兩種是指在某些情況下行為能夠表現出來,而某種情況下卻不行
3. 自我控制技巧的缺陷
4. 自我控制表現的缺陷
 此兩種是指由於受到干擾次機的影響而無法表現行為

(5). 特殊情緒困擾
身心障礙者本身較一般人容自產生行緒和心理上的不適應,而此特殊情緒本身就是一個問題,也是造成行為的主要因素;如憂鬱症,焦慮症,恐慌症,恐懼症等

(6). 身體調節異常的意義:
指個體所表現出的行為問題,主要是日常生活所需攝取和代謝運作失調而造成的現象如飲食,排泄及睡眠等等

閱讀完此章節後,了解的這些會造成身心障礙者所可能產生行為的一些原因,因為書上都介紹的非常的詳細,而其中也提到要認定為是否是行為問題時也要考慮當時的環境和個體來判別,當然我們也要重視其個體的想法,使其行為具有社會的效度,因為他們有太多的因素會造成他們產生些大眾接納度較低的行為,所以我們要體諒他們更要尊重他們,進而幫助他們才是。

2009年6月1日 星期一

極重度多重障礙孩童如廁訓練成效之研究-心得

如廁是生活的基本技能,在成長的環節中也是重要的開端,如廁的好壞或許會影響一個人的特質,不好的話,可能會因為引來周遭同學的嘲笑,造成人際關係不好,對自己也會充滿自卑,一般的小孩如此更何況是有障礙的小孩,不僅僅如此,當小便失禁在褲子裡,也往往會造成一些疾病,所以如廁對每一個人確確實實的是很重要的。
  在文章裡有提到國外的部分,他們對於身障小孩如廁的訓練已經有相當的研究和設備,反觀國內,真的能找到的資料很有限,也間接的證明了有從事相關的研究占不多數,所以是我們國家應該加強的部分。另外,此篇也探討如何的如廁訓練才是符合我們所要的合理訓練,因為在文中提到的三種方式,有前向移動訓練法、快速如廁訓練法與便盆提示法,是被廣泛採用的方法,雖然是有成效的做法,但是其中的步驟有些有違反人道,會對小孩子造成另一種傷害,當然是不符合我們的期望的。而李老師的研究方法,是屬於較符合我們國家的觀念,以人為主要中心,利用回饋系統,增強物等等,並且加設感測的設備,能夠即時的在小孩子失禁時測出並加以教導,對於障礙者小孩的如廁的訓練必需要耐心,治標不如治本讓小朋友們順利的學習如廁的習慣,可以讓小孩增加信心,也可以減少不少的花費。在訓練的過程中,家長和老師都是扮演很重要的角色,是小孩教導和仿效的對象,科技的加入是輔助增強效果,也是我們研究的方向,我們由衷的希望能夠為這些障礙孩童完成如廁的訓練。
  文章中也提到國內在發展如廁訓練的領與的確不多,當然希望能夠得到重視是最重要的,畢盡如廁是生活的基本技能,幫助這些障礙孩童能夠擁有如廁的能力是我們所樂見的,在不同障礙者要有不同方面的方法,這些事都還是我們我要學習的,所以目前對於如廁訓練的觀點我們還事知道的不夠豐富,在這方面還是必須的多多探討。

2009年5月19日 星期二

如廁訓練的比較

如廁訓練的比較
此篇分成三類

第一類是同年齡層的幼兒做的如廁訓練
第二類是目前智能障礙者所做的如廁訓練
第三類是加入我們輔助科技所做的如廁訓練

一.幼兒的如廁訓練
有三種模式會影響如廁訓練
(1) 生理成熟
(2) 對指令的理解和反應
(3) 動機、模仿的慾望

訓練的方法 
1. 定時作息法
此方法主要是特定的時間帶兒童到廁所,固定的時間間隔,如每一小時去廁所一次,另外找出兒童在正常攝取飲料的型況,大概尿濕的時間,然後預估能接近會尿尿的時候帶去廁所。
2. 分配練習法
(1) 要兒童在清醒情況下,記錄是否有大小便,並且要定時的收集資料,還要針對飲食,上廁所的地方,上廁所的量做記載。
(2) 分析資料,找出大小便的模式。主要目的是找出明顯的上廁所的兩個時
段,並針對這兩個時間點做最初的訓練。
(3) 選擇適當的增強物以便訓練如廁使用,而這個增強物最好只是用在如上訓練,如此一來就可以增加效果。
(4) 接下來就是收集資料了,如果兒童在記錄上表現的良好的時候,就可以一邊訓練,一邊進行其他時間點的加強。
(5) 如果所有的時間都有尿尿行為,且不會整天都尿濕褲子,就可以交導兒童表達需要上廁所的行為了。
3. 快速訓練法
(1) 主要是短時間訓練自發獨力的如廁行為。
(2) 給兒童多喝水,增加兒童小變的需求和訓練機會。
(3) 讓兒童待在廁所10 分鐘,如果有小便的值後立即給予讚賞。
(4) 當不在廁所的時候,假如沒有尿濕也給予讚賞。
(5) 若有尿濕,依情況給予口頭的斥責,並帶兒童到廁所練習上廁所的步驟,並要求他們洗褲子或其它弄髒的地方。
(6) 要持續讚賞兒童不尿濕的行為。


二.智能障礙學生的教學方案可包括以下幾項重點
(1) 最少的提示,含糊的口頭,操作提示。
(2) 特定的口頭,操作提示。
(3) 示範:老師示範,學生模仿。
(4) 肢體語言:非口語的溝通,只向。
(5) 初始的協助,老師身體協助,學生開始自做時老師撤退協助,絕不代勞。

如廁自理訓練
一、 如廁能力之評估
(1) 生理系統是否正常。
(2) 認知能力:由於認知能力較遲緩會影響便意的感受變慢,對人如廁的模仿能力差,要表達便意時有困難。
二、 如廁訓練原則,養成上廁所習慣
(1) 改把包尿布的生活改變成固定地點的如廁生涯,首先要培養規律性,固定時間內帶孩子上廁所,開始的時間間隔要短,增加他順例如廁的次數。
(2) 掌握徵兆,觀察當有出現想上廁所的表情會動作時便帶去廁所,減少如廁失敗次數。
(3) 對於依賴性大的孩子,偶爾固意讓孩子嘗嘗拉在褲子的感覺,一旦產生厭惡感下次就會用新發覺了。
(4) 對於感覺較遲鈍的兒童,或動作控制不佳者,為提高皮膚局部感覺,可改穿透氣的褲子並做神經控制訓練。
(5) 當有尿意的時候,要訓練兒童忍耐。
三、 自我控自排泄的訓練方法
1. 乾爽褲子檢查法,以簡單的語句詢問褲子現在是否乾爽,如果是的話給予讚賞,並利用傳統的如廁訓練的方法,每隔幾小時就帶去廁所,保持褲子的處於輸服的狀態,從連續性增強竹見到間歇性增強。
2. 如廁相關行為教學,示範整套的如廁行為,但須針對動作及感官障礙所要做調整且相關技能要達到標準。
3. 失禁的處理,可以採用幾種方式
(1) 忽視:以平靜的方式換褲清洗,不要提供太快的增強活動。
(2) 限制:要求學生感受並注視其褲子,要以口氣及表情表達限制。
四、 個別化如廁訓練
(1) 上廁所前幾分鐘,以簡單語句指示上廁所。
(2) 若待在馬桶十分鐘後無結果則不申斥,若成功如廁及給予鼓勵。
(3) 任何大小便行為皆要記錄。
(4) 只要是在廁所皆交有關的如廁既能,適度的給予提示,逐漸撤退的給予協助。
(5) 所有如廁行為皆須直接增強,固老師要密切監控學生的表現。
(6) 反覆練習以養成習慣。


三.加入輔助科技後的如廁訓練的優點
可以利用以上的如廁訓練的技巧,加入輔助科技,加強如廁的效果。
1. 目的是讓學生自行產生前往廁所的動機,不需要忍耐,並且老師可以做適當的監控。
2. 系統化記錄學生如廁的時間次數或規律性。減少老師要密切監控的記載的負擔。
3. 完成如廁時可以得到立即的回饋,並非只是口頭的獎勵,而是能夠得到感官方面的刺激,加深如廁後的印象,並引起下次如廁動機。

2009年5月18日 星期一

結語

整合感測,運算及網路能力之新興技術,wireless sensor network被列為改變未來世界最有潛力的十大技術之一,既使顯在看似電子產業的不景氣,我想只是一時的,畢竟沒有新的技術的產生,而舊的技術卻一直在更新,久而久之當然失去了價值,所以說將來電子產業也會產生一段革命時期,現在科技大多已朝向無線的技術前進,而zigbee是以WSN為基礎之智慧型環境技術與應用,所以說極具備開發應用的新產業,近幾年來,美,日,韓帶頭掀起全球無所不在的數位狂潮,我國積極建設M台灣的優勢環境後又提出優質網路設為之規劃。因應此一趨勢,所以以WSN技術為底,與國際同步發展,期望台灣在生活及工業等感測網路創新應用服務,進而開創台灣WSN高附加價值服務產業之新契機。所以台灣在近幾年來所進行的無線的研究,未來在國際上的地位是不容忽視的。雖然是全球景氣低靡,電子行業已經排出在十大行業中,依照這個數據來講,大多數的人都對電子等行業感到失望,但是我覺得危機就是轉機,只要選對方向,堅持向前努力,成功就掌握在自己的手中。

我們希望我們的研究成果應用在如廁的訓練上能夠得到真正的成效,即使是一點點也好,畢盡那是我們辛苦的結晶,當然在使用輔助科技的應用上能有不錯的回響,而我們的專題對於智能障礙的兒童們的如廁訓練,是否能夠輔助到他們這才是我們真正所關心的,不管任何人,在成長的過程中就要慢慢的建立信心,而我們願意當這些小孩的推手,把我們所學的都發揮在住人的情況下,那才顯得有意義,關懷弱勢族群是我們常常聽到的口號,但是真正身體力行的卻不多,而現在加入了我們這些新血,要創造更多的可能,幫助更多的人,即便在未來還是有不可預知的情況,我們將會繼續的努力下去,做出更好的成果。

程式構想

程式說明:
我們假設為Zigbee寫入一個程式我們希望Zigbee與感測器及時的產生出一個回饋系統,我們假設感測器是一個開關的話,設定0為未導通的狀態,而1相反的就是導通的狀態,所以意思是說感測器其實就是一個0,1,0,1在跑的系統,所以當感測器從0變成1的時候,表示成功的感測到尿液,而此時我們希望夠即刻的給予鼓勵,因此會回傳值1給回饋系統,而開啟了回饋系統的執行,所以音樂就馬上的播放,之後設定秒數給回饋系統終止的時間,當達到秒數後,指令又將從1變成0,因此返回原來的狀態。


系統時變圖說明

計畫應用

計畫構想
本計畫是與特教系所所結合的跨領域技術,利用無線感測與感測器結合的技術結合,主要的目的是吸引學員們能夠主動去上廁所的如廁訓練。在特教老師的教學實務現場,通常最棘手的問題就學員們如廁的行為,想當然爾,老師們都會想出許多的對策去改善學員們的如廁問題,例如有為學員們包上尿布上課,或者定時的詢問是否有意要上廁所,另外還有手動記錄學員們如廁的情況及時間間隔來確認是否有規律如期的完成如廁行為,但是最後的結果顯示效果卻不是理想。然而孩子總是會隨著年齡逐漸的增長,伴隨而來的是孩子心理,生理及家庭的問題。如廁的障礙對學員們在生活的環境有莫大的影響,也是阻礙身障孩子成功融入班級的主要原因,所以我們構想為學員衡量如廁訓練的可行性,研擬適當的計畫,能夠有系統的訓練學員,使學員能夠很快建立如廁的良好習慣,這樣不僅可以改善教師們的煩惱,更能夠讓學員們順利的融入於一般的班級和不受世俗眼光的排斥。


系統說明
我們構想利用無線感測技術跟潮濕感測器做結合,並且利用zigbee的點對點的雙向傳輸的網路拓樸功能當作節點,並在老師或者指導人員設置接收端,當學員去上廁所的時候,觸發潮濕感測器,將訊號傳回Zigbee模組,再透過各個節點傳送將學員成功的完成如廁行為的訊息立刻回傳給接收端給指導老師們知道。當學員進行如廁訓練時,我們將會結合RFID身分辨識的功能,如此一來,使得學員上完廁所時可以即時的有個回饋的效果,例如說有個特定的音樂會出現,或者出現一段錄音的對話,藉此吸引學員的注意,進而可以誘發他們想上廁所的動機,讓如廁訓練可以不是那麼的制式且枯燥,因為朝著學員的喜好而去做改變能夠達到他們的需求得到回饋,也可以讓如廁訓練變得有趣,當學員不再抗拒如廁訓練,久而久之把上廁所變成是生活樂趣的一部分時,如此的循環下去它就會變成一種習慣,在以後有尿意的時候,自然而然的產生要去廁所的想法。此外,我們構想Zigbee能夠記錄學員如廁的次數,當經過某一段時間,指導老師們可以使用PC查詢學員們如廁的規律,一旦有不尋常的狀態發生,老師們就可以關心一下學員們是否有生病還是有別的原因導致記錄的失常,因為上廁所的次數也可以反應出一個人的健康狀況,所以說Zigbee也可以當作是一個指標,不過最重要的還是能夠訓練學員成功獨立的完成如廁行為。

系統概念
我們將利用無線傳輸技術Zigbee結合潮濕感測測器為主要架構,首先我們在廁所小便斗設置感測器安置好Zigbee模組的coordinator及RFID tag,另外外接一台音樂播放器或者其他設備,之後依照學校的環境分配其他zigbee模組的Router的位置,因為我們必須要知道廁所距離學員教室的距離,在這之間又有甚麼障礙物可能會干擾訊號的傳遞,所以我們必須設計Zigbee的網路傳送途徑,確保達到最好的傳輸效果,之後在指導老師的能見範圍內設置接收端,就能夠將接收訊息後顯現出來,如此一來就表示學員們如期的完成如廁行為。當學員上廁所時觸發到潮濕感測器形成一個迴路,使得音樂播放器導通因而播放音樂,在Zigbee模組方面因為感測被觸發而開始無線訊息的傳遞,直到接收端收到訊息為止。
以下我們將會介紹各個設備在本計畫案裡所扮演的角色。

本計畫所使用的設備
(1) 潮濕感測器。
(2) 完整的Zigbee模組。
(3) RFID tag & RFID reader
(4) PDA
(5) 音樂播放器or錄音機


各個設備在計畫應用裡的功能
(1) 潮濕感測器在應用的過程中可被視為一個開關,在感測的部分分成兩端,當兩端同時泡在水裡而導通,因此便形成了一個迴路進而啟動了整套裝置,所以在整個計畫中扮演非常重要的角色。
(2) Zigbee模組可分為三部分
協調器(Coordinator):在Zigbee模組裡扮演父節點的角色,可以利用40pin腳位外接感測器,並且定位為發射端,透過無線網路傳輸將感測器的訊號傳送給下一個子節點並且延續下去。
路由器(Router):在Zigbee網路中的一種網路設備角色定義,是用來採及以及轉發資料,並且延伸Zigbee的網路規模,可以實現多跳網路。而在此計畫裡,能夠將經由父節點傳送感測器所測得的資料透過無線將資料傳送到下一個Router或者是End device。
終端機(End device): 在Zigbee網路中的一種網路設備角色定義,做為網路的最終端節點。在此計畫裡可定位為接收端,當感測器感測成功了,系統將訊息傳達到終端設備。目前構想是當接收到訊息後最好能夠發出訊息給指導人員,或者是以LED燈為指標,當燈亮時代表感測成功,學員順利完成如廁行為。
(3) RFID tag為代表學員的身分辨識,目前的假設是可以依照學員的喜好去設定他們所想要得到的回饋,所以一個RFID tag的角色定位是代表一個人的身分,
在此計畫上設定為主動式移動端。
(4) RFID reader專載在PDA上,為固定端並設置在可令RFID tag可讀取的地方,之後將RFID與Zigbee做整合,能夠設定是能夠記錄學員上廁所的次數或規律。
(5) 音樂播放器或者裝載其他設備其運作模式是當感測器被觸發導通了,緊接著對於學員的喜好給予感官的刺激,像是被放一首好聽歌曲或者是錄製一段特別的話給學員,主要的功能是給學員們的回饋系統,藉以鼓勵學員們能夠使用這項系統,吸引他們想要如廁的動機,久了之後就能變成習慣,藉以改善教師的煩惱。



圖一 為計畫應用所採用的Zigbee模組


圖二 (PDA&RFID Reader)




圖三 (可利用的網路拓樸型式)

系統架構圖

情境介紹
目前是以高雄某大學的要求去架構,以目前的資料顯示他們是屬於獨立小班教學,而廁所就設置在教室後面,所以Zigbee的延長網路似乎就不會用到太複雜的網路拓樸,但是我們認為或許可以在更廣泛的應用,因為當Zigbee的節點設置的多,其效用可以涵蓋整棟大樓所以我們想可以不僅僅是用在特教班的學生,當初構想是否也試用在幼稚園的兒童,我們將會做更努力的測試,提升Zigbee的性能做最有效的利用

摘要

摘要
隨著時代的進步,科技的演變,人們生活變得不得不依賴科技,當然有好的技術能夠帶給人類更方便美好的日子,在這光鮮亮麗的社會假象外,我們很少去注意去關懷到有這麼的一群人也同時跟我們生存著,他們不是不願意去踏入這個社會,而是這個社會給予他們異樣的眼光,因此在這社會裡因此形成了弱勢的一群。當人們追尋理想,想要朝更高更上層的社會前進,是否曾想過有著這們一群急需大家伸出援手接納他們,往其他方面想一想,幫助他人也可以讓自己的內心更充實,生活可以更有意義。科技進步不僅給人們帶來方便,相對的對於弱勢團體而言更是一項跳出自我,踏入社會的工具,我們將思考如何應用科技為弱勢族群帶來更大的效益。
  網絡和無線通訊的發展是現在備受關注的新技術,而其中Zigbee更是新興科技重要的發展,所以我們看好Zigbee的應用而決定嘗試要用在輔助科技上面,而我們針對智能障礙的兒童們的如廁訓練問題做了一些分析,或許在人們眼中,上廁所似乎是很自然的事,但是對於這些身心障礙的兒童,似乎就不是那麼的絕對了,他們不是不會上廁所,只是當有尿意的時候他們並不知道或是不知道如何表達,也許是因為思考的障礙而讓他們不懂得世俗所定義的標準甚麼才是正確的。所以我們要利用Zigbee的功用特點來改善這樣的問題,或許這不能改變根本的原因,不過能讓設備儀器來補償先天的不足,如此一來就能幫助更多需要幫助的人。

關鍵字 智能障礙 如廁訓練 Zigbee
Abstract

Because of the progress of the times and the evaluation of technology, human beings will live dependent on technology. It’s surely that better technology can bring more convenient and wonderful live to human, but behind such colorful word, people rarely to pay attention to take care of a group they still alive with us at the same time. The group of this people they are not reluctant to go in to this community, but the society give them strange sight, therefore they become the vulnerable groups. When people work hard for goal, keeping going to the upper class life, whether think that needed people should be accept by this society or not. Maybe we can think the opposite content, life will be more meaningful and our mind will be richer. The developing of technology not only gives people convenience, but also a tool to vulnerable groups to express themselves and take part in this community. We will reflect on how to use the technology and take more efficient to disadvantage people.

The progress of networking and wireless communication is the new technologies that people focus on, and Zigbee is one of the important technologies. In this way, we decide to try some application to supporting technology, and we do some analysis about the toilet training to the child in special education. Maybe in people’s eye, going to the toilet is such a common thing, but for that child saying that is not absolutely correct. They are not disability; they just cannot express their thought when the urine coming. Perhaps the obstacle of think makes them don’t understanding what the standard of this world is. Consequently, we will search the effect of Zigbee to improve this problem, perhaps this cannot change the original reason, but allows equipment to compensate for inherent deficiencies, as the result we can do our best to indeed help the people who in need.

The students of mental retardation are difficulties than other people of the same age in self-care, movement, communication, social emotional or scientific learning. They always have a lot of challenges in the steps of their life, sometimes, they are aspect of the activities or sometimes they become hyperactive, in the context of learning, they are weak in memory, concentration, imagination and lack of learning transformation, in addition, they are poor in motivation of learning, they don’t have good talent in organize and deal with information. Because of positive learning, they need more and more practice, or learning with the teacher with patience, therefore they can have the skill of essential life. However, in social emotional, losing control is a problem, they were influenced by outside easily, so they perhaps do some behavior of non-society, Not good in cognitive and communication, leading to poor in relationship and lacking of social interaction skills, so they are difficult to adapt to this community.

The toilet training is a part of being life; we will do our best to help the child of mental retardation by using what we learning. There are one word to say “technology are comes from the humanity”, we will use technology to help the child to grow up. In this way, Zigbee is the tool that we choice, as a result of it is good in sending massages in short distance, the function of bi-direction of one to one, and low power and so on. So we select this technology to assist the child of mental retardation, and we will do from some content.

1. Trigger motivation with the way of interesting.
In terms of Zigbee just transmit signal, but when we combine Zigbee with feedback system will product new effect. We set some music or make a tape according to the preferences of the child, letting them to find such amazing feeling when they complete the toilet training once by themselves. Even if lacking memory that they can be used to assist memory by sensory, and leading to the motive of the next toilet training.

2. Practice and practice
Because of the child are bad in learning and concentrating, so the concept of toilet training should offer more chance to practice. Although the child don’t to operate complex machine, but we just hope them to remember our system, and then going to toilet. Once they can continue trigged to toilet, as the time goes by, going to toilet will become a habit. Consequently, they can successfully complete toilet training by our supporting technology.

We all have confidence to using Zigbee become one part of supporting technology to help people who being in need. As the toilet training as the start, letting the students of mental retardation take the first step into community, even if there are long way to go, but building their faith at beginning, we are trust in all of we done is worthy.


Keyword: Mental retardation , Zigbee , Toilet training

2009年5月12日 星期二

關於今天控制參數的命令

今天我打專題進度報告時順便找了一些資料但是不知道可不可以用

還沒試過 也不知道試不試用我們的模組

就是關於控制參數的設定

網路上有一些文章 他們使用的參數設定是用一個X-CTU的程式修改的






圖(X-CTU)截取自網路

這是定義:
接收端Zigbee設定為ZIGBEE COORDINATOR AT、發送端Zigbee 設定為ZIGBEE ROUTER/END
DEVICE AT,並將Operating Channel 及PAN ID 設定相同值完成配對設定、Baud Rate
設定必須與程式內參數相同。


對它的說明
"任何人只要對微控制器編程略有經驗都不會為此而皺眉頭,查實該等命令只是ASCII碼(字符串),就好像你見到的調制解調器命令一樣,發送命令給XBee就如數據一樣。而這是有小小的軟件告知兩者誰是誰,工作情況如下。

在你可以發出一個命令之前,須將XBee置於“等待命令”狀態。要使它進入此狀態,便要給它一串三個+字符(hex 2B),即文字上是“+++”,之後,XBee期待收到一個以Hayes格式的命令,這命令總是以ASCII碼的“AT”(此代表 “attention”),緊跟著的才是實際命令及任何命令參數(如有),命令串由一個Carriage Return(CR)回車字符作終結。圖4舉出一個例子,XBee模塊執行該命令,然後報告命令是否成功處理,如一切已按意旨去做,XBee便回應 “OK”;否則,會從模塊收到一個錯誤信息。

MaxStream也提供一個名為X-CTU的簡短程序,令到一切事情甚至更加方便,這程序在MaxStream網均供免費下載,可用它來配置XBee模塊的所有參數,不過先要將XBee模塊連接至你PC的COM接口(因信號電平不同須經適配器),另外亦可用X-CTU來測試模塊和將之升級。 "

先發表一下看法!!!

目前還沒有去下載來做測試 所以不知道對我們是不是有用

2009年4月30日 星期四

A perspective on intelligent devices and environments in medical rehabilitation

文章一開頭就點出關鍵性的主題了,人口的高齡化老年人的人數增加,不免可以 推測身心障礙者或者各種疾病的患者也以正比的速度增加。既使醫學上的知識或設備比起從前是有很大的進步,但是我認為還不足以應付未知多變的醫療問題。 老化人口及障礙人士的增加,所依賴輔助技術的需求也大增,而為了解決現實的問題,人們將嘗試新的技術以及社會規範的挑戰,以至於使我們得以延續生活的品質。

我記得在一部電影裡有一句話說得不錯,”活者從來不是一個人事”,很明白的說出人的行為或生活型態很容易的影響別人或受到別人的影響,但事有障礙的人何嘗不想靠自己的能力獨立的生存,所以智能系統的開發,行動輔具技術的精進,是人們的一大福音,由於技術的進不僅可以促使醫療的康復也可以提高障礙者的就業機會,以現今來說智能開發從以往用於軍事或製造進而轉換在輔助醫療上對於醫學上確實有很大幫助。

在這篇文章裡有介紹到一些普遍的輔助技術,例如有smart home,透過醫生與患者的面對面的協議,最後由醫師來評估患者在現實生活的能力,到不如讓患者利用傳感器集成在生活環境的一部份,透過數據的傳輸讓專業的保健人士獲得更明確的資訊。普遍的保健醫療技術,讓患者能在熟知的環境下生活,在遇到困難時會危急的情況能也能及時的透過輔具提醒家庭人員或醫療體系人員,雙方由輔具建立的平台能夠讓患者的能力受到肯定,也可以讓醫師們監控和得到準確的數據,更進一步的經由數據的研究臨床的實驗,因此提升醫療輔具的技術和效能。

另外在治療的方面,由一種機器治療法,讓行動障礙裝備機器,利用機具有系統的週期運動,讓患者不便使用的四肢可以獲得適當的活動,漸漸的可以恢復行動的機能,達到復健的效果,而文章內容也提到機器康復的系統可以結合遊戲等娛樂,因此調整患者的心態,讓患者可以享受在的個人的治療,優化的遊戲治療最終是把虛擬的轉換成實境,讓機械治療有最好的使用價值和最好的康復結果。

最後我不得不說一件很現實的事,的確老年人口及障礙人士的增加,確確實實的造成了很多社會上的問題,因此也造就了許許多多的輔具及醫療康復系統的進步,但是想想這也是問題的根本,換句話說是醫療進步而產生人口高齡化級後續的問題,兩者的關係是像是一對一的無窮迴圈,有人說假設地球沒有滅亡,在不知經過多少年的時間,地球上變成完完全全的高齡社會。這有待研究人員的探討,因為我們都不會遇到,不過現今的課題是如何嘗試新的技術及社會規範的挑戰,讓我們的生活品質能夠得以延續,不是思考遙遠未知的事,而是要貢獻自己所學之事,進而幫助更多應該幫助的人。

2009年3月27日 星期五

程式練習 #1 -2

利用checkbox ,panel,textbox,button.messagebox

所做出來的類似點餐的程式


程式碼






初始畫面





EX1:點餐 message show 出點的餐



ex2:多量的餐及數量顯示









雖然很少的程式碼
但是卻試了很久!!
一開始設了兩個變數 i , j ;
temp的值也想了很久,
結果都不對
後來想想好像都是邏輯錯誤 ~"~
是不是不同的工具(有用到迴圈)不能放在同一個panel ?


2009年3月21日 星期六

程式練習 #1

這是我用button ,picture 與 label 三個做的結合

主要內容是按按鈕會出現顏色及解釋

程式碼



初始狀態

案第一個按鈕


案第二個按鈕


按第三個按鈕


第一次練習程式 覺得邏輯真的很重要
雖然上面的程式用的概念並不多
但是還要想想看,而我用的還是比較死板的做法
雖然知道還有很多方法可以省略多餘的部分
不過還得需要多多學習才是!!!!



2009年3月16日 星期一

CLAPIS on RFID system 心得

RFID最近很紅的科技產業,透過RFID tag 與RFID reader兩者之間的溝通,可以很方便又快速的傳輸訊息,可想而知利用這個特點就可以做很多的應用了,例如文中所提到的醫院的監控,公司大門入口處的警衛系統,前幾篇論文提到的博物館,以及設置在快速道路上,還有在特定的地點可以收到交通資訊,天氣預報,購物訊息之類的。此外商業化的應用,就可以以此當作廣告或者優惠傳遞的方式等等等。所以RFID在未來想必更是有一番的天下,而這篇論文的主要所提的也是介紹RFID的CLAPIS。


在某個特定的地點和區域,當你裝有RFID的手持裝置一靠近時,透過無線傳輸就會立刻的接收訊息,我想這就是整篇文章的所環繞的主旨吧,另外,RFID使用在CLAPIS有幾項特點,就是接收訊息,有效率的使用系統,可以被嵌入在類似的硬體上,被服務的對象是各式各樣的人,不僅提供公眾訊息也支援個人化的服務。而傳輸的方法有經由網路,使用的RFID tag 跟readable 及re-writable的RFID tag,而文中也有提到,可以依照使用者的喜好去記錄及分類所得到的資訊,就算在沒有網路的地方,也可以使用被記錄過的資料,所以非常的方便了。


現今已經有許多實際上的應用了,最多類的就是RFID的ticket或 card吧,甚至還有出玩具,所以涉獵非常的廣,而且現在PDA或者是mobile phone可以置入SD卡的就可以使用這資源了,而在非營利的事業上,幫助需要幫助的人,我想這對社會大眾而言何嘗不是一項助力。

2009年3月13日 星期五

Web2.0網路服務與Ontology 技術在非營利租屋網站

時代的進步,科技的發達,網路資訊已不限定是專業人事的使用權了,web2.0平民的化技術,結合了很多的產業,貼近了我們的生活,不僅讓不便利的人可以得到幫助,也提升了網路資源分享的機會,如此一來,透過網路的傳播,就可以大大減少成本的花費,也跨越時間和空間的隔閡。


利用web2.0的技術結合租網,讓有需要的人只要在網路上就可以隨意的瀏覽,不減節省了很多時間也節省了很多成本,更重要的是可以方便的做比較,不用大老遠的跑來跑去,而崔媽媽租屋網更甚至結合了GIS活用了地理資源,讓地圖資訊融入生活當中,另外就是AJAX技術,讓網頁瀏覽的速度變快了,這樣才不會讓使用者斷斷續續的閱讀,或者是記著片刻的記憶,反而失去用網路搜尋的效果。 此外還有Ontology與RDFS技術,在如此數位化多資源的模式下,創立一個使用者與電腦的溝通平台,讓使用者能夠在短時間內做到最有效率的search 。我想一個受歡迎的使用方法,想必一定是達到人們的需求,便利人們的生活,所以才能讓各方面的人接受,利用web2.0的技術不僅造福了很多的大眾,更是為一些有障礙的人設想,讓他們也有能力使用這些資源,不會喪失個人的權力,我認為這也達到非營利組織真正要的目的了。


後來我實際上了崔媽媽的租網看了一下,想到當初要大一下要出來找房子,一行人跑來跑去,廣告傳單一直拿,跟屋主排時間要求看屋,詢問一些有的沒的,花了很多的時間,但是崔媽媽上的網站卻寫得一清二楚的又有圖片可以參考,我真的覺得是非常方便的,更何況一些不便出門的人,的確讓我非常的驚訝,超出我原本的預期,可想而知,此技術的使用確確實實是對人們是有很大的幫助。

2009年3月10日 星期二

2009年社區精神障礙康復之會所模式實務交流研討會心得

禮拜六的這一場研討會,雖然下著大雨,但是依舊起了個大早,長途跋涉的來去青年活動中心聽演講,一開始,王增勇先生就先聲明了這不像是主題”研討會”這麼的嚴肅,比較像是一種經驗的分享,意見的交流,因此大家都是為了這些精障朋友們著想而來到這個地方,我認為很有道理,會場裡有來自各個地方的人,不論是學術界,社會人事,醫學界,精障同胞,家屬,以及政府高層的人都列入其中,會場的佈置像是聚會般的,讓整個氣氛都融入在很融洽的氛圍裡,很順利的開始了今天一整天的活動了。


慈芳與活泉是來自台灣的兩大會所,而就”會所”而言,他們是來自一群非營利組織的團體,主要是幫助精障者們找出自我,活出信心,並帶他們走出社會,再次接納他人。一開始的慈芳說故事及之後的活泉之家的演講,主要都在介紹他們整個團隊的運行,努力的過程,及未來的願景,當聽他們在演說的過程中,他們更是以工作人員及會員的關係稱呼對方的,這讓我感覺到很窩心,顯示出有真正的為他們著想,在這冷漠的社會裡,人吃人的競爭環境裡,有誰會去想到這社會的邊緣裡有這麼一群默默付出的團隊,縱使政府有社會福利法保障身心障礙的同胞,但是往往法律的漏洞讓應該得到關心的人得不到照顧,所以有他們的出現能使這個世界知道社會上還是有溫情的。下午有來自澳洲的Stepping Stone的三位專家來闡訴在他們國家裡是如何從事這個會所的工作,透過他們的經驗分享,讓我們知道他們的政府給予了他們很大的補助,這讓我們國家要好好的學習,另外也給予他們的會員很大的鼓勵,透過過渡性的就業讓會員重拾信心,走入人群,慢慢的了解自己的潛能活出新的自我,看看理查就是很好的例仔。最後在快樂天堂的歌聲下結束了今天一整天的流程也為這整場研討會畫下完美的句點。

經過一整天的研討會讓我知道這個社會有這麼多人持續的關懷這些精障者,在這麼多的人的努力之下,他們並不是沒有能力,在研討會上,不論是表演或是演講以及最後的綜合座談,我看到的他們是很肯定他們自己的,而不是像外界一般給的刻板映像,他們缺的只是一個機會來證明他們自己。

2009年2月22日 星期日

非營利組織運用web2.0之心得

時代的進步,科技的發達因此縮短了人與人之間的距離,因為有需求所以才發明了這些東西,能夠更接近我們的生活,無可否認的是我們的確是越來越依賴科技了,畢竟它帶來了很多的好處,而使用者不應有所區別,窮人或精障者也可以使用好的科技的權力。

因為科技使得資料的整合容易,訊息傳輸的準確及快速,因此能夠達到最大的效益。非營利組織引入web2.0的技術,能夠幫助精障者的效果遠比傳統的方式來的好,以往就輔員要花大量的時間去書寫記錄精只為了向上回報,並沒有達到真正的意義,假如應用web2.0所建立的平台,就可以省下許多的時間去做別的事了,此外,各個就輔員彼此間的意見交流,心得分享,介紹職務給精障者工作機會,資訊的傳遞不會因此而受到侷限,還有,就輔員與雇主的關係也可以藉由此能讓溝通更為生動,不是以往的紙上談兵了,對精障者的就業能夠更有彈性也很多方面所以有直接的幫助,帶來的易處是非常多的。但就就輔員方面而言,學習新的一樣科技或許會有點不能接受,但是總是要經過一點考驗才能有成果,不過相信,利用web2.0的操作,能夠簡單的方便完成工作,而科技來自人性,接受就能慢慢的適應了。
  
  窮人使用差勁的科技,或許真的買不起昂貴的設備,但是只要能夠用到適當的科技,得到的效果是卻加乘的,我很認同這論文裡提到的一句話就是此研究的精神就是展現一種基於平等參與關係的科技發展過程,每個人都有使用科技的權力,科技是便利人們的需求,改善品質,而就此研究的非營利組織而言,科技的運用在助人的過程裡成為助人的助力,最大的受益者,不是就輔員也不是雇主, 更不是研究人員,而是這些精障者,所以成功的達到了使用科技的目的了。

2009年2月16日 星期一

心得與優缺點

心得

讀完了大同大學的論文
瞭解了他們主要分析的事RFID及QRcode的應用在PDA上的行動導覽。
在博物館的使用上我想的確是非常適當的,能夠準確的分門別類,
提供資訊介紹可避免人潮的擁擠,另外更能詳盡的對作品作簡介
達到真正到博物館的效果,不是只是讓作品曇花一現
利用人手一台PDA人機互動的介紹方式,讓使用者也非常的方便。


但是看似華麗的外表下,裡面卻蘊藏者複雜深奧的程式應用
若要利用RFID無線射頻技術,須撰寫RFID Reader以便相對應的
RFID tag作用,看著它裡面介紹的內容,也深刻的了解我有很多的
東西要學習,也對於這些即將要接觸的東西有了初步的認識。

另外主要的系統就是QRcode 也就是二維條碼,使用上跟RFID相類似
但是內容上就相去甚遠,有用到Flash,HTML,SQR與法,及串流的
技術等等,雖然在它這篇的介紹裡面放了幾張用C寫的程式,但是以現
在的能力對這些東西依舊是一知半解的,這讓我很清楚知道自己該努力
的空間還很大很大.....


看完了這篇論文,很佩服他們能夠做出這樣的東西來,的確不簡單
但是我相信別人可以的我們當然也可以做得到的,天下無難事只怕有心
人,在未來的還有很多的時間去摸索,讓我們在這個領域裡能夠挖到更
多的知識,有一句話說得好,方向不對努力白費,不過現在有了目標,
有好的開始就能更往前踏進成功的一步,一枝草一點露,成功也是累積
出來的,所以要努力了。



優缺點

以RFID而言,最大的罩門不外乎就是成本相比之下過高,以及要儲存
在高容量的SD記憶卡上,相對的QRcode就不用那麼費成本,只要透過
無線連到server端就可以拿到資訊,但是每件事總有個一體兩面,成本
高但是每台PDA都是獨立作業,不用怕也延遲的現象,更部會受到流量
的限制而閱讀時斷斷續續的,相對的成本低,但是就是限制多,流量,
雜訊,訊號範圍,架基地台等等,且不能多台一起使用,使用上的效果
就不能達到最好的狀態。另外既然是博物館,展覽品進進出出的流量
大,所以資訊必然要常常更新,若是用在SD記憶卡的話我想如果要更
新的話那不就要每張SD卡都要改,若只是更新server端的話我想
QRcode系統應該是更省時方便的。以上是我認為這兩個系統最大的
優缺點。

2009年2月13日 星期五