Posts match “ arduino ” tag:

DHT11 溫溼度感測器模組 DIY

Arduino與DHT11溫溼度感測應用可參考前篇「Arduino + DHT11溫溼度感測器」。自己DIY DHT11溫溼度感測器模組的好處:

  • 比直接購買感測器模組成品更便宜(當然您如果一秒鐘幾十萬上下,您還是買現成的吧)
  • 自己DIY更有成就感
  • 搭配其他電路應用,可以縮減電路板面積
  • 學生交作業
  • DHT11感測器隨時可以拆到其他地方使用
  • 開心就好

材料及工具

  • DHT11溫溼度感測器 x 1
  • 電木PC板 x 1
  • 10K歐姆電阻 x 1
  • 100nF (0.1uF,104)陶瓷電容 x 1
  • 2.54mm 單排排針母座 x 4pin
  • 2.54mm 單排(轉90度)排針 x 3pin
  • 40W電烙鐵 x 1
  • 焊錫 x 1
Read on

Arduino Uno 做為 ISP 燒錄 bootloader 到 ATMEGA328P-PU 晶片

找了許多網頁、翻了幾本書總是無法燒錄成功,一直出現下列錯誤訊息:

avrdude: stk500_getsync(): not in sync: resp=0x15

想放棄時,總算在不專業領域-Arduino ISP燒錄bootloader中看懂正確步驟,為了讓自己日後不再搞錯,特此截圖說明。

材料及工具

  • Arduino UNO Rev3 x 1
  • 麵包板 x 1
  • 10K 歐姆(棕黑橙)電阻 x 1
  • 22pF 陶瓷電容 x 2
  • 10uF/16V 電解電容(有+/-極) x 1
  • 16MHz 石英振盪器 x 1
  • 連接線 x 數條

步驟ㄧ:將範例ArduinoISP上傳至 Arduino UNO 板子上

  1. 選擇 Arduino > File

  1. 選擇 Arduino > File > Examples

  1. 選擇 Arduino > File > Examples > ArduinoISP

  1. 按照平常上傳(Upload)範例方式,確認正確將ArduinoISP範例完成上傳至Arduino UNO上

步驟二:依照官網圖說完成下列電路圖


麵包板上就是我們想要燒錄bootloader的ATMEGA328P-PU晶片,接好電路圖的各項元件之後,記得將10uF/16V 電解電容的正極腳插在Arduino UNO上的Reset插孔,而電解電容的負極腳則插在間隔兩孔的GND(接地)插孔上。


步驟三: Arduino > Tools > Programmer > Arduino as ISP

步驟四: Arduino > Tools > Burn Bootloader 進行燒錄


稍待一小段時間,看到訊息出現 Done burning bootloader. 就表示bootloader已經燒錄到麵包板上的ATMEGA328P-PU晶片。

大功告成!

注意事項

正常燒錄過程可以看到Arduino UNO板上RX/TX兩顆LED會閃爍,表示資料有正常傳收中。

Arduino 以搖桿控制伺服器馬達

材料

  • Arduino UNO Rev3 x 1
  • MG90S 伺服器馬達 x 2


接線: 橙(DATA)、紅(5V)、棕(GND)

  • 雙軸按鍵搖桿 x 1 (只用到X, Y輸出)


接線: VCC(接Arduino 5V)、GND(接Arduino GND)

  • 連接線 x 數條

電路圖

Arduino 程式碼

#include <Servo.h> 
#include <Serial.h>
 
Servo servoX, servoY; 

const byte pinX = A0;
const byte pinY = A1;

int valX, posX;
int valY, posY;
 
void setup() 
{ 
  Serial.begin(9600);
  servoX.attach(8);
  servoY.attach(9);
} 
 
void loop() 
{ 
  valX = analogRead(pinX);
  valY = analogRead(pinY);
  
  posX = map(valX, 0, 1023, 0, 179);
  posY = map(valY, 0, 1023, 0, 179);

  /*  
  for (int xx = 0; xx < 180; xx++) {
    servoX.write(xx);
    delay(15);
  }
  */
  servoX.write(posX);
  servoY.write(posY);
  Serial.print(valX);
  Serial.print(", ");
  Serial.println(valY);
  Serial.println("");
  
  delay(15);                           // waits for the servo to get there 
} 

注意事項

  posX = map(valX, 0, 1023, 0, 179);
  posY = map(valY, 0, 1023, 0, 179);
  • 程式碼 map 函數內 1023 數值可依照實際搖桿輸出之類比最大 valX、valY 值替代。
  • 實作時發現其中有一顆伺服器馬達會發生顫抖現象。推敲原因是當搖桿歸回原點時,實際類比輸入值有飄移現象,導致進行輸入值0~1023對應轉化為0~179時,可能數值在servoX.write(89~91)之間飄移,致使伺服器馬達不斷動作而發生顫抖現象,可能要修改程式碼因應。