投稿

ArduinoでADC調光を行う

イメージ
PWM制御 Arduinoでアナログ制御を行おうとすると、PWM制御という単語にたどりつく。 Arduinoは基本的に0Vか5Vの電気の出力しか行えない。しかし、PWMは出力する電気を高速でON/OFFすることで、疑似的に出力する電気の量を変えることができる。 100回のON/OFFの切り替えで、50回だけ5Vを出力し、疑似的に2.5Vの電気を出力することができる。 アナログ出力とアナログ入力 アナログ出力でLEDの明るさを調節する ArduinoはPWM制御の行えるピンが決まっている。 3、5、6、9、10、11ピンが使える。 今回は3番ピンでPWMによるLEDの調光を行う。 使う回路はこんな感じ。 スイッチがついているが、今回は使わない。 int led; void setup() { pinMode(3,OUTPUT); } void loop() { for(led=0;led<256;led++){ analogWrite(3,led); delay(5); } for(led=255;led>0;led--){ analogWrite(3,led); delay(5); } } Arduinoでアナログ出力を行うときはanalogWrite()という関数を使う。 アナログ出力で注意するところは、Arduinoでは0Vから5Vの変化を0から255の数値に変換して行う。 5Vの電気を出力したいとき255を引数として与え、2.5Vなら127の数値を引数として与える。 アナログ入力を行ってアナログ出力を調節する Arduinoでアナログ入力を行うときはA0からA7というピンを使う。 「A」はanalogのAである。 アナログ入力を行うので、可変抵抗器をスイッチの代わりに使ってみた。 可変抵抗器はその名の通りに、抵抗の値を変化させることができる。 これを使って、抵抗値の変化をアナログ入力してLEDの調光を行ってみる。 int led; int sw; void setup() { pinMode(A1,INPUT); pinMode(3,OUTPUT); } void...

Arduinoでスイッチを使ったLED点灯(Lチカ)

イメージ
プルアップ回路とプルダウン回路 スイッチを使ったLチカを調べていくと、この二つの回路についての説明が出てくる。 ようするに、マイコンを守るための電気回路だと思っておけば大丈夫。 プルアップ回路 何もしてないときに電気を流しておくことをプルアップ回路といいます。 この回路は、電気が流れていると常にマイコンに電気が入力される回路になります。 スイッチを押すとマイコンに流れる電気がOFFになり、離すとONになる回路です。 メリットとして、常に電気が流れているので静電気に対して丈夫。 デメリットとして、マイコンへの入力がスイッチを押すとOFFになるのでプログラムではそれを気にした記述を行わなければならない。 プルダウン回路 スイッチを押したときに電気を流すことをプルダウン回路になります。 この回路は、プルアップとは反対の動きをする回路になります。 メリットとして、プログラムでON/OFFの反転を考えなくてよい。 デメリットとして、静電気がマイコンにONの入力をする恐れがある。 慣例的にプルアップ回路を使う 昔の半導体の特性によって、プルアップ回路が使われてきている。 いろいろ調べてもプルアップ回路が使われてきてるものが多いので、プルアップ回路を使っておけば問題ない。 スイッチを使ったLED点灯・点滅回路 今回はこんな感じの回路を組んでみた。 Arduino互換機にLEDアレイをつなげて、スイッチをつなげてある。 スイッチを押してるときLEDを点灯させる プログラムはこんな感じ。 void setup(){ pinMode(11,INPUT); pinMode(2,OUTPUT); pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); } void loop(){ if(digitalRead(11)==LOW){ digitalWrite(2,1); } else{ digitalWrite(2,0); } } digitalRead()というのはArduino専用の関数である。 ピンに対して入力信号を...

最近は仕事が忙しいです

 タイトル通りに、最近は仕事が忙しいです。 エンタメ業界で働いていますが、今はオリンピック・パラリンピックの仕事をしています。 実際に開催されるかどうかは賛否両論の世の中ですが、そういった業界で働いている人もコロナ禍の影響で仕事があまりない状態です。 飲食業界はよくニュースで取り上げられていますが、エンタメ業界で働いている人も大変な状況でいる次第です。 今は、オリンピック・パラリンピックが開催に向けて現場レベルでは準備が着実に進んでいます。 正直、再延期となればまた同じ仕事を来年も行わなければならないかと思うと憂鬱です。 中止になると、作ったものが無駄になり廃棄することになります。 まぁ、エンタメ業界は基本的に一回使って終わるようなものを作ることが多いですが… 実際に現場でモノを施工するとなると、いろいろと申請があり非常に大変です。 今まで行ってきた仕事が無駄に終わることだけはないようにしてほしいと思います。 僕個人としては、スポーツエンターテイメントの祭典である、オリンピック・パラリンピックが無事に開催されることを願います。

C言語のおさらい 基本的な演算子の使い方

イメージ
基本的な演算 C言語で使われる基本的な演算子は以下のものがある。 算術演算子 * ・・・掛け算(乗算) /  ・・・割り算(除算) % ・・・剰余算 +  ・・・足し算(加算) -  ・・・引き算(減算) 代入演算子 =  ・・・代入 計算の順番は算数・数学と同じ。 掛け算・割り算を先に計算する。 足し算・引き算を先に行いたいときは()で囲む。 剰余算が聞きなれないが、整数で計算した時の余りが答えになる。 (例)   5÷2=2あまり1 剰余算では1が結果になる。 変数の初期化 変数に値を設定すること。 「変数の型を指定する(int a)」「変数に値を入れる(a = 1)」のように2段階で行っているが、変数の型の指定と値の設定をまとめて行うことができる。 記述の仕方はこんな感じ。 データ型 変数名 = 値(または式); まとめて行うこともできるが、基本的に分けて行ったほうがプログラムのバグの確認が行いやすい。 これらをふまえて、プログラムを書いてみる。 #include <stdio.h> int main(void) { //変数の宣言 int num1; int num2; float num3; float num4; int add; int sub; int mul; int div; float div2; int rem; //初期化 num1 = 20; num2 = 7; num3 = 20; num4 = 7; //処理 add = num1 + num2; sub = num1 - num2; mul = num1 * num2; div = num1 / num2; div2 = num3 / num4; rem = num1 % num2; //出力 printf("足し算:a+b=%d\n", add); printf("引き算:a-b=%d\n", sub); printf("掛け算:a*b=%d\n", mul); printf("整数の割り算:a/b=%d\n...

Arduinoで外付けLEDを点滅させる(Lチカ)

イメージ
LEDと抵抗について LEDには電気の流れる向きが決まる極性というものがある。(プラス方向とマイナス方向) 金属線の長いほうがアノード(プラス方向)短いほうがカソード(マイナス方向)という。(下の画像は秋月電子の商品ページより) それをブレッドボードに差し込みやすく加工してみた。 左側がアノードで右側がカソードになっている。 短くしたことで、ブレッドボードに差し込んだとき、金属線がむき出しにならなくてよくなる。斜めにカットしておけば、ブレッドボードに差し込みやすくなる。 LEDには許容電圧というものがある。これは、LEDに流していい電圧の大きさをしめしている。 基本的にはデータシートと呼ばれるものを読んで調べる必要がある。 そして、電圧を調整するために使うのが抵抗器である。 ArduinoでLEDを点灯するには、電気について少し勉強する必要がある。 だが、僕のブログでは詳しくはまとめないので、他のサイトを参考にしてほしい。 とりあえず覚えておけばいいのは、 ArduinoでLEDを点灯するためは500Ωくらいの抵抗器 をつけておけばよい。 ArduinoにLEDをつなげる ArduinoでLEDを点灯してみる。 必要なものがこちら Arduino nano LED カーボン抵抗(緑茶茶金)510Ω ジャンパーケーブル ブレッドボード これらを写真のようにつなげる。 D2のピンからLEDのアノード(+)につなげる。 LEDのカソード(-)からカーボン抵抗につなげる。 カーボン抵抗からArduinoのGNDをつなげる。 写真の5vのにつながっている赤い線と、3.3vからつながっている橙の線はつなげなくても大丈夫。これは別の機会に使うもモノなので気にしないでほしい。 Arduino IDEでプログラムを書き込む Arduino IDEで書き込むソースプログラムを書いてみた。 void setup(){ pinMode(2,OUTPUT); } void loop(){ digitalWrite(2,1); delay(300); digitalWrite(2,0); delay(300); digital...

C言語のおさらい printf関数の使い方

イメージ
  C言語プログラムのベース C言語プログラムのベースフォーマットは以下のような記述がある。 ① #include <stdio.h> int main(void){ return 0; } ② #include <stdio.h> void main(void){ rewind(stdin); getchar(); } 見比べると違う部分があるが、共通して書かれている部分がある。 1行目に「 #include <stdio.h> 」を記述している。 これはヘッダファイルと呼ばれるもので、C言語を使うならこの文は覚えておくといい。 これは標準関数と呼ばれ、最初は説明されても意味が分からない。 とりあえず、書いておくものとだけ覚えればいい。 ①の「 return 0 」と②の「 rewind(stdin); 」「 getchar(); 」の説明もここではしない。 同じく、最初に説明されても意味が分からない。 とりあえず初心者は、①か②のフォーマットを記述してからプログラムを記述していくといい。 一般的なのは、①の記述方法である。記述量が少ないから一般的。 画面文字を出力する関数 printf() 関数 printf() 関数は、C言語でディスプレイに出力するときに使う標準関数。 標準関数とは、よく使用される機能をまとめた関数です。これは、ANSIにより規格化された関数で、C言語で書かれたプログラムで動くすべてのコンピュータに共通して使うことができる。 定数の出力 printf() 関数を使うには、「 #include <stdio.h> 」という記述が必要になる。 Visual Studio 2019なら記入すれば自動で使えるようになるので、忘れずに記入すること! printf() 関数がどういう機能を持つか記述してある。ほかにも、標準関数と呼ばれるものはすべてに使うので必ず記入すること。 文字の出力 ...

AtCoderで惨敗

 最近、YouTubeでAtCoderというサイトのニュース動画を視聴した。 AtCoderは競技プログラミングサイトで、世界中の人が気軽に競技プログラミングに挑戦できる。 競技プログラミングの大会を定期的に開催しており、3月末から自分も挑戦を始めた。 結果としては1問解くだけで精一杯。2問目を解く途中で終わってしまう。 1問目は簡単なのだが、2問目から一気に難易度が上がる。 C言語で挑戦しているのだが、気づいたこととしてC言語は競技プログラミング向きではない感じがする。 大会終了後に問題の解答例が出てくるのだが、どれもC++かpythonのプログラムで書かれている。 他の参加者もきっとC++かpythonで挑戦しているのだと思う。 自分もC++かpythonで挑戦できるように勉強をしようと思う。 モンハンライズを買わなくてよかった。モンハンを買っていたらきっと、競技プログラミングやっていなかっただろう。 とりあえず、当面の目標は2問目を時間内に解けるようになることだ。