投稿

4月, 2021の投稿を表示しています

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&qu

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問目を時間内に解けるようになることだ。

僕がマイコンプログラミングで使っているもの

マイコンプログラミングで必要なもの マイコンを使ったプログラミングに必要なものをまとめてみた。 マイコンボード マイコン用のUSBケーブル ブレッドボード ジャンパーケーブル LED カーボン抵抗 スイッチ LCDモジュール 簡単なプログラミングの勉強なら、これぐらいあれば十分だと思う。 マイコンボード 初心者や入門用に使うマイコンボードは「 Arduino 」や「 Raspberry Pi 」がいいと思う。 この二つがオススメな理由として、ネットで調べると使っている人が多いので何かやるには勉強がしやすい。 個人的にはC言語でプログラミングをしたいので、「Arduino」が一番オススメ。 リンク リンク そのなかで一番使いやすいのは、「Arduino Nano」がいい。ブレッドボードに差し込んだりできるので、コンパクトになる。中華性の互換機なら、純正品を買うよりも安く買えるのもいい。 個人的にオススメなもの マイコンを使ったプログラミング勉強で使ったものをまとめてみる。 これから勉強する人は参考にしてほしい。 マイコンで使うパーツは基本的に秋月電子で買うことが多い。 ブレッドボード 秋月電子  http://akizukidenshi.com/catalog/g/gP-00285/ リンク ジャンパーケーブル 秋月電子  http://akizukidenshi.com/catalog/g/gP-08996/ リンク ワイヤーストリッパ リンク このセットにした理由は、ケーブルの長さを自由にできるから。 ブレッドボード上でケーブルのつながりを見やすくできる。 あと、断線しにくい。 LED 秋月電子  http://akizukidenshi.com/catalog/g/gI-11637/       http://akizukidenshi.com/catalog/goods/search.aspx?search=x&keyword=LED%83o%81%5B&image=%8C%9F%8D%F5 いろんな色がある

ArduinoIDEをインストールする

イメージ
ArduinoIDEをインストールする Arduinoにプログラムを書き込むためにはArduinoIDEという専用のエディタを使うのが一般的です。 まずは、「ArduinoIDE」で検索します。 検索結果がでたら、「Software - Arduino」をクリックします。 「Download the Arduino IDE」と書かれた欄から、「Windows Installer, for Windous 7 and up」をクリックします。 「JUST DOWNLOAD」をクリックしてファイルをダウンロードします。 ダウンロードしたファイルを起動して、ArduinoIDEをインストールしていきます。 インストールが完了すると「Close」ボタンが押せるようになるので、押して終了です。 デフォルトでインストールを行っていけば、デスクトップ画面にショートカットキーが作成されるので、それでArduinoIDEを起動できるようになります。

C言語プログラミングの基本構成のおさらい

C言語プログラミングをやっていくにあたり、覚えてほしい基本構成をまとめてみます。 「関数」について プログラミングにおける関数とは、「入力に対して、ある処理を行い結果を出力するもの」です。 例えば、スイッチを押せば電気が流れて電球が光るといった感じです。 スイッチを押すという「入力」があり、電気が流れる「処理」が発生して電球が光る結果が「出力」しています。 こう考えると、世の中の行動すべてがプログラミングをやっていると思えませんか? C言語では1つのまとまった機能を関数として取り扱い、その関数を組み合わせて大きなプログラムを作っていきます。 プログラムの構成単位 (1)式     プログラムを構成する1つの要素。数学の数式みたいなもの。     文字(変数)や数字を演算子で結んだもの。     a = b + c     menseki = tate * yoko (2)文     式のあとに;(セミコロン)があると文と呼ぶ。     C言語プログラムはほとんどが文の集まりである。     a = b + c;     menseki = tate * yoko; (3)文のブロック     C言語で使い方の決まっている「予約語(キーワード)」を使った文。     文のブロックは{で始まり、}で終わる。文が1つの場合は省略可。     予約語{          a = b + c;         menseki = tate * yoko;     }     予約語 menseki; (4)関数のブロック     文のブロックと同じように複数の文をひとまとめしたもの。     「予約語」ではなく「関数名」をつけること。{}を省略できない。     関数名{         a = b + c;         menseki = tate * yoko;     }     関数名の例として「void main(void)」が関数名になります。

C言語でプログラムを書いてみる”Hello World"

イメージ
Visual Studio 2019でプログラミングをやってみようと思います。 Visual Studio 2019をインストールしていない人は下のリンクからインストールの方法を読んでインストールしてみてください。 https://taku-mycon.blogspot.com/2020/05/blog-post.html まずはVisual Studio 2019をを起動してみます。 そうすると、下のような画面になるはずです。 空のプロジェクトを選択し、「次へ」をクリックします。 新しいプロジェクトを構成しますと画面が表示されます。 この画面では、プロジェクトの名前とプログラミングしたデータの保存先を設定できます。 今回は、プロジェクト名を「HelloWorld」とします。 ソリューション名はプロジェクト名を変えると自動的に同じ名前が設定されます。 保存先はデスクトップにあらかじめ作った空のファイルをしています。 特に指定がなければ、デフォルトの保存先でも大丈夫です。 最後に「作成」をクリックしてください。 これで、プログラムのファイルの作成が完了します。 そうすると、上のような画面になります。 ですが、まだプログラムを書くことはできません。 記入するためのソースファイルの作成が必要です。 ソースファイルの作成は次のような方法があります。 ①    「プロジェクト」→「新しい項目の追加」をクリックします。 ②    ソリューションエクスプローラーの中にある「ソースファイル」を右クリック。        「追加」→「新しい項目」をクリックします。 ①か②のどちらかの方法で作成します。 そうすると、下の画面のものが表示されます。 C++ファイル(.cpp)を選択します。 名前の「ソース.cpp」を「HelloWorld.c」に書き換えます。 「追加」をクリックします。 上の画面になったら、準備完了です。 ソリューションエクスプローラーのソースファイルの下に「HelloWorld.c」が作成されていれば大丈夫です。 まずは簡単なプログラムを記

STM32F401-Nucleoでシリアル通信をやってみる

イメージ
ネットで調べると、STM32はUSART機能というものを使ってUART通信を行えるらしい。 UART通信はシリアル通信の一種とのこと。 なので、今回はSTM32F401-Nucleoでシリアル通信を行っていきたい。 STM32CubeIDEでシリアルモニタみたいなものがあるので、それに文字の表示を行う。 CubeMXでピンの設定を行う 最初にCubeMXでピンの設定を行う。 STM32ではUART通信を行うときは「USART_TX」と「USART_RX」というピンの設定を行わなければならない。 基本的に、Nucleoボードを使ってプロジェクトを作成したときは、デフォルトでこの設定が行われている。 なのでシリアル通信の速度の確認だけ行えばよい。 [Connectivity]→[USART2]→[Parameter Settings]から[Basic Parameters]の[Baud Rate]の速度を確認する。 デフォルトの設定は「115200 Bits/s」なのでこの数値を覚えておく。 main.cでプログラムを書いていく main.c画面を開き、プログラムを書いていく。 /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART2_UART_Init(); /* USER CODE BEGIN 2 */ char buf[] ="Hello World\r\n"; HAL_UART_Transmit(&huart2,(uint8_t *)buf,sizeof(buf),0xffff); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ HAL_UART_TransmitはHALライブラリのUART通信を行うための関数である。 引数にUSART2な

29歳になりました

 自分の誕生日は4月1日です。 学生の頃は、春休みなので友達から誕生日を祝われたことはあまりありません。 社会人になってからは、誕生日おめでとうと言われるようになり地味に嬉しく思っています。 昨年、専門学校を卒業し、再就職をはたして1年が経ちました。 この1年は会社の業務に慣れることを重要視してあまり資格試験などの勉強は行ってきませんでしたが、今年度からは行っていきたいと思います。 再就職して、必要だなと感じた資格は”第二種電気工事士”になります。 今年度はこの資格を取得することを最低限の目標としていきます。 あとは過去に2度落ちた”応用情報技術者試験”を合格したいと思います。 第二種電気工事士はちょうど申し込み期間なので、とりあえず応募しておきます。 応用情報技術者試験は春季試験は応募し忘れてしまったので、秋季試験は忘れずに応募したいと思います。 次は30歳。人知れず頑張っていきます。