Arduino UnoでブートロードされたATMEGA328Pを使用したIRスイッチ

anon65161734

このプロジェクトは、いくつかの異なるアイデアを1つにまとめることでした。 プロジェクトの第1は、私ができる限り最も基本的で信頼性の高いマイクロコントローラを使用することでした。 さまざまなことを制御し、コストを抑え、課題に取り組むために複数のユニットが必要だったので、このようにしました。プロジェクトの第2は、DVDプレーヤのIRリモコンで何かを制御できるようにすることでした。
最初の課題は、ブートローダなしでATMEGA328Pをプログラムする方法を理解することでした。 このチップは非常に一般的であり、多くの I / Oがあり、私の見解ではATTINYよりも信頼性が高いため、このチップを使用することにしました。ブートロードとプログラミングを行うために、リムーバブルICを備えたArduino UNOR3を使用しました。 (この品番は1050-1024-NDです)。
ブートロードについては、Arduinoのサイトと次の手順を参照しました:
https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard

  1. Arduino ISPのスケッチをArduinoボードにアップロードします。(お使いのボードに対応するToolsメニューからボードとシリアルポートを選択する必要があります。)

  2. 右図のようにArduinoボードとマイコンを配線します。(この場合はこのリンク) https://www.arduino.cc/en/uploads/Tutorial/BreadboardAVR.png

  3. Tools>Boardメニューから「Arduino Duemilanove or Nano w/ ATmega328」を選択します。(または、以下に説明する最小構成を使用する場合は、「ATmega328 on a breadboard (8MHz internal clock)」を選択します)。私の場合は、「Arduino Duemilanove or Diecimila 」というボードを選択しました。

  4. Tools>Programmerから「Arduino as ISP」を選択します。

  5. Tools> Bootloaderを実行します。 ブートローダを書き込む必要があるのは1回だけです。 そうしたら、Arduinoボードのピン10、11、12、13に接続されているジャンパ線を取り外すことができます。

このステップでは、ブートローダを新しいチップにコピーするために、ボードに付属の IC をソケットに入れたままにしておく必要があることに注意してください。これが正常に行われると、右下に 「Bootloader Burn Complete 」と表示されます。また、これらをたくさんやるつもりなら、一度に全部やることをお勧めします。将来的にもっとATMEGA328Pを焼く予定があるなら、配線を早くするためにシールドを作っておくのもいいかもしれません。

ブートロードが正常に行われた後は、プログラムする時間です。以下のようにボードを再配線してください: https://www.arduino.cc/en/uploads/Tutorial/ArduinoUSBSerial.png UNO用の元のICは取り外さなければならないことに注意してください。また、プログラマをもとの "AVR ISP "に変更したいでしょうが、ボードは "Arduino Duemilanove or Diecimila "のままにしておきます。私が「Arduino Basic」と呼んでいるものをビルドしてプログラミングする方法については、Arduinoのサイトを参考にしましたが、YouTubeの以下の2つの非常に良いソースも使用しました。

DroneBot Workshop(長いですが、非常に良い掘り下げをした例): https://www.youtube.com/watch?v=Sww1mek5rHU&t=1s
GreatScott! (短い説明ですが、それでも非常に良い): https://www.youtube.com/watch?v=J3DYgzRvLT8&list=TLPQMDUwMjIwMjC8JE_1TFTCYA&index=2

次はIRセンサの使い方を考えてみました。この参考のために、私は再びYouTubeの同じ2つのチャンネルを使用しました。以下、それらのリンクです:
DroneBot Workshop (長いですが、非常に良い掘り下げをした例): https://www.youtube.com/watch?v=8E3ltjnbV0c&t=60s

0

GreatScott! (短い説明ですが、それでも非常に良い): https://www.youtube.com/watch?v=ftdJ0R_5NZk&t=256s
どちらの例も、最初にKen Shirriffのライブラリを使用しており、私が始めた例はIRrecvDemoで、「IR remote」と入力するとライブラリマネージャで見つけることができます。オプションをスクロールする必要があるかもしれませんが、そこにあるはずです。
サンプルコードから、リレーを出力として追加し、次のコードを得ました。
/*
 * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
 * An IR detector/demodulator must be connected to the input RECV_PIN.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com 
 */
#include <IRremote.h>

int RECV_PIN = 8; // Puts the receive pin of the IR receiver to pin 8, which is pin 14 on IC
const int RELAY = 10; //Put in signal pin of the relay to pin 10, pin 16 of the IC
int togglestate = 0; // set to state of the switch to 0
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600); // Start serial monitor
irrecv.enableIRIn(); // Start the receiver
pinMode(RELAY,OUTPUT); // declare RELAY to be an output
}
void loop() {

if (irrecv.decode(&results)) { // decodes the results
Serial.println(results.value, HEX); // shows the resulting as a hex number in the serial monitor
switch(results.value){
case 0x94CC5A5E: // Starts the case to look for the results.value to be 94CC5A5E
if(togglestate == 0){ // if the toggle state is = to 0, turn RELAY PIN HIGH and toggle state to 0
digitalWrite(RELAY,HIGH);
togglestate = 1;
delay(100);
}
else{
digitalWrite(RELAY,LOW); // if the toggle state is = to 1, turn RELAY PIN LOW and toggle state to 1
togglestate = 0;
delay(100);
}
break; // breaks the case statement
}
irrecv.resume(); // Receive the next value
}
}

さて、今回のプロジェクトでは、120VAC用のスイッチを使いたいと思いました。120 VACで作業したことがない場合は、自己責任でこれを試みてください。私は以前に120VACの作業したことがあり、電子工学の学位を持っており、問題なく対応できます。このためにこの回路で使用されているリレーは同様に、より低く、より安全なDC電圧を切り替えることもできます。

私のプロジェクトで使用されているパーツリストは、下の表で見ることができます。

Capture

私が使用した配線図はこちらです。

0

そして最後に、プロジェクトの部品と組み立ての写真です。

AC to DC conveter
Arduino basic
IMG_20200205_153805945
IMG_20200205_153826751
IMG_20200205_154141470



オリジナル・ソース(英語)