2021年11月1日 星期一

何謂六位半電表

 最近在座公司的儀器校正

很好奇一專有名詞的定義

六位半電表:七位数字并且后六位可显示0~9。

半位 是甚麼? 测量结果的某一位能显示0~9的数字则称为1位,不能0~9全部显示则称为半位。

https://zhidao.baidu.com/question/361609164781515372.html

2021年9月21日 星期二

Python抓取天氣資料+Line Notify 通知

參考範例知識庫:

1:天氣查詢API介面 :
https://opendata.cwb.gov.tw/devManual/insrtuction?fbclid=IwAR1zwO-DgQW9Ot0E9pyUaKkwCxRix1E4EJpueBN_9chxPpYXbSI4DTrLvyE

用的是第3:

3.資料擷取-使用說明及目前開放資料擷取之氣象資料 線上API使用說明


2:Line Notify 連動程式碼 & Token 申請與 網路設定
https://ithelp.ithome.com.tw/articles/10223413

3:Dict 字典取值
https://www.runoob.com/python/att-dictionary-get.html

4:日期操作:
https://ithelp.ithome.com.tw/articles/10235251

天氣查詢工作事項:
申請帳號,獲得token key,填入 Authorization= 的後面 ,把XXX-XXX 取代掉.
url="https://opendata.cwb.gov.tw/api/v1/rest/datastore/F-C0032-001?Authorization=XXX-XXX&limit=1&elementName=Wx&format=JSON&locationName="

字典取值工作事項:
必須知道自己要取那些值,字典跟JSON格式的 Dict 與list 交換穿插的解讀

日期操作工作事項:
把日期值簡化

程式碼 注意事項:
1.注意 locationName之查詢城市是要 用輸入的或是預定的
2.要查那些資料先從requests 回饋資訊,先讀一次再 拆解JSON,擷取自己要的,過多的話可以先取第一個,再適當放大資料數。
3.程式分成 兩個def 模組,一個是get_weather 進行Request 取值,一個是 LineNotifyMessage 通知LineBOT
4.有兩個Token key 要先獲得,一個是 氣象查詢的,一個是Line Notify.

程式碼:

import requests

import json

import time

def get_weather():


# cityname=input("輸入天氣查詢城市")

#   F-C0032-001 是要查詢的資料種類,分類請查裝央氣象局對照表

cityname="桃園市"

# url 是來自中央氣象局給的 wbe query 網址, authorization 後面xxxxx...填入氣象局給你的授權碼..後面參數格式請查中央氣象局資料網站有說明.

url="https://opendata.cwb.gov.tw/api/v1/rest/datastore/F-C0032-001?Authorization=XXX-XXX&limit=1&elementName=Wx&format=JSON&locationName="

city_url=url + cityname

res=requests.get(city_url).text

# print(res)

res=json.loads(res)

a=res["records"]["location"][0]["locationName"]

b=res["records"]["location"][0]["weatherElement"][0]['time'][0]

c=res["records"]["location"][0]["weatherElement"][0]['time'][1]

d=res["records"]["location"][0]["weatherElement"][0]['time'][2]

k=res["records"]["datasetDescription"]

l=b["parameter"]["parameterName"]

# print("res 是何種資料結構 : ",type(res))

# print("a=",a)

# print("b=",b)

# print("c=",c)

# print("d=",d)

# print("K=",k)

# print("b類別=:",type(b))

# print("天氣 :" ,l)

bmsg=b.get("startTime") + "至\n" + b.get("endTime") + ":\n" + l

cmsg=c.get("startTime") + "至\n" + c.get("endTime") + ":\n" + c["parameter"]["parameterName"]

dmsg=d.get("startTime") + "至\n" + d.get("endTime") + ":\n" + d["parameter"]["parameterName"]

Tmsg="\n"+a+"\n"+ k + "\n"+ bmsg+ "\n"+ "\n" +cmsg +"\n"+'\n'+dmsg

# print("Tmsg=",Tmsg)

return Tmsg  #回傳值給msg

#------------------------------------------line 通知 的模組

def lineNotifyMessage(token, msg):

    headers = {

        "Authorization": "Bearer " + token, 

        "Content-Type" : "application/x-www-form-urlencoded"

    }


    payload = {'message': msg}

    r = requests.post("https://notify-api.line.me/api/notify", headers = headers, params = payload)

    return r.status_code


msg = get_weather()

token = '填入line給你的token 一長串字碼'

print("傳給line的msg=\n",msg)

#get_weather()

lineNotifyMessage(token,msg)

2021年9月20日 星期一

創客DIY網站與賣家-MAKER DIY


台灣物聯科技有限公司
https://www.taiwaniot.com.tw/
可以買到很多開發版


最近看到有人Post 一半都是套裝的電流電壓表/溫控器/自動往復循環/時間控制等等 http://www.topdiy.com/


https://shopee.tw/
蝦皮 就分店家專業性跟種類了。
也都有二手的。

https://www.ruten.com.tw/
露天也是,什麼都賣,什麼都不奇怪。
也都有二手的。


http://momoshop.com.tw/ 

Momo 

博客來 大家都知道

淘寶 大家都知道

2021年9月18日 星期六

C#-VISUAL STUDIO 2017安裝-2019安裝

(所有的初步文章發表,都先以草稿或文字。因主要以手機編輯。)




要開始學習C#了。

新手第一關就是「安裝環境」。

因為常常卡在環境的不同,或忘裝了某個東西。或是裝錯版本。或是不知道在哪裡安裝。

案例:
1:想起當初自學Python的時候,也是找在哪裡安裝,初期是看網路上的資料,後來真的太亂,因為有年代以及網路上案例開發時用的版本差異。
所以後來是買了一本書,跟書上使用相同的版本。
以及安裝時一大堆選項也才搞懂。
2:近期也有朋友問我Python開發程式,要花錢買嗎?像OFFICE一樣要花錢嗎?我說:不用錢。
她又問:哪邊可以安裝?我說:網路官網。
於是我把網址貼給他,並且告訴她:有版本跟作業系統種類跟作業系統位元版本。

這個視頻是我自己看到講得還不錯的。
而且自己也是裝了VS2019版本。

問題:
為什麼同事裝的是2017版本。到底去哪裝的啊?我怎麼沒看到?同事都說官網裝的啊。

解答:
影片裡,我找到解答,原來在可用相容裡面。YA!YES.

 https://m.youtube.com/watch?fbclid=IwAR1Y_X0CJDlUIAYYyVTWqB09RxO6VrzXMickKbfMNN8EVM9S634c-uPqb5w&v=SfeJfKM8xOY&feature=youtu.be#menu


2021年9月13日 星期一

氣動缸拔出USB connector

 此文為「USB插拔往復循環測試系統設計」的其中一環,我感覺是最難,因為以前都沒設計過機械對位與固定。

選用的是 金器工業 的 MCDA雙軸倍力缸。但不一定要選這個。滑軌是的或平台式的我覺得也可以。

或者一般伸出的。

https://www.mindman.com.tw/webls-zh-tw/Dual-rod-cylinder.html

試驗完,感覺最後還要克服物理固定跟連接。

要固定夾或線型滑軌平台。

不過最後還是牽涉到如何完全保持不動,才能精準測試插拔壽命。


目前構思是拔一半脫出連接但不跑出USB殼外。

1:彈簧阻止持續退後縮桿。

2:機械開合結構限位持續氣缸縮桿。

3:USB外型通道限定活動只能前進後退。

4:被插入端,導桿跟雙彈簧偏位反向力校正。

5:線束或固定片固定USB綁定在測試基座上。

6:磁性力吸附方式。

https://youtu.be/JMDN_zFiNKg

2021年9月11日 星期六

Python +D1 mini 控制繼電器循環(連接器動控制可實現 汽缸控制)

 继电器控制往复循环/时间跟触发

我用的是(目前尚未接汽缸) Python控制+开发板+Relay 板: Step1:缩回汽缸用SERIAL PORT 命令。 Step2:伸出汽缸用时间控制。 Step3:启动测试TEST用USB PORT侦测插入启动。 PYTHON 程码内判断后=》透过电脑 USB/serial port 输出文字=》开发版 接受文字后 程式码判断 =〉开发版的脚位讯号 输出给 Relay 的IN 触发启动脚位=》触发 Relay继电器电路板=〉Relay切换开启电源。 我这实验里面是做一个周期循环。 Python程式每秒切换一次On/Off。 控制设备气压继电器/电源继电器的方法: 1:选择适合的控制继电器(气压/电压/电流) 2:触发讯号脚位/触发通讯字元/触发讯号电压为准要求/通讯协定方法/通讯硬体接口PORT 型式(USB/RS232/RJ45/Wi-Fi/GPIO/RS485) 3: 循环方式: 1:程式计算时间来控制外部继电器 On/Off。 2:外部Timer计算控制继电器on/off 3:靠硬体线路Sensor控制:光电开关/磁簧开关/微动开关/近接开关/压力开关。 4:PLC计算时间控制继电器与气动缸。 5:Sensor 触发PLC 启动控制 汽缸继电器。


2015年11月14日 星期六

Excel VBA抓取儲存格內不同顏色部分字串

搜尋顏色標為紅色的字串,並將抓取字串相加後存在另一個表

PS:
Sub CHECK_CONTENT_LENGTH_SEPERATE()
--這個sub 是將同一個儲存格抓到的連續字串次數 逐次 複製在 另一個表的幾個欄位

諸位使用以下便可
Sub CHECK_CONTENT_LENGTH_TOGETHER()



(智慧財產權, 轉用者請獲得原作者同意後方可使用,
並標注出處 與 本文超連結)

'''''程式碼如下

''程序
''將鼠標點擊域搜尋的工作表(worksheet)
''由 sub 新增工作表執行
'''
'''***************************************************************

Sub 新增工作表()
Dim 可新增 As Boolean
''判斷新增工作表是否存在, 無則增加
可新增 = True
'MsgBox "原始可新增=" & 可新增
新增工作表名稱 = "不用新增"
MsgBox "目前工作表 " & ActiveSheet.Name
目前工作表 = ActiveSheet.Name

        For k = 1 To Worksheets.Count
           
              If Worksheets(k).Name = ActiveSheet.Name & "(簡化)" Then
           
              可新增 = False
     
             End If
        'MsgBox k & " ws.Name=" & Worksheets(k).Name
        'MsgBox "結果=" & 可新增
     
        Next k


If 可新增 = True Then
             
                新增工作表名稱 = ActiveSheet.Name & "(簡化)"
                Set NewSheet = Worksheets.Add
                NewSheet.Name = 新增工作表名稱
                Worksheets(目前工作表).Activate
End If

MsgBox "新增工作表名稱=" & 新增工作表名稱
 '''MsgBox 新增工作表


Call CHECK_CONTENT_LENGTH_TOGETHER
End Sub

Sub CHECK_CONTENT_LENGTH_TOGETHER()  ' 判斷儲存格字元數,並累加紅色字串

Dim 字串長度 As Long
Dim 連續紅色字串 As String
Dim 相對列位 As Integer
Dim 可新增 As Boolean
Dim 新增工作表 As String

新增工作表 = ActiveSheet.Name & "(簡化)"
原工作表 = ActiveSheet.Name

連續紅色字串 = ""
字串數 = 0
'

''K是欄位 號
For j = 1 To 20 ''''' 列編號 外圈 用以一列掃描完 後 換下一列

For k = 1 To 6   ''''欄編號 偵測是否有在那個欄位


字串長度 = 0
'MsgBox "儲存格" & j & " : " & K & "  : " & 字串長度 & ActiveCell.Text
'MsgBox "字串長度=" & 字串長度

字串長度 = Len(Worksheets(原工作表).Cells(j, k))
Worksheets(原工作表).Cells(j, k).Activate

Debug.Print "儲存格" & j & " : " & k & "  : " & "字串長度=" & 字串長度 & "內容=" & Cells(j, k)



連續紅色字串 = ""

                        If 字串長度 > 0 Then
                             
                                For i = 1 To 字串長度   ''' I 變數 用以逐字偵測 紅色 字元
                             
                                                          ' Debug.Print "第" & I & "字元=" & ActiveCell.Characters(I, 1).Font.Color
                                                         ' MsgBox "第" & I & "字元=" & ActiveCell.Characters(I, 1).Text & " ;顏色" & ActiveCell.Characters(I, 1).Font.Color
                                       
                                       
                                         ''''''A 段 '''   ' 判段字串顏色=5 ,並累加字串
                                          Worksheets(原工作表).Cells(j, k).Activate
                                       
                                            If ActiveCell.Characters(i, 1).Font.Color = 255 Then
                                         
                                           連續紅色字串 = 連續紅色字串 & ActiveCell.Characters(i, 1).Text
                                         
                                           Debug.Print "連續紅色字串 中間=" & i & 連續紅色字串
                                                            'MsgBox "連續紅色字串=" & 連續紅色字串
                                                            'Debug.Print 連續紅色字串
                                           End If
                                           '''''''A尾''''''''''''''
                                         
                                         
                                           ''''B段'''''''最後一個字元是紅色,直接印出
                                                If i = 字串長度 Then
                                             
                                                ''''''''''''''''''''''''''''''相對列位 = ActiveCell.Row
                                                                ''''''  ' 字串數 = 字串數 + 1 ''''''''''''''
                                                ''''''''''''''''Worksheets(新增工作表).Cells(相對列位, 字串數) = 連續紅色字串
                                                ''''''''''''''''連續紅色字串 = 連續紅色字串 & ActiveCell.Characters(I, 1).Text
                                                Worksheets(新增工作表).Cells(j, k).Value = 連續紅色字串
                                                Debug.Print "連續紅色字串 結尾=" & i & 連續紅色字串
                                                連續紅色字串 = ""
                                             
                                                End If
                             
                             
                                         
                                   Next i
                            End If
                         
   '相對列位 = ActiveCell.Row
   ''Worksheets(新增工作表).Cells(J, k) = 連續紅色字串
    'MsgBox "連續紅色字串=" & 連續紅色字串

Next k



Next j

End Sub

Sub CHECK_CONTENT_LENGTH_SEPERATE() ' 判斷儲存格字元數,並累加紅色字串 次數

Dim 字串長度 As Integer
Dim 連續紅色字串 As String
Dim 相對列位 As Integer
Dim 可新增 As Boolean

新增工作表 = ActiveSheet.Name & (簡化)

連續紅色字串 = ""
字串數 = 0
'ActiveCell.Characters.Count




字串長度 = ActiveCell.Characters.Count

MsgBox "字串長度=" & 字串長度

    For i = 1 To 字串長度
 
          ' Debug.Print "第" & I & "字元=" & ActiveCell.Characters(I, 1).Font.Color
         ' MsgBox "第" & I & "字元=" & ActiveCell.Characters(I, 1).Text & " ;顏色" & ActiveCell.Characters(I, 1).Font.Color
     
                If ActiveCell.Characters(i, 1).Font.Color = 255 Then ' 判段字串顏色=5 ,並累加字串
             
               連續紅色字串 = 連續紅色字串 & ActiveCell.Characters(i, 1).Text
             
               'MsgBox "連續紅色字串=" & 連續紅色字串
               Debug.Print 連續紅色字串
             
               End If
             
                    If ActiveCell.Characters(i, 1).Font.Color = 255 And i = 字串長度 Then
                 
                    相對列位 = ActiveCell.Row
                    字串數 = 字串數 + 1 ''''''''''''''
                    Worksheets(新增工作表).Cells(相對列位, 字串數) = 連續紅色字串
                 
                    連續紅色字串 = ""
                    End If
             
             
               If ActiveCell.Characters(i, 1).Font.Color <> 255 Then
               相對列位 = ActiveCell.Row
               字串數 = 字串數 + 1 ''''''''''''''''''
               Worksheets(新增工作表).Cells(相對列位, 字串數) = 連續紅色字串
             
               連續紅色字串 = ""
             
               End If

             

Next i

'MsgBox "連續紅色字串=" & 連續紅色字串


End Sub

************************


可能遇到的困難
1.Mac 顏色與MS 顏色編碼可能不同,所以設定顏色可能會變,字元碼也會不同
==>可以利用即時視窗輸入 來確認顏色碼 (列與欄位根據自己的文本內容)
print cells(11,3).text
答:
print cells(11,3).font.color
 255

2.老是忘記 用 來驅動 目前工作欄
Worksheets(原工作表).Cells(j, k).Activate

3.判斷每個字顏色 (關鍵技巧,找了很多網頁沒有現成的全文判別)
字串長度 作為 迴圈 來進行 每個字確認
使用到 activecell.characters(start , length).font.color

4.最後一個字如還是紅色 則必須判別是否為最後一個字元,否則不會印出

**********************************

2015年8月13日 星期四

Mac OS X 安裝ARDUINO 1.5.8 IDE for Yin and Ardublock


這裡特別寫篇文說,因為發現沒有找到文章指示很明白。
所以起初以為沒有裝好,而以為ARDUINO for Mac版本不佳。而沒有使用,然而正准備移除時,才赫然發現原來是這樣。(常期使用windows,不熟悉Mac)。

我的系統:
Mac operation system :Mac OS X 10.7
我的電腦:2012年版 Mac Air 11"-2012 year's


言歸正傳
1:先去年ARDUINO.cc 下載ARDUINO IDE for Mac OS(你可以安裝1.0.6,如果有ARDUINO Yun 則要安裝1.5.8版 for Yun,
當然沒有Yun也可以安裝IDE 1.5.8版)

http://www.arduino.cc/en/Main/Software


2:然后,下載完開啟。
  開起成功后,關畢。再把映像檔移入\app 應用程式。 資料夾底下。(把finder 打開,就可以看到。)

然後開起程式後,你會發現功能表怎麼不見了?其實不在應用程式視窗上,而是在最上方的功能表,注意到了嗎?大視窗功能表隨開起的應用程式變化選項。原來Mac跟windows這麼不同。




3:下載Ardublock ,從底下網址下載安裝程式。Blog.ardublock.com。

你可以進入getting started with Ardublock 頁籤,然後按download 提示字。

注意(1)下載頁引導到某網頁,記得不要被騙去按廣告或下載一些不要的程式。可以從下載監控視窗看是否有自動下載,如沒有,再看下載網頁上哪個是真正下載Ardublock 。
(2):你下載的可能是較舊版。有些版本安裝後可能具有的元件不多。
我下載的是20130703。版本。


4:下載打開後就如底下


然后多多看blog跟別人的案例熟悉用法

也可以買書,cave 團隊有出一本。
======================

2015年1月3日 星期六

Lab02 ARDUINO-Basic Fade Example:第二個實驗逐漸變暗LED

達到甚麼?

控制 LED 逐漸暗下,瞭解以PWM 的 Digital Pin 輸出控制變化


Arduino 預設程式example 之basic\fade




程式碼:

/*
 Fade

 This example shows how to fade an LED on pin 9
 using the analogWrite() function.

 This example code is in the public domain.
 */

int led = 9;           // the pin that the LED is attached to
int brightness = 0;    // how bright the LED is
int fadeAmount = 5;    // how many points to fade the LED by

// the setup routine runs once when you press reset:
void setup() {
  // declare pin 9 to be an output:
  pinMode(led, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  // set the brightness of pin 9:
  analogWrite(led, brightness);

  // change the brightness for next time through the loop:
  brightness = brightness + fadeAmount;

  // reverse the direction of the fading at the ends of the fade:
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ;
  }
  // wait for 30 milliseconds to see the dimming effect
  delay(30);
}





Lab03-ARDUINO光敏電阻感測元件:第3個實驗

A:要學甚麼?

光敏電阻 隨外界光強度變化電阻值=>光線越亮  電阻越低.

PWM 輸出頻度 控制輸出 LED 功率 => 亮度變化

B:達到效果?

越暗 燈要越亮=>自動化的點燈 跟  節能


C:材料
ARDUINO UNO
光敏電阻 *1 
紅色M5 直插LED*1
220Ω直插電阻
麵包板*1 

麵包板跳線*1 紮

D:程式碼
int potpin=0;//定義類比介面0 連接光敏電阻
int ledpin=11;//定義數位介面11 輸出PWM 調節LED 亮度
int val=0;//定義變數val
int PL=0; //初始化 PWM 輸出
void setup()
{
pinMode(ledpin,OUTPUT);//定義數位介面11 為輸出
Serial.begin(9600);//設置串列傳輸速率為9600
}
void loop()
{
val=analogRead(potpin);//讀取感測器的模擬值並賦值給val
Serial.println(val);//顯示val 變數數值
PL=(val/4);
analogWrite(ledpin,PL);// 打開LED 並設置亮度(PWM 輸出最大值255)
delay(500);//延時0.5 秒....太快會眼花
}


E:線路圖




F:結果照片
一般狀況下(家裡光源:Val=350上下,下午17點街道環境光源:Val=28上下差十倍)。
經量測電流5mA;光敏電阻兩端電壓1.58V;0.5mA。



把光敏電組遮蓋達到模擬,環境 暗=>LED 更亮
環境亮=>LED暗






要注意的是, 感光的部分 用類比迴路偵測=>偵測到的數值=>改變 數位輸出的脈波頻度=>LED光強度改變
程式裡 數值的傳遞要注意, 數值格式類型,是否已經宣告,公式代換後的輸出變數 最大值是否超過 等等

G:結果影片








H:應用思考

1.光敏電阻 電阻值 跟 照度計的 照度對應 會是如何? 可否作為一個簡易照度計? 如何使簡易照度計精度更高?
1-1:光源強度不同,變更串接電阻的大小來應對。
2.如何同時控制 多個 LED 來顯示照度 階層?
3.如何 控制 大電流 電燈 ? 接一個 繼電器 ?
3-1:在固定亮度下,因感應到的光敏電阻值還是會一值浮動變化在一個範圍。所以需設定範圍值來起動開關。否則電燈會開開關關。
4.ARDUINO 電壓輸出 分層 0-255, 電壓輸入 分程 0-1023 (1024階),每階差 4.887mV ?或其他值?
5.可否作為高速計數器? 怎麼做?  ARDUINO 感應速度 對應 高速變化 會是多少 次/sec?






2015年1月2日 星期五

S4A-安裝步驟-Scratch For ARDUINO

1:Scratch 是什麼?
Scratch 是一種圖形化程式設計軟體。
Scratch 跟app inventor 機乎是一樣的長相。
Scratch寫程式過程,一般有人稱堆積木。
2:S4A 是什麼?
Scratch For ARDUINO (S FOR A=S4A)
是西班牙Citilab(社會與數字創新中心)對scratch 改造加強對ARDUINO 硬體支援。

1:安裝,先到這個網站  s4a.cat
2:點選第五個選項-download 
或者拉到下面下載安裝。根據你所使用的作業系統,按下下載。


2015/1/2 竟然Mac下載不了?