顯示具有 81arduino 標籤的文章。 顯示所有文章
顯示具有 81arduino 標籤的文章。 顯示所有文章

2024年1月28日 星期日

PHYduino在探究教學上的使用

在國中自然科的教學過程中,實驗操作和數據分析對於學生理解科學概念至關重要。我們設計的PHYduino儀器正是為了滿足這些教學需求。它集成了多種功能,能夠靈活應用於不同的教學場景中。以下,我將介紹這款儀器在不同課程中的實際應用。



光學實驗:

1.透過調節RGB LED的亮度,學生可以實際體驗色光混合,了解如何通過混合紅色、綠色、藍色光來產生白光。
2.利用RGB LED快速閃爍,製造出視覺暫留現象,進一步探究色彩分離。
3.使用光敏電阻和不同顏色的光源,觀察不同顏色光的反射特性,並通過數值變化深入理解。

(不同顏色的數值有所不同,白>紅>藍>黑)


2024年1月27日 星期六

Aduino nano+旋轉編碼器控制0.96O_I2C_LED顯示螢幕

繼上一篇文章ARDUINO nano + 旋轉編碼器控制介紹如何利用Arduino Nano和旋轉編碼器進行基本控制後,這次我們將進一步探討如何運用這些工具來控制OLED顯示螢幕的選單。這種設置非常適合需要用戶介面的各種項目,例如家用電器、實驗室設備或者任何需要選單控制的裝置。


材料清單

  • Arduino Nano/Uno
  • 旋轉編碼器
  • 0.96吋 I2C OLED 顯示螢幕
  • 麵包板和連接線
  • 共陰RGBLED

2024年1月21日 星期日

ARDUINO nano + 旋轉編碼器控制

材料清單

  • Arduino Nano/Uno
  • 旋轉編碼器
  • 麵包板和連接線

2023年5月27日 星期六

arduino BMP180壓力溫度感測器+0.96OLED液晶螢幕顯示(密封失敗,建議換密封材料)

 很久沒有寫arduino程式了,這次完成的專案能夠解決許多壓力檢測的問題,學習到原來I2C多個裝置要如何設定比較恰當,這個頁面說明你可以了解
1.BMP180 壓力溫度感測器
一開始的  //BMP180 設定
void setup()內的  //BMP180setup
void loop()內的  //BMP180display

2.0.96OLDE顯示方法
一開始的  //0.96 OLED 設定
void setup()內的  //OLEDsetup
void loop()內的  //OLEDdisplay

3.I2C多個裝置該如何設定

成品,能顯示溫度(C)、壓力(hPa、cmHg、atm)


2022年4月7日 星期四

arduino紅外線溫度計MLX90614+溫濕度計DHT11+OLED實作

/*

 * PHYduino紅外線溫度計+溫濕度計

* need 需要元件 DHT11溫濕度計、MLX90614紅外線溫度計、OLED0.96吋

 * design by orangeV,taiwan,tainan 台南大成國中 蔡智恆

 * need libraries 需要程式庫<DHT.h>,<SPI.h>,<Wire.h>,<Adafruit_GFX.h>,<Adafruit_SSD1306.h>,<Adafruit_MLX90614.h>

*/


int

//對應腳位

ds18b20 = 7, 

DHTPin = 15,      //A1溫濕度DHT

DHT2Pin = 16;     //A2溫濕度DHT2


//MLX90614腳位 SCL->A5、SDA->A4

//DHT11/22

#include <DHT.h>

DHT dht(DHTPin, DHT11);

DHT dht2(DHT2Pin, DHT11);


#include <OneWire.h>

#include <DallasTemperature.h>

OneWire oneWire(ds18b20);

DallasTemperature sensors(&oneWire);



//MLX90614

#include <Wire.h>

#include <Adafruit_MLX90614.h>

Adafruit_MLX90614 mlx = Adafruit_MLX90614();



//OLED

#include <SPI.h>

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

#define OLED_RESET -1

Adafruit_SSD1306 display(OLED_RESET);

//OLEDsetting

#define LOGO16_GLCD_HEIGHT 32

#define LOGO16_GLCD_WIDTH  16

#if (SSD1306_LCDHEIGHT != 32)

#error("Height incorrect, please fix Adafruit_SSD1306.h!");

#endif


int line_count=0;


//PHYduino圖檔

const unsigned char PHYduino_Logo [] PROGMEM = {

0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,

0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa,

0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e,

0x67, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6,

0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6,

0x66, 0xff, 0xfc, 0xff, 0xfc, 0xe0, 0x38, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x66,

0x66, 0x00, 0x14, 0xa0, 0x14, 0xa0, 0x68, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x66,

0x66, 0xfc, 0x0c, 0xc0, 0x0c, 0xc0, 0x98, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x66,

0x66, 0x0c, 0x0c, 0xc0, 0x00, 0x83, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xa6,

0x66, 0x0c, 0x0c, 0xc0, 0x00, 0x8c, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0xe6,

0x66, 0x0c, 0x1c, 0xe0, 0x00, 0xd0, 0x18, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x06,

0x66, 0xf7, 0xf4, 0xa0, 0x1c, 0xa0, 0x39, 0xff, 0xf7, 0x80, 0x7f, 0xc3, 0xf3, 0x06, 0x00, 0xe6,

0x66, 0xac, 0x18, 0xff, 0xf4, 0xff, 0xe9, 0x40, 0x1e, 0x80, 0x51, 0x42, 0xd3, 0x05, 0xff, 0xa6,

0x66, 0xcc, 0x00, 0x00, 0x0c, 0x00, 0x39, 0x80, 0x19, 0x80, 0xf1, 0xf3, 0x33, 0x06, 0x00, 0x66,

0x66, 0x0c, 0x00, 0x00, 0x04, 0x00, 0x19, 0x80, 0x19, 0x83, 0x31, 0x98, 0x33, 0x06, 0x00, 0x66,

0x66, 0x0c, 0x00, 0x00, 0x04, 0x00, 0x19, 0x80, 0x19, 0x8c, 0x31, 0x8e, 0x33, 0x06, 0x00, 0x66,

0x66, 0x0e, 0x00, 0x00, 0x0c, 0x00, 0x39, 0xc0, 0x39, 0xb0, 0x31, 0x83, 0xb3, 0x92, 0x00, 0x66,

0x66, 0x0a, 0x00, 0x00, 0x14, 0x00, 0x29, 0x40, 0x29, 0x40, 0x51, 0x40, 0xd2, 0xad, 0xff, 0xa6,

0x67, 0x0f, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xf9, 0xc0, 0x73, 0xc6, 0x00, 0xe6,

0x65, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x66,

0x67, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6,

0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e,

0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa,

0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

};


void setup() {

  //DHT

  Wire.begin();

  dht.begin();

  dht2.begin();

  

  //ds18b20

  sensors.begin();

  

  Serial.begin(9600);

  mlx.begin();  

  //OLED

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

  display.display();

  display.clearDisplay();

  display.drawBitmap(0, 8, PHYduino_Logo, 128, 64, WHITE);

  display.setTextColor(WHITE);

  display.setCursor(0,0);

  display.setTextSize(1);

  display.print("orangeV TCJHS.lab T&C");

  display.display();

  delay(1500);

  display.clearDisplay();

}




void loop() {

  display.setTextColor(WHITE);

  display.setCursor(0,0);

  display.setTextSize(1);


//此處可方便未來用電腦輸出檔案

  switch(0) {

    case 0:

      // 第一列印出 Excel 標題列

      if(line_count == 0) {

        Serial.println("MLX_temperature,IR_temperature,DHT_temperature,DHT_humidity");

        Serial.println("MLX*C,IR *C,DHT*C,DHT %");

      }  

      else {

        Serial.print(mlx.readAmbientTempC());

        Serial.print(",");

        Serial.print(mlx.readObjectTempC());

        Serial.print(",");

        Serial.print(dht.readTemperature());

        Serial.print(",");

        Serial.println(dht.readHumidity());

      }

      line_count ++;

    break;

  }

  

  DHTxx();

  delay(1000);

}


void DHTxx() {

  sensors.requestTemperatures();

  float DHThum = dht.readHumidity();

  float DHTtemp = dht.readTemperature();

  float cc = sensors.getTempCByIndex(0);

  float cc1 = sensors.getTempCByIndex(1);

  float DHT2hum = dht2.readHumidity();

  float DHT2temp = dht2.readTemperature();

  display.println("orangeV TCJHS.lab T&C"); display.print("IR_T = "); display.setTextSize(2); display.print(mlx.readObjectTempC()); display.setTextSize(1); display.print("\t"); display.setCursor(102, 16); display.println("C"); display.print("DHT_T= "); display.print(DHTtemp,1); //小數點1位 display.setTextSize(1); display.print("\t"); display.print("C "); display.print(DHThum,1); //小數點1位 display.println("%");

  

  display.display();

  display.clearDisplay();

}


--------------程式在上方的分隔線---------------

參考資料

一、筆記(78):利用Python讀取序列埠溫濕度值儲存到csv檔

https://atceiling.blogspot.com/2019/12/arduino78pythoncsv.html


二、紅外線溫度計 使用紅外線溫度感測器[MLX90614 / GY-906]

https://sites.google.com/mail3.hwsh.tc.edu.tw/earth/arduinoadvanced/ir-temperature-sensor-mlx90614

2020年12月10日 星期四

MG996R 360度馬達+可變電阻轉速控制 with arduino nano

 因為某個專案開始要玩馬達

之前學會操控的是伺服馬達SG90,但這顆馬達只能轉動<180度,對於需要旋轉的機構還是有所限制

找了很多資料發現有可以360度旋轉的馬達MG996R360,今天參考2個網頁,終於寫出可以控制順時針轉動跟逆時針轉動,並運用可變電阻調整轉速,因為找到的中文資料都是MG996R180度的,摸索了一下終於完成這個程式,如果湊4顆就可以玩開車了

https://www.youtube.com/embed/YypeOdehXSE



2020年9月8日 星期二

PHYduinoV3.1 20200910物理實驗組:溫濕度+光學混光+音頻調整+超音波測距+馬達角度控制+光敏電阻測光穿透

20200909研習後修正
請依(1)~(10)依序安裝,安裝(3)~(10)的每一個功能皆需進行功能測試後才能安裝下一功能

功能請參考https://orangevblog.blogspot.com/2019/10/arduinodht11.html

2020年7月3日 星期五

arduino繪圖筆記

參考文章OLED顯示照片與圖像顯示實習

因為用了話比較漂亮圖的方式沒辦法跑其他程式,所以不能照上面那個網頁去繪圖,只能退而求其次用這個方法

因為螢幕的初始設定不一樣,要畫漂亮圖片的話就沒辦法跑一些阿里阿紮的東西,目前測試出用來點亮燈的analogWrite、發出聲音無緣蜂鳴器的noTone、超聲波測距的都不行,DHT溫濕度可以、ds18b20測溫度可以




------------參考文章的OLDE程式碼設定是--------------

2020年1月10日 星期五

運用紅外線光閘控制LED


參考資料
紅外線發射接收器http://keejko.blogspot.com/2017/12/blog-post_55.html
阿簡生物筆記:Arudino的光電閘計時裝置http://a-chien.blogspot.com/2016/07/arudino.html

完成品


連接圖
紅外線接收器是深色的那個


這樣寫的話就可以達到東西穿透會關燈的效果

-----------以下為程式碼--------

#define LED 13
#define IRreceiver 2

void setup() {
    pinMode(LED, OUTPUT);   
    pinMode(IRreceiver, INPUT);   
    Serial.begin(9600);
}

void loop(){

    int state = digitalRead(IRreceiver);
    if(state == HIGH) {
        digitalWrite(LED, LOW);
    } else {
        digitalWrite(LED, HIGH);
    }
    delay(100);
}

2019年10月18日 星期五

PHYduino物理實驗組:溫濕度+光學混光+音頻調整+超音波測距+馬達角度控制20200602

完成了一個可以處理國中物理相關問題的器材,包含光學、聲音、運動學、溫度變化的測量展示儀器,感謝龍山國中鄭志鵬小P老師讓我參考他的程式,還有網路上的其他資源,加上數位深耕計畫提供材料、金源與進度壓力才能逼迫我自己寫出這個東西。
基本上還缺1、2個功能就完整了,到時候再改版(預計擴增:1.霍爾感測器測磁場、2.JFET場效電晶體偵測靜電場,3.一組光閘,可用腳位剩下0.1.7.8,不知道夠不夠寫XD,或是0.1腳位的限制,如果沒問題應該是剛剛好4個腳位需求)

基本上如果能夠照下方連接圖插好,把程式碼寫進去nano裡面就可以運作了


2018年8月23日 星期四

2018年6月19日 星期二

arduino_nano+心跳模組+0.96吋oled顯示+nRF24L01無線收發器

前面幾個步驟完成後,終於可以朝生物實驗器材需求最後一關邁進了,那就是-無線通訊,如果學生可以做實驗的同時,老師電腦就收到數據,這樣就可以同步分析數據結果了,而nRF24L01這個無線收發器可以支援1對6,最大功率時距離70m內好像不成問題,未來實驗就可以同時接收6組的數據了,感覺十分方便
你需要一台發送訊號,另一台接收訊號才行,如上圖

arduino_nano+0.96OLED顯示

完成品如右側顯示,左側是arduino uno,整體而言加了擴充版還是比原來uno小,未來覺得可以推廣nano+擴充版就好。
這次主要想讓整個儀器比較小一點,所以使用arduino_nano這個比較小的板子,配上擴充版,其實整體而言好像比uno更便宜而且好用,唯一要擔心的可能是容量問題(如果是ATMEGA328P的flash應該都是32kb所以一樣大沒問題),還有他要多安裝一個軟體,Arduino UNO 相容版(CH341) Windows 驅動程式(點此下載)

2018年5月29日 星期二

arduino心跳模組專案


暨上次挑戰完雙溫濕度計感測模組以後,最近終於下定決心要去做心跳模組了。
雖然之前上雙溫濕度計感測模組覺得沒有很成功,因為學生在裝設arduino就要花太多時間了,何況是需要串聯、插麵包板時候。
已經覺得降低很多難度與門檻了,看來還是遠遠不夠,造成計畫持續延宕。
而且每讓教學現場下降一門檻,我自己的時間成本就會拉好高好高,不斷的反思這樣是否可以真的實現在教室內呢?還是只能在延伸課程中?

2017年12月13日 星期三

arduino溫濕度計輸出LCD(四) 雙偵測器顯示

一個DHT11可以,那是否可以設定兩個以上的溫濕度計呢?
看到有人問這個問題,不過我google不到成品,那就自己設計看看
反正應該不難,就是給他貼兩倍就對了

arduino溫濕度計輸出LCD(三) 溫濕度計數據顯示於LCD

接下來要整合兩個文章,就可以將DHT11溫濕度計讀到的數據傳給LCD
首先要知道溫濕度計裡的程式碼代表的意思
Serial.print()  是把數據傳給電腦
lcd.print() 就是把數據傳給LCD
lcd.print("%   "); 這個是印出"雙引號中的文字",僅限於英數與符號

這樣我們就可以結合兩個程式讓數據輸出到LCD了,以下是我修改後的程式碼

arduino溫濕度計輸出LCD(二) LCD顯示Hello World!

LCD輸出真得很折騰...
試了很多次無法成功,因為不同廠牌的I2C程式碼有點不同,可能要注意

一樣丟關鍵字餵狗"LCD arduino"
【自造學堂】Arduino如何透過I2C控制LCD模組
Arduino 使用 1602 IIC(I2C) LCD 點陣液晶模組   (這個文章的輸入部份我試不出來)

先按圖索驥接好裝置

開啟arduino程式→草稿碼→匯入程式庫→管理程式庫搜尋"newliquidcrystal" →選第一個"Newliquidcrystal_1.3.5"→ 安裝

2017年12月12日 星期二

arduino溫濕度計輸出LCD(一)電腦上輸出DHT11溫濕度計數據

這次終於有心想突破:溫濕度數據顯示於LCD 這件事情
以下是我的學習記錄,這文章會記錄從無到有的學習歷程,所以可能會比較繁瑣,不過我想詳細的記錄自己搜尋資料、解決問題、運算思維等後設認知部分,以利未來學習其他流程時也能簡化成這個學習模組。

我想要攻克的任務流程如下,如果想跳到結果得可以選擇以下文章
(一) 電腦上輸出DHT11溫濕度計數據
(四) 雙偵測器顯示,修改成自己喜歡的顯示模式

首先先蒐集資料,發現我的溫濕度計是DHT11

2017年2月2日 星期四

arduino-蜂鳴器練習

參考書籍:數位時代的端士刀來了:Arduino開創物聯網大局

好久沒有寫網誌了,也好久沒有寫程式了(從大四跨系選修程式語言到現在)
準備要玩arduino,就記錄一下學習新事物的過程吧

要發出聲音需要蜂鳴器,蜂鳴器分成有源蜂鳴器、無源蜂鳴器兩種
有源蜂鳴器只能發出單頻率的聲音,可以拿來寫警告音或是練習摩斯密碼
無源蜂鳴器就可以發出不同頻率的聲音了