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

2023年4月8日 星期六

評估「小氣象台」製作的可行性

2023.04.08

閒著也是閒著,來跟 ChatGPT 聊聊:

2023.04.07

天氣一直不佳,無法測試Luke 的休閒筆記: Astroberry Server 與 iOptron Cem25P 的連接—-豁然開朗,閒著也是閒著,忽然興起Luke 的休閒筆記: 天文攝影— Raspberry Pi 文末所說希望能夠以 Arduino 做出如 Ekos/Indi Live Astronomy Image Session - YouTube 13:45 顯示的小氣象台:


HOWTO configure, compile, wire, print and assemble the induino MeteoStation 有詳盡的說明,但作者用的是 Adafruit Trinket Pro 5v ,雖然不貴,手上雖然沒有也不想再買,因為有片多餘的 ESP8266, 或許可以用,所以要先把文章仔細看完才能評估可行性。

結論

可行,但沒必要。

只能是個夢想,若是有棟透天厝,頂樓是自家的,或是有個大院子,蓋個圓頂,拍攝器材全部自動化(HOW TO BUILD YOUR OWN FULLY AUTOMATED LOW COST BACKYARD OBSERVATORY),就可以考慮。對於住在市區的社區大樓,頂樓是公共的,也有個中庭大院子,也是公共的,有空能拍攝時,由於器材得搬上搬下,天氣狀況都會先預判好才會搬器材,因此這個「小氣象台」也就沒有製作的必要。

做的功課

留下記錄,或許未來可以用到。

朋友說即時雲量比較重要,不然每次都靠眼睛。

覺得應該不會太難,似乎要買一顆 MLX90614 (IR) sensor (可能還需要 BMP 180 (pressure) sensor)或 DHT22 (humidity) sensor ),藉由測得的地表溫度與 MLX90614 測的天空溫度來估計天空雲量,但計算的公式內的變數不曉得是否會用到壓力或溼度,這才說可能還需要 BMP 180 (pressure) sensor)或 DHT22 (humidity) sensor。

與 ChatGPT 聊了後,沒有我想的那麼簡單,一個公式即可解決:

現在覺得 ChatGPT  真的很可怕,連這種問題都能回答。

要解決還得經過如下的步驟:

  • 備齊所有器材:
    • Adafruit Trinket Pro 5v 或 ESP8266 或 Arduino
    • MLX90614 (IR) sensor
    • BMP 180 (pressure)
    • photocell with 10k Ohm resistor
  • MeteoStation | Indiduino :測試及組裝
  • Downloads | Indiduino:下載及編譯 induino
  • Meteostation. Web Interface | Indiduino :使用 RPi 或一台跑 Linux 的電腦,安裝了 INDI Server 及 Http Server。〖註:文內還真附了一個公式:Tsky=Tsky_meassure – Tcorrection  ;Formula Tcorrection = (K1 / 100) * (Thr – K2 / 10) + (K3 / 100) * pow((exp (K4 / 1000* Thr)) , (K5 / 100)) ,只是這個公式也需要進一步修正

所以與朋友得到共同的結論:還是用眼睛看好了…… XD



2022年3月28日 星期一

4X4X4 CUBE LED 光立方套件

◄VE1► Arduino UNO R3光立方套件kit開發板學習4X4X4 CUBE4 3D LED光魔方 | 蝦皮購物 早早就買好了,等到 Luke 的休閒筆記: 環保智能小夜燈 做好,進度當然就來到這裡了。

商品說明改寫原商品大概採 Google 翻譯的內容

4x4x4光立方套件採用 Arduino 的擴展板方式,使用兩個74HC595移位寄存器晶片,只需八個 I / O 即可點亮 4x4x4=64個 LED,,遠小於其他4x4x4光立方套件(需要20個 I/O 控制)。
這個套件的電路主要是利用兩個 74hc595晶片控制 LED 的陽極,4個Arduino的 I / O 埠控制4 個共陰極的 LED。

組裝

完全按照這支影片:led cube kit build - YouTube 的教學一步步來做:

  • 圓短針的剝離:用來立起光立方的支柱。按照影片的方法略為修正後,快速且不傷短針,如下圖,以斜口鉗沿紅色虛線剪,就可以很容易剝離短針:

  • 將圓短針(20 根)焊上 PCB:


  • 焊上四顆 500 Ω 電阻及兩個 74hc595 的晶片座:


  • 由於趁蝦皮免運時訂購的 ◄QF6► 單面 PCB板 5*7CM 試驗板 洞洞板 | 蝦皮購物 還未到貨,因此先把64個 LED 的陰極彎曲 90 度:


  • 接下來預備把排針焊上(影片的做法是直接插在 Arduino 上,自己再加上兩條橡皮筋固定

  • 雖然 ◄QF6► 單面 PCB板 5*7CM 試驗板 洞洞板 | 蝦皮購物 已到貨,但太小了,無法做成這樣:

  • 只好再下訂一片 9CM*15CM 的:【邦禮】洞洞板 9*15 5*7 萬能板 實驗板 電路板 線路板 紙板 5CM*7CM 9CM*15CM | 蝦皮購物 ,等貨到後才能開始焊接 LED ,現在只能把接到 Arduino Uno 的排針先焊好:


  • 有機會與原在電子街的寶祥小威見面(實體店面被房東收回,現專心做網拍,露天賣場),把焊好的電路板給他看,經驗豐富的小威發現許多焊點都是空焊,因為是雙面板,部分焊點的焊錫沒有流到另一面也不行,看起來大概有 60% 以上的焊點要重焊,他並總結為何焊不好的原因: 烙鐵溫度不夠高!怪不得焊接時沒有像 YouTube 影片一樣,很輕鬆即可焊好,所以重焊時預備調到 400~450℃(買的恆溫烙鐵規格為 180~500℃)。
  • 有高手指導就是不一樣,經過幾次的試驗,最後把烙鐵調在 420℃,使用這款0.6mm 焊錫(高品質 電解錫線 錫線 錫絲 電解焊錫絲焊錫絲 焊錫線 0.8mm 0.6 0.5mm 電烙鐵 焊錫 錫絲 錫線 錫筆 | 蝦皮購物)順利把全部焊點全部重新焊過,但這個方式不適用這款 1.0mm 較便宜的焊錫(#R31► 高純度低熔點焊錫絲 線徑 0.51mm/0.6mm/0.8mm/1mm | 蝦皮購物),大概就是一分錢一分貨吧!也或許是烙鐵溫度還要更高。底下是重新焊過的電路板:


  • 再度請教過小威,較粗的焊焬需要更高的溫度,等大塊的電路板到貨後,要做這個時把烙鐵調到最高(500℃)來試試。
  • 嚐試以較粗的焊焬,實在不行:


  • 還是照樣放上 LED 焊接:

  • 64個 Led 燈分成四層,老花眼下完成後有七、八個不亮,還能接受。隨便配個音樂(本來可以修改程式來配合配樂的節奏,但做得不夠好,就懶了

2022年3月3日 星期四

環保智能小夜燈

前言

零基础入门学用Arduino教程-智能应用篇 - YouTube 系列裡「環保智能小夜燈」的製作沒什麼挑戰性,所以這次的學習改變一下,主要目的放在焊接的練習及如何把電路圖轉換到洞洞板的實際電路,因此範例程式沒甚麼修改,直接套用而已。

材料

過程

  • 初步先以 Arduino UNO + 麵包板連接線路,並測試先前已購的光敏電阻、RGB LED及HC-SR501 有無問題。
  • 將 Arduino UNO 換成 Arduino nano ,以同樣的電路測試:
  • 馬上就碰到 Arduino nano 無法與 Arduino IDE 連接的問題,Google 後找到 NANO V3.0 Atmega328p 副廠/相容 Arduino CH340改進版 附傳輸線 – 台灣物聯科技 TaiwanIOT Studio 裡面有說明把工具選單裡的處理器設定為ATmega328P(Old Bootloader)即可:

  • 註:找到這篇文章:Arduino Nano 的 Bootloader | Mister Ngan,原本也想把 Arduino nano 燒成新版的 Bootloader,因為用了也沒問題就先不做,這篇文章留個記錄,或許未來再試試。
  • 測試無誤後,準備開始製作。由於太久沒用過烙鐵了,需要練習,於是把一條跳線剪成許多小段,並使用一塊 2X8 cm 的 PCB 來練習:





  • 整個電路的元件不多,決定用一片 3X7 cm的雙面PCB 來製作,安排好各個元件的位置,然後開始實際的焊接:


    註:由於事前看過這支影片:led cube kit build - YouTube,所以知道使用黏土來固定元件,焊接起來方便許多:)

    • 為了方便三顆 220Ω 電阻與 LED 燈的三支 RGB 接腳連接,焊了排針,讓它們以杜邦線相連。
    • 另一邊使用跳線與 Arduino nano 的 Pin 6 (接 R) Pin 5(接 G) Pin 3(接 B)相連。
    • 10 K Ω 電阻放在 Arduino nano 的 A0 Pin 旁邊,這樣直接焊在一起比較簡單。
    • HC-SR501 的 DATA Pin 以杜邦線接 Arduino nano 的 Pin 8(用了一條跳線連到一支排針
    • 至於 Arduino nano 只焊了會用到的接腳: Pin 6 、Pin 5、Pin 3、Pin 8、Pin A0、5V及GND 共七個焊點:

    • 由於是焊接新手,所以每焊好一個元件會先用電錶測試是否沒問題。
  • 全部焊好並測試無誤:

  • 以電鑽打洞,以雕刻刀割出 Arduino nano mini USB 露出的接孔,使用熱熔膠固定光敏電阻、RGB LED、HC-SR501及 Arduino nano。

  • 雖然加了閃光燈擴散罩,RGB LED 的光線仍有點刺眼,因此在燈上面再罩上一層泡棉(購買Arduino nano 時附在針腳上的泡棉),這樣光線就柔和多了:


2022年3月1日 星期二

零基础入门学用Arduino教程-智能应用篇 - 重點整理

零基础入门学用Arduino教程-智能应用篇 - YouTube

2022.02.22
  • 修改一點程式碼,讓時間的顯示更整齊:
      ......
      ......
      前略
      
      //底下讓時:分:秒的格式更整齊
      if (timeClient.getHours() < 10 ){ //當小時的數值為個位數時,前面補 0
        lcd.print("0"); lcd.print(timeClient.getHours()); 
      } else {
      lcd.print(timeClient.getHours());
      }
      
      lcd.print(":");
      
      if (timeClient.getMinutes() < 10 ){//當分的數值為個位數時,前面補 0
        lcd.print("0"); lcd.print(timeClient.getMinutes()); 
      } else {
      lcd.print(timeClient.getMinutes());
      }
      //lcd.print(timeClient.getMinutes());
      
      lcd.print(":");
    
      if (timeClient.getSeconds() < 10 ){//當秒的數值為個位數時,前面補 0
        lcd.print("0"); lcd.print(timeClient.getSeconds()); 
      } else {
      lcd.print(timeClient.getSeconds());
      }
      //lcd.print(timeClient.getSeconds());
      
      lcd.print("   ");//因為更整齊了,只需要加上三個空白。
    
      lcd.setCursor(0,1);//溫度及溼度顯示在第二列
      lcd.print("T:");lcd.print((int)temperature);lcd.print("*C  ");lcd.print("H:");lcd.print((int)humidity);lcd.print("%   ");
      
      delay(950);//原先為delay(1000),顯示秒數時會有跳過的情形,經過幾次的調整,950 算是比較正常
2022.02.22
  • 完工,中間挖孔的部分實在很醜,手不巧,這也是沒辦法的事:

  • 溫溼度感測器 DHT-11 只能外掛(註:先前用的那顆有問題,下雨天測出的溼度竟然只有四十幾%
  • 內部零件使用熱熔膠固定
  • 由於ESP8266是 Micro USB 接頭,家裡有不少早期 SONY 手機的充電器及Micro USB線,剛好拿來物盡其用。
  • 成本估計:總計約 NT$225
    • ESP8266 約 NT$100
    • DHT-11 約 NT$30
    • LCD1602 I2C Module 約 NT$90
    • 七根杜邦線暫且算 5 元
2022.02.21
  • 說到做到,ESP8266+DHT-11+LCD1602 I2C Module,用了七條 F-F 杜邦線,吃完晚餐花了一個多小時搞定:

  • 程式更完善些,加入了啟動時顯示 WI-FI 連接中:

  • 程式碼:
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
    #include <NTPClient.h>
    #include <ESP8266WiFi.h>
    #include <WiFiUdp.h>
    
    #include <SimpleDHT.h>
    int pinDHT11 = D3;
    SimpleDHT11 dht11;
    
    const char *ssid     = "XXX";//此處改為家裡基地台的 SSID
    const char *password = "XXXXXXXXX";//輸入登入基地台的密碼
    
    const long utcOffsetInSeconds = 28800;//台灣在 UTC+08:00 時區,所以 8*60*60 = 28800
    
    char daysOfTheWeek[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
    
    // Define NTP Client to get time
    WiFiUDP ntpUDP;
    NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds);
    
    void setup()
    {
    lcd.init(); // 初始化 lcd
    lcd.backlight();
    
    WiFi.begin(ssid, password);
    
    lcd.setCursor(0,0);
    lcd.print("Wi-Fi Connecting");
    lcd.setCursor(0,1);
    while ( WiFi.status() != WL_CONNECTED ) {
      delay ( 500 );
      //lcd.setCursor(0,1); 如果擺在 While 迴圈裡,"."會一直顯示在同一位置
      lcd.print ( "." );
    }
    
    timeClient.begin();
    
    }
    void loop()
    {
      byte temperature = 0;
      byte humidity = 0;
      byte data[40] = {0};
      if (dht11.read(pinDHT11, &temperature, &humidity, data)) {
        lcd.print("Read DHT11 failed");
        return;
      }
      
      timeClient.update();
      
      lcd.setCursor(0,0);
      
      lcd.print(daysOfTheWeek[timeClient.getDay()]);
      lcd.print(", ");
      lcd.print(timeClient.getHours());
      lcd.print(":");
      lcd.print(timeClient.getMinutes());
      lcd.print(":");
      lcd.print(timeClient.getSeconds());
      lcd.print("    ");//這四個空白若不加,會顯示前面的"Wi-Fi Connecting"後面"ting"四個字母
    
      lcd.setCursor(0,1);//溫度及溼度顯示在第二列
      lcd.print("T:");lcd.print((int)temperature);lcd.print("*C  ");lcd.print("H:");lcd.print((int)humidity);lcd.print("%   ");
      
      delay(1000);
      
    }
    
  • 這篇文章:Arduino初體驗 - NodeMCU ESP8266 接LCD 說明了接腳如何連接;拷貝了這篇文章:Getting Date & Time From NTP Server With ESP8266 NodeMCU 的程式碼來顯示時間(把 Serial.print() 改成 lcd.print() 就可以了)。
  • 準備裝入 Apple Pencil 的空盒裡......
2022.02.21
  • 天氣冷又溼,繼續驗貨:LCD1602 I2C Module,Kit 附的範例只顯示 Hello World 太無趣,再加上 DHT-11 來顯示溫度與溼度:

  • 程式很簡單,只是再加上 DHT-11 的範例程式碼而已:
    #include <Wire.h>
    
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
    
    #include <SimpleDHT.h>
    int pinDHT11 = 2;
    SimpleDHT11 dht11;
    
    void setup()
    {
      
    lcd.init(); // initialize the lcd
    lcd.backlight();
    
    }
    void loop()
    {
      byte temperature = 0;
      byte humidity = 0;
      byte data[40] = {0};
      if (dht11.read(pinDHT11, &temperature, &humidity, data)) {
        lcd.print("Read DHT11 failed");
        return;
      }
      
      lcd.setCursor(0,0);//地點顯示在第一列
      lcd.print("Taichung : ");//地點
      lcd.setCursor(0,1);//溫度及溼度顯示在第二列
      lcd.print("T:");lcd.print((int)temperature);lcd.print("*C  ");lcd.print("H:");lcd.print((int)humidity);lcd.print("%");
      delay(1000);// DHT11 sampling rate is 1HZ.
    }
    
  • 這只 LCD 應該只能輸入 ASCII 字元而已,因為要顯示度C的 ˚ 會變成亂碼。
  • 截錄維基百科的說明:「I²C(Inter-Integrated Circuit)字面上的意思是積體電路之間,它其實是I²C Bus簡稱,所以中文應該叫積體匯流排電路,它是一種串列通訊匯流排,使用多主從架構,由飛利浦公司在1980年代為了讓主機板嵌入式系統手機用以連接低速週邊裝置而發展。I²C的正確讀法為「I平方C」("I-squared-C")。」I²C的一個優勢在於其接腳數少。通過兩個接腳以及相應的軟體,微控制器就可以控制某一個網路內的裝置,而使用其他技術則需要更多的接腳。
  • 可以來試試配合 ESP 8266 ,利用 NTP 校時,把現在時刻顯示在第一列,溫度、 溼度顯示在第二列。由於前面已做過利用 ESP 8266 Wi-Fi 達成 NTP 校時的時鐘程式,要再來改應該不難---值得試一試。
2022.02.20
  • 天氣冷又溼,教學影片看累了,就繼續購買的Super Starter Kit for Arduino Uno 套裝各項配件驗貨。這次檢查 Active buzzer,附的範例實在太無趣,找到之前下載的 ElegooTutorial,內有 MorseCode Translater 範例,比較有趣:

  • 但都需要從 Serial Monitor 輸入字串,所以想到 Keypad Membrane Switch Module 也順便一起驗貨,確認也沒問題,下次再來修改程式以它輸入,然後產生 MorseCode 。

2022.02.20
  • 先從頭到尾將整個系列影片看過一遍,把需要再購買的配件整理後,等蝦皮免運日時,找個賣場一次買足。

2022年2月24日 星期四

回到原點的焊接:新的工作台

前言

會想學習 Arduino 的初心就是不想動到烙鐵,但學下去,不用還是不行(會有限制),只好認了,訂了這些:


初期目標

  1. 改裝早期的羅技喇叭(當初是用來接 iPhone 3GS)成藍芽喇叭(使用藍牙音頻接收器板 VHM-314 藍牙 5.0 MP3 無損解碼板無線立體聲音樂模塊 3.7-5V | 蝦皮購物 

  2. 零基础入门学用Arduino-智能应用篇-5环保智能小夜灯项目介绍 - YouTube 改成 Arduino Nano ,並使用洞洞板安裝在 Magic Mouse 2 的包裝盒裡:

  3. ◄VE1► Arduino UNO R3光立方套件kit開發板學習4X4X4 CUBE4 3D LED光魔方 | 蝦皮購物 :

  4. 若上述都能順利完成,當然也就有了基本的焊接及電路技術,最後再來試試是否能修復壞掉的防潮櫃:

羅技喇叭改裝

  • 早期的產品實在太堅固,導致一開始就出師不利:外殻拆不下來!這使得原本的想法不想再多條 3.5 的音源線及讓藍芽模塊與喇叭共用一個 USB 接頭的想法無法達成。

  • 最後在爆力拆外殻下,殻沒拆掉,裡面電路板的零件竟然掉了幾個,不得不放棄且喇叭只能回收了。

Sony 有線桌上型喇叭SRS-A3 改裝藍芽

  • 家裡有不少 DC 轉接頭,就是沒有 SRS-A3 變壓器這種接頭:

  • 天氣又冷又下雨,不想去電子街找,在家裡附近的大台中五金、燦坤、全國電子、大同 3 C,甚至跑到手機行看看有沒有,轉了一大圈還是沒有,只得忍痛從變壓器截下來與 USB 接頭焊在一起,算是焊接組合買後的正式啟用,兩顆醜醜的焊點:

  • 藍芽模塊本身有 Micro USB 供電,SRS-A3 也改成 USB 供電,一起接在 ASUS 行動電源的兩個USB 輸出插座,結果干擾嚴重,就算加了錫箔遮避也沒用:

  • 實在怪了,拆解前,以 SRS-A3 的變壓器供電,藍芽模塊由行動電源供電,音質很好,根本沒問題,於是試著以兩個行動電源來分別供電,這樣就沒有問題了。上網 Google ,這應該是接地迴路的問題沒有能力處理,也不想買不便宜的USB訊號隔離器(價格可以買高級的行動電源)。
  • 就這樣使用了,至少擺脫了「有線」
2022.02.24
  • 想到變壓器難道就這樣浪費了,翻箱倒櫃找出了早期一條轉 mini USB 的轉接線,一頭是 USB 母座,剛好截下來與變壓器連,在使用市電的情形下也能用:

  • 先去查一下 USB 接腳:

  • 用三用電錶確認接腳位置(雖然從顏色可區分),順便確認有無斷路:

  • 變壓器線頭的正負無法判斷,只能插電後用電錶測,如圖:(若出現負號表示正負極接反了

  • 又有機會練習焊接,還是兩顆醜醜的焊點:

  • 兩條線接好,變壓器插電,供電正常:

  • 兩顆焊點後的心得
  • 使用焊接台,有夾子可固定,又有放大鏡,老花眼下雖然只焊了兩顆而已,一手拿焊錫,一手拿烙鐵,與以往比起來實在太輕鬆了,後續的實作應該能夠順利的。
  • 買的是數位顯示的定溫烙鐵,預設是 350℃,參考了一些文章後改成 320℃。這支烙鐵蠻有效率,不到十秒就能達到設定的溫度,不像傳統鉻鐵,過熱或不夠熱都不知道,很實用。
  • 上網找些焊接操作的文章,這篇還不錯:電子製作實驗室歡迎您! 點陣板(萬能板/洞洞板)的使用焊接技巧,重點截個圖留下記錄隨時參考: