發表文章

目前顯示的是有「Arduino」標籤的文章

【輕鬆工作家】使用 3D 印表機 製作一台 Arduino CNC GRBL 繪圖機

圖片
          很多人都跟我一樣,在一下闖入"自造者"這個領域,很快就被 3D 印表機機所吸引,我最早組過一台 PRUSA i3,有興趣的朋友可以上  PRUSA i3 原廠網站 ,現在我用的3D 印表機是一台現成的 CR-6 SE 3D Printer ,這一台是中國製造但在國外很多Youtubery在使用,我自己使用上也還可以。     最近我想自做一台雷射雕刻機,很意外的在網上看到這個 Super Easy 3D Printed Arduino CNC Drawing Machine | GRBL Plotter Elegoo ,作者   Lewis 很大方分享了所有的設計,但是當你想要動手做的時候,發現需要學習的步驟還是不少。     由於整台設計的機構是由 Lewis 設計,所以有些元件是要配合他設計的尺寸,但這些元件作者並沒有標示詳細的尺寸,有些 型號必須從Youtube 影片中才能看出來,再加上作者給的購買參考網址都是Amazon,對於身處台灣的自造者並不一定適合,所以我決先做一下整理。     不過,在網路上找到由3D 印表機列印組建完成的專案,我都會建議先把組件列印出來,不要先購買零件,因為有時自己印出來的會跟原創作者有一段差距,造成這樣的結果,除了印表機不一樣,有時也會因轉檔的軟體不一樣造成一些偏差。     每一個"自造者"剛入門時可能都跟我一樣,很急著上手,很想立刻完成一樣作品,往往卻忽視了最基本的理論,這一次除了製造一台 GRBL Plotter 外,也順便再複習一下所有知識。     G-code 所有製作CNC的人都應該了解: 很淺顯易懂的教材: 3d Printers G-Code Explored and Explained with Examples Reprap G-code 可以線上預覽G-Code 的軟體- ncviewer G-code代碼新手教程!一招提高你的3D列印技巧 很久沒有複習的切片技巧: 3D Printing Basics: The Slicer! (Ep6) 常用的 Slicer 軟體: slic3r simplify...

Arduino IDE 1.6.5 + BH1750 + CD74HC4067 多工器

圖片
Arduino Uno 上的 I2C 通道非常方便去串聯很多感應器,但有時會碰到一次會要接許多相同的感應器如 BH1750 ,受人之託是要作一個 如同該網友所作的  Multiple BH1750 on i2c bus Digital Light Sensor + Arduino (16xBH1750) ,剛好我也有2組 CD74HC4067,CD74HC4067在露天上可以買到,我買的是這一塊: CD74HC4067 因為 I2C 有 SCL及 SDA 所以需要2片  CD74HC4067, BH1750 上還有另一條  ADDR 就選擇用 LOW,也就是不接。 BH1750 先看一張亂接圖: Arduino CD 74HC4067 手工接的,真怕短路。但是可以執行喔。 最重要的是 CD74HC4067 上 S0 S1 S2 S3 這是用來選擇要讀取的BH1750,SCL及 SDA 分別接到不同板子上的 Cx 上。 完程圖 #include <Wire.h> #include <BH1750FVI.h> BH1750FVI LightSensor; //Mux control pins int s0 = 8; int s1 = 9; int s2 = 10; int s3 = 11; void setup() {     pinMode(s0, OUTPUT);   pinMode(s1, OUTPUT);   pinMode(s2, OUTPUT);   pinMode(s3, OUTPUT);   digitalWrite(s0, LOW);   digitalWrite(s1, LOW);   digitalWrite(s2, LOW);   digitalWrite(s3, LOW);   Serial.begin(57600);   LightSensor.begin();   LightSensor.SetAddress(Device_Address_L); ...

ESP8266 + Arduino IDE 1.6.5 + BH1750 光度感應器 快速測試

圖片
為了能快速測試 BH1750 加在 ESP8266 上 ,盡量使用 Arduino 原始程式上的腳位,我下載的BH1750 程式庫的腳位如下: /*   This is a simple code to test BH1750FVI Light senosr   communicate using I2C Protocol   this library enable 2 slave device address   Main address  0x23   secondary address 0x5C   connect this sensor as following :   VCC >>> 3.3V   SDA >>> A4   SCL >>> A5   addr >> A3   Gnd >>>Gnd   Written By : Mohannad Rawashdeh  */ 程式是由 Mohannad Rawashdeh 撰寫 。 NodeMCU+BH1750 測試的輸出如下: NodeMcu+BH1750 同樣的程式也可用 BH1750 與 Arduino UNO 來測 ,聯接圖如下: Arduino UNO + BH1750

ESP8266 + Arduino IDE 1.6.5 + DHT22 + SHT20 溫濕度感應器

圖片
寫到這主要是作記錄了, 因為合併程式很快就測成功了, 整個程式如下: #include <Wire.h> #include <DHT.h> #include "SparkFunHTU21D.h" #include <ESP8266WiFi.h> #define DHTPIN 4 #define DHTTYPE DHT22 // Wifi definition const char* ssid     = "Buffalo9F-2"; const char* password = "0227057373"; const char* server = "184.106.153.149"; String apiKey = "P1UO6DM0KA8X79SQ"; WiFiClient client; //Create an instance of the object HTU21D myHumidity; DHT dht(DHTPIN, DHTTYPE); void reConnectAP() {   int i = 0;   WiFi.begin(ssid, password);   while ((WiFi.status() != WL_CONNECTED) && (i < 100)) {     delay(500);     Serial.print(".");     i = i++;   }   if (WiFi.status() == WL_CONNECTED) {     Serial.println("");     Serial.println("WiFi connected");     Serial.println("IP address: ");     Serial.println(WiFi.localIP());     myHumidity.begin();   ...

ESP8266 + Arduino IDE 1.6.5 + DHT22 溫濕度感應器

圖片
原本 DHT22 和 ESP8266 已用 Nodemcu 的 LUA 很輕易的連上過,但是這次要使用的開環境是 Arduino IDE 1.6.5,原本想應該花個10幾分鐘就好了,結果 - 殘念 ,網路上下載 DHT-sensor-library,想說 測試一下就 OK了,但是一直出現 Error -  In function __ieee754_asin , Error的內容有一長串,最後發現網路上的網友有很多也有相同問題,詳系請看討論區 -  解決方法的討論區 。 解決的方法是  https://github.com/esp8266/Arduino/issues/612#issuecomment-129148582  這個內容是 下載新的 libm.a 取代原有 C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\lib 下的 libm.a。 置換過 libm.a 後 ,一切就正常了。 我用的 DHT22 如下圖 : DHT22 執行測試的結果如下: DHT22 測試 再來就是要把 DHT22 及 SHT20 併在同一顆 ESP8266 上。

ESP8266 + Arduino IDE 1.6.5 + SHT20 溫濕度感應器 - 連上 ThingSpeak

圖片
ESP8266 要連上ThingSpeak 網路上的文章應該很多了,當然首先是要註冊一個 ThingSpeak 帳號,申請帳號請前往  https://thingspeak.com / 。 接著要 New Channel: ThingSpeak New Channel 設定 Name 及 Field1 及 Field2,在我的測試中 Field1 是 "Tempature" 及 Field2 是 "Humidity",接著在 Arduino IDE include library "ESP8266WiFi",首先當然是要先連上區域網路上的 AP。 WiFi.begin(ssid, password) ; 其中 SSID 及 Password 是區域網路AP 的 ID 及 Password, 並記錄下 Thingspeak 所產生的 API key,程式碼大概如下: Serial.print("Sending data to thingspeak.com"); if (client.connect(server, 80)) { // "184.106.153.149" or api.thingspeak.com String postStr = apiKey; postStr += "&field1="; postStr += String(temp); postStr += "&field2="; postStr += String(humd); postStr += "\r\n\r\n"; client.print("POST /update HTTP/1.1\n"); client.print("Host: api.thingspeak.com\n"); client.print("Connection: close\n"); client.print("X-THINGSPEAKAPIKEY: ...

ESP8266 + Arduino IDE 1.6.5 + SHT20 溫濕度感應器 - 讀到正確資料

圖片
原本認為是一個輕鬆的連線測試,結果測了3個晚上。 朋友的需求是在ESP8266 開發板上使用SHT20 溫濕度感應器連線到 Thingspeak,應該是很簡單,一開始是用 Nodemcu LUA 來開發,因為 Nodemcu LUA 上有現成 I2C 的程式庫,但是使用 I2C 的程式庫可以用 掃瞄的方式,掃瞄到 SHT20 的代碼 0x40 但是在讀取溫濕度時都只能讀到錯誤的數字,從網路 ESP8266 Community Forum  的討論區發現,很多人都有同樣的問題,使用 Nodemcu LUA 的 i2c 似乎是無法讀取 SHT20 的資料,須改用 Arduino 的 開發環境來作。 幫原有 Arduio 1.6.5 IDE 加上 ESP8266 的環境可從 Github  esp8266 / Arduino  上取得,也在網路上找到 SHT2x 的 程式庫,但是一樣無法讀取,應該是與 ESP8266並不完全相容,最後從討論區發現可用的是  SPARKFN HTU21D Humidity Sensor Hookup Guide ,這個 程式庫不是我寫的,所以請自行前往下載。 根據討論區的文章,直接使用程式庫還是不行,請看這一篇討論區說明  http://www.esp8266.com/viewtopic.php?f=32&t=4078&start=15#p24173 ,要把 原來 SparkFunHTU21D.cpp  程式庫中  delay(55) 改程 delay(85) 及 wire.begin 改成 wire.begin(0,2),總算成功抓到溫度及相對濕度。 ESP8266 接 SHT20 我的防水sensor 是從 淘寶網上購買的: SHT20 溫濕度傳感器 執行結果:

Arduino uno 及 Arduino Mega 2560 機殼 - Part 1 底板

圖片
每次用Arduino 在測 Prototype 的時候,就會發現桌面是一片混亂: 今天決定先幫 Arduino 找一個家,但是發現 raspberry pi 有很多現成的盒子在網路上銷售,但是 Arduino 確很少,尤其是在台灣不容易找,想說乾脆自己做一個好了 首先先找 底板的 spec : 網路上 Arduino uno 及 Mega 2560 的 PDF 。 我用 Illustrator 把檔案修改到只剩下外型及孔位: 修改後的 AI檔: Arduino Uno & Mega2560 。 在此要感謝  FABLAB TAIPEI   的朋友教會我使用雷射切割,我是用 5mm 的密集板去切的。 Arduino Mega 2560 Arduino Uno Arduino Mega 2560 加底板 Arduino Bluno 加 底板 Arduino Bluno 加 底板 側照 有了底板就可以設計盒子了。

水族箱控制器 : Arduino 四部曲

圖片
控制器除了有顯示的功能,要是能加上與電腦的通訊那就更完美了,為了能達成此項功能,在原來的 Arduino 再加上一塊 I/O expansion 5.0:  I/O expansion 5.0 並利用  I/O expansion 5.0 上的 Xbee 介面接上  HLK-WIFI-M03,這塊板子曾在 Arduino 無線WIFI 傳輸 轉 RS232-Part3 中用過,如果 WIFI 可以連上控制器,就可以用 PC 來做更多的控制或記錄,今天一切很順利,程式加上 Serial.print, 就在 PC 端也可看到 溫度和日期了。 下一步應該來控制打氣機。 正打算接打氣機時,有一位水族達人建議,最好也能同時顯示室溫及濕度,剛好我手邊還有一片 SHT1x,這一片可同時傳回溫度及濕度: 原圖:http://www.dfrobot.com/wiki/images/8/84/SHT1x_Humidity_and_Temperature_Sensor.jpg 先用板子的 example 來測: 再來和原本的程式組合: #include <Wire.h> #include <OneWire.h> #include <Rtc_Pcf8563.h> /* add the lcd support */ #include "LCD12864RSPI.h" //init the real time clock #include <SHT1x.h> #define dataPin  11 #define clockPin 12 SHT1x sht1x(dataPin, clockPin); Rtc_Pcf8563 rtc; OneWire  ds(10); /* initialize the library objects */ void setup() {   Serial.begin(9600);   LCDA.Initialise(); // INIT SCREEN   delay(1000);   LCDA.CLEAR(); //   rtc.init...

水族箱控制器 : Arduino 三部曲

圖片
因為發現要顯示的資料越來越多,原本用來顯示的LCD 1602已不夠使用,於是上網又找到了這一片  SPI LCD12864 Module : 原圖:http://www.dfrobot.com/wiki/images/4/43/DFR0091_CD.jpg 原圖:http://www.dfrobot.com.cn/image/cache/data/DFR0091/DFR0091-500x500.jpg 但是這一片是使用 SPI 介面,為了方便使用這一塊,所以我又加購了 一片 interface shield: 原圖:http://www.dfrobot.com.cn/image/cache/data/DFR0074/2-340x340.jpg 在這一片 Interface Shield 上,IIC 及 SPI 接口都直接拉出來,而且還作上了 SD 儲存卡的接口,這塊板子佔用了一些 Arduino 上的埠: IIC:Analog 4,5 Shiftout:Digital 3,8,9 TLC:Digital 3,9,10,11,13 SD:Digital 10,11,12,13 先用原廠的測試程式LCD12864RSPI 測一下顯示器如何,Compile時就發生了 Error : D:\arduino-1.0.1\libraries\LCD12864RSPI\LCD12864RSPI.cpp:75: error: 'digitalWrite' was not declared in this scope 我想這應該是我已經用 Arduino 1.0.1,廠家給的測試程式是舊的,打開原廠的 LCD12864RSPI_h ,原始的宣告前幾行: //Demo LCD12864 spi //www.dfrobot.com #ifndef LCD12864RSPI_h #define LCD12864RSPI_h #include <avr/pgmspace.h> #include <inttypes.h> 在#clude 的最後一行加上:  #include <Arduino.h> ...

Arduino 無線WIFI 傳輸 轉 RS232-Part3

圖片
今天在準備幫水族設計的 Arduino 控制器時發現,一直沒有把Arduino 的無線轉RS-232紀錄下來,趁今天又要重作一次時,趕快紀錄一下,先回復一下記憶,用的是這塊HLK-WIFI-M03: HLK-WIFI-M03 真是好事多磨,這塊板子是 3.3V 而且電流需求 300ma,Arduino 的 3.3V 電流只能到 50ma 左右,更重要的是 Arduino 的 Serial 也是用 5V 為基礎,此時應該需要作 level convert,但是手邊臨時沒有 level convert 可用的 IC,但是 3.3V 的規格跟 Xbee 一樣,手邊有一塊 Arduino I/O expansion shield 5.0 的板子,這塊板子上有 Xbee的介面: 原圖 :http://wiki.dfrobot.com.cn/images/9/98/DFRduino_IO_Expansion_V5_1.jpg 接著調整 I/O Expansion 上的 jumper 改傳輸為 Xbee,調整 jumper 如下: 調整 jumper 接著就是查出 Xbee的腳位: 原圖 : http://www.pyroelectro.com/tutorials/xbee_wireless_interface/img/xbee_pinout.jpg 理論上我應該只要將  HLK-WIFI-M03 的 3.3V 及 Gnd 接上   I/O Expansion  中 Xbee 的 3.3V 及 Gnd, 後再將  HLK-WIFI-M03 的 Tx 接 Xbee 的 Rx 及 HLK-WIFI-M03 的 Rx 接 Xbee 的 Tx,希望就可以正常工作了,先寫一段小程式: print hello 再用 Tcpudpdbg 來測試 ,運氣不錯看到 hello 了: Tcpudpdbg 中看到   HLK-WIFI-M03   中傳回的 hello Arduino 的無線傳輸又向前邁進一步。

水族箱控制器 : Arduino 二部曲

圖片
有了溫度顯示,接下來想替控制器加上一個時間的控制,因為水族箱的燈光會需要用時間來控制,網路上有很多給 Arduino 使用的時間模組,因為LCD顯示器已經使用了 I2C的連法,所以我想找一塊時間模組也是用 I2C來連接,這時候的想法只是希望能多留一些 I/O 埠給其他用途,在網路上找到了這一塊: 原廠產品圖  http://www.waveshare.net/Shop/PCF8563-RTC-Board.htm 這一塊除了提供時間也提供日期,上面而且有 3.3V的電池可以供電,但是需注意此塊模組上I2C的接頭排列位置和 Arduino Sensor Shield 4.0 上的排列方式是不一樣的,不能直接拿排線對接: I2C 接頭腳位是不一樣的 接著當然是希望這一塊模組有現成的軟體可以用,很慶幸的是這一塊板子已有現成的 RTC-PCF8563 Library ,下載程式庫後先用簡單的程式測一下是否可以驅動時間模塊,以下是 http://arduino.cc/playground/Main/RTC-PCF8563 上的 Sample 程式: #include <Wire.h> #include <Rtc_Pcf8563.h> //init the real time clock Rtc_Pcf8563 rtc; void setup() { // Serial begin 9600 Serial.begin(9600); //clear out the registers rtc.initClock(); //set a time to start with. //day, weekday, month, century(1=1900, 0=2000), year(0-99) rtc.setDate(14, 6, 3, 1, 10); //hr, min, sec rtc.setTime(1, 15, 0); } void loop() { //both format functions call the internal getTime() so that the //formatted strings are at the current time...

水族箱控制器 : Arduino 首部曲

圖片
每次都在幫別人設計東西,今天決定為自己的魚缸設計個東西,國外的網站有很多人在作,好像還有賣整套的,趁有空,趕快找一下自己的零件,先找出自己之前 LCD 1602 的顯示模組,我好像也有現成的顯示程式,參考一下: Arduino 模擬 Modbus Slave LCD 1602 (I2C 介面) 這次用 Arduino Duemilanove  ATmega168 ,用這塊板子沒什麼特別理由,因為最先找到就是這一塊,再加上一塊 Arduino sensor shield 4.0: 然後又碰到工程師最怕的一件事,改版本從原來的 Arduio 0022 升級到 Arduino 1.0.1: Arduino 1.0.1 結果原有舊的Libraries Compile 都會有 Error, 只好上 LCD1602字符液晶显示器 再下載新版的 Library,終於可以 Compile 完成,我先用 DFROBOT 原廠附的HelloWorld 來測試顯示模組,結果都不會顯示字元,原以為是 LCD 1602壞了,結果是自己糊塗了,忘了調整  Arduino sensor shield 4.0 上的 jumper: 調整 jumper 後 就可以看到 : Hello World 接著就是要連接 DS18B20 1-wirw 設備,讀取溫度,這一段可以參考 Arduino 溫度感應 ,不過這一次我沒有用麵包板,而是直接把電阻差在接頭上: 4.7K歐姆的電阻接在接頭上 1-wire 的 Library  OneWire.zip  其中有一個 DS18x20_tempature 的 範例,Upload 程式並執行,從 Serial Port Monitor我們就會看到: 溫度的值收到且 Arduino 有發現DS18b20 ,再來應該就是把溫度送到 LCD 1602 上,這段程式主要是改 DS18B20 的 example 展現出來就是: 看來魚缸可以有自己的溫度顯示器了。