写真を直線画にするツール

Merry Xmas

どうもこんばんは、15-nomoです。

こちらはrogy Advent Calendar 2018の25日目、最後の記事になります。

 

本当はいま自作している自分のblogで公開したかったのですが、間に合わなくてrogiken blogに投稿します。 自作blogについてはまた今度。

また、記事も最近作っている三輪オムニボールについて書こうと思ったのですが、回路にミスがあったのでこちらもまた今度にします。

ということで今回はLinePictureという作品について書きたいと思います。

“写真を直線画にするツール” の続きを読む

ロボコン無関係者が東北交流会に乱入してみた

みなさんこんばんは。ゆきです。
製の6時間はいかがお過ごしでしょうか。

私はロボットちゃんとぬいぐるみちゃんと一緒に自宅デート中です。
(⋈◍>◡<◍)。✧♡ < 黙ってコードを書け ]

さてこのたびは、2018/12/22~23に開催されました、「東北地区ロボコン交流会2018」というイベントに参加させていただきました。
こちらご報告して参りたいと思います。

この記事は rogy Advent Calendar 2018 の24日目の記事です

“ロボコン無関係者が東北交流会に乱入してみた” の続きを読む

Maquinistaの2018年を振り返る

こんにちは。Maquinistaで広報を担当している16のMassaです。

こちらはrogy Advent Calendar 2018の23日目の記事になります。

Maquinistaでは来年5月26日に開催されるNHK学生ロボコン2019に向けて日々活動しています。特に現在は1次ビデオ審査を目前に控えているため、練習や調整を行っています。
“Maquinistaの2018年を振り返る” の続きを読む

STM32でマウスとキーボードを作る

こんにちは。18のHitomosiです。この記事は [rogy Advent Calendar 2018]の20日目の記事です。

マウスとかキーボードが作れるってよくないですか?PCに接続するだけで動くだけでも正直面白いんですが、作ったものでPCが操作できます!

マウスとかキーボードを作るといっても、今回はいわゆるそういうものを作るというわけではなくて、USBでPCに接続するとマウスやらキーボードとして使える何かみたいなものを作ります。要するにHIDデバイスを作るわけですね。ヒューマンインタフェースデバイスデバイス。

今回はボタン入力のものを作っていきますが、様々なセンサーの値を反映させるみたいなこともできるので、いろいろ応用が利くかと思います。

最低限必要な部品

  • STM32のうち、USBが使えるもの
    今回は、F042K6T6を使います。このマイコンは秋月で250円で売っているうえにUSB通信に水晶発振子がいらないのがメリットです。逆に言うとこれ以外のSTM32を使う場合は通信に必要な48MHzを得るために水晶発振子が必要です。STM32はPLLを内蔵しているので、12MHzあたりの水晶発振子を用意すればいいかと思います。
  •  3.3Vレギュレータ
    STM32は電源としてUSBのVBUSの5Vを使うと死ぬので用意しましょう。
  •  USBコネクタ
    今回はUSBで接続するので必要です。

回路図

ポリスイッチはDIP化キットについていたものなんですが、たぶんあったほうがいいです。
余っているIOポートにスイッチとかLEDとかセンサとかを付けます。今回はそういう基板があったのでPA8にスイッチを付けていますが、別に何でもいいです。
JTAGは書き込みとデバッグに使っているだけなのでSTLinkとかでもいいです。

今回の環境

種類 環境
マイコン STM32F042K6T6
OS Windows10
IDE Atollic TrueSTUDIO 9.0.1
コードジェネレーター STM32CubeMX
デバッガ SEGGER J-Link EDU Mini

CubeMXの設定

Pinout

Peripherals

  •  SYS
    今回はSWDで書き込むので以下のようにします。
  • USB
    以下のように設定します。
  • RCC
    以下のように設定します。
  • TIM14
    タイマ割り込みを使うのでActivateしておきます。

    MiddleWares
  • USB_DEVICE
    以下のように設定します。

あとはPA8をGPIO_Inputにしておしまいです。

こんな感じになります。

Clock configuration

Pinoutの設定をしてから開くと以下のようなダイアログが出てくるかと思うのでYesを押します。自動でエラーが起こらないように設定を変えてくれます。

エラーが起こらないようになのでメインのクロックなどが変な値になっていることがあります。そうなっていたら修正したい箇所をいじってからAlt+Fを押すともう一度自動修正してくれます。

Configration

まずは、PA8をプルアップしておきます。
GPIOの設定からできます。

TIM14の設定をします。
今回は1msごとにタイマ割り込みをしようと考えてるので、こんな感じに設定します。

割り込み許可をしておきます。

終わったら、Project→Generate CodeからIDEとしてTrueStudioを選択してOKを押します。

TruestudioのProjectが生成されるので、そのProjectを開きます。

TrueStudioでの操作

自動で生成されているSrc/main.cを開き、

タイマ割り込みをするため、/USER CODE BEGIN X/と/USER CODE END X/(Xには数字とかが入る)に以下のようなコードを書きます


/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
static volatile uint8_t interrupt;
/* USER CODE END PV */

/* USER CODE BEGIN 0 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
if (htim->Instance == TIM14) {
interrupt = 1;
}
}
/* USER CODE END 0 */

/* USER CODE BEGIN 1 */
interrupt = 0
/* USER CODE END 1 */

/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim14);
/* USER CODE END 2 */

ここからはマウスとキーボードで違います。
https://notes.iopush.net/stm32-custom-usb-hid-step-by-step-2/
https://damogranlabs.com/2018/02/stm32-usb-hid-mouse-keyboard/
をめちゃくちゃ参考にしているので分からなかったらそっちを見たほうが早いかもしれません。

マウス

ライブラリを読み込んだ時点でだいたい設定が終わっているのでほとんど操作はいりません。
今回はボタンを押したら(押している間)カーソルが右に動くやつを作っていきます。


/* USER CODE BEGIN 1 */
interrupt = 0;
struct mouseHID_t {
uint8_t buttons;
int8_t x;
int8_t y;
int8_t wheel;
};
struct mouseHID_t mouseHID;
mouseHID.buttons = 0;
mouseHID.x = 0;
mouseHID.y = 0;
mouseHID.wheel = 0;
/* USER CODE END 1 */

こんな感じで構造体を定義しておきます。
https://notes.iopush.net/stm32-custom-usb-hid-step-by-step-2/からの引用です。
この構造体に値を入れて、


USBD_HID_SendReport(&hUsbDeviceFS, &mouseHID, sizeof(struct mouseHID_t));

という関数を呼び出すと値が送られます。
じゃあどれにどんな値を入れるとどうなるんだという話なんですが、

  •  mouseHID.buttons
    ボタンの状態をビット単位で入力します。
    1になっていると押している扱いになります。
7 6 5 4 3 2 1 0
ホイールクリック 右クリック 左クリック

要するに、


mouseHID.buttons = 0b001; //左クリック
USBD_HID_SendReport(&hUsbDeviceFS, &mouseHID, sizeof(struct mouseHID_t));

と書くと左クリックしていることになります。

  • mouseHID.x , mouseHID.y
    これの値の相対座標の位置にカーソルが移動します。ベクトル的な感じです。int8_t(-127~127)の範囲であることに注意。
  • mouseHID.wheel
    正の値が入っていると、上方向にスクロールします。負の値だと逆です。やたらすごい速度が出ます。

あとはこんな感じに書いてあげればボタンを押している間カーソルが右に動いてくれるかと思います。


/* USER CODE BEGIN WHILE */
while (1)
{
while(interrupt == 0);
interrupt = 0;
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == 0){
mouseHID.x = 5;
}
USBD_HID_SendReport(&hUsbDeviceFS, &mouseHID, sizeof(struct mouseHID_t));
mouseHID.x = 0;
/* USER CODE END WHILE */

本来USBD_HID_SendReportの2つ目の引数にはuint8_tのものを入れないといけないんですが、int8_tを入れてしまっています。受け取った側がint8_tとして解釈するんですよね……動くのでおそらく大丈夫です。

 キーボード

キーボードはライブラリをいろいろ書き換えなきゃいけません。ここで注意なんですが、CubeMXでコードを再生成するとライブラリも再生成されます
要するにいじったところが全部戻されてしまうので注意してください。私は解決法が見つからなかったためライブラリを/Srcに避難させたうえで再生成されたものを消しています。解決法を知っている方がいたら教えていただきたいです。
ライブラリのうち書き換えないといけない部分はMiddlewares/ST/STM32_USB_Device_Library/Class/HIDの/Inc/usbd_hid.hと/Src/usbd_hid.cです。

usbd_hid.c

レポートディスクリプタを書き換えます。
HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE]を、


__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] __ALIGN_END ={
//45 bytes
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x06, // USAGE (Keyboard)
0xa1, 0x01, // COLLECTION (Application)
0x05, 0x07, // USAGE_PAGE (Keyboard)
0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)
0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x08, // REPORT_COUNT (8)
0x81, 0x02, // INPUT (Data,Var,Abs) //1 byte

0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x08, // REPORT_SIZE (8)
0x81, 0x03, // INPUT (Cnst,Var,Abs) //1 byte

0x95, 0x06, // REPORT_COUNT (6)
0x75, 0x08, // REPORT_SIZE (8)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x65, // LOGICAL_MAXIMUM (101)
0x05, 0x07, // USAGE_PAGE (Keyboard)
0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated))
0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application)
0x81, 0x00, // INPUT (Data,Ary,Abs) //6 bytes

0xc0 // END_COLLECTION
};

のように書き換えます。
https://damogranlabs.com/2018/02/stm32-usb-hid-mouse-keyboard/ から引用したものです。
キーボードなのにHID_MOUSE_ReportDescじゃ気持ち悪いと言われたらそうなんですが、ちょっと大変なので今回はそのまま使います。
次に、USBD_HID_CfgDescを書き換えます。 nInterfaceProtocolを1(keyboard)としてください。

usbd_hid.h

HID_EPIN_SIZEを0x08にしてください。 HID_MOUSE_REPORT_DESC_SIZEをレポートディスクリプタのbyte数と同じ値(今回は45)にしてください。
これで書き換えはおしまいです。

main.c


/* USER CODE BEGIN 1 */
interrupt = 0;
struct keyboardHID_t {
uint8_t modifiers;
uint8_t reserved;
uint8_t key[6];
};
struct keyboardHID_t keyboardHID;
keyboardHID.modifiers = 0;
keyboardHID.reserved = 0;
for(int i = 0 ;i < 6; i++){
keyboardHID.key[i] = 0;
}
/* USER CODE END 1 */

今度はこんな感じの構造体を定義します。
今回は分かりやすいですが、各変数について説明すると以下のようになります。

  • modifiers
    修飾キーの動作をビット単位で入力します。1にしていると押してることになります。
    GUIはWindowsだとWin、MacだとCommandになります。
7 6 5 4 3 2 1 0
右GUI 右Alt 右Shift 右Ctrl 左GUI 左Alt 左Shift 左Ctrl
  • reserved
    予約されている部分です。要するに使いません。
  • key[6]
    キーコードが6つまで入れられる配列です。
    キーに割り当てられているコードを入れると押していることになります。つまり、通常のキーの同時押しは6つが限界です。
    キーコードは以下のサイトを参考にするといいです。
    http://www2d.biglobe.ne.jp/~msyk/keyboard/layout/usbkeycode.html
    Usage IDがコードになります。Aだったら0x04といった具合です。

あとはこんな具合に書けば、ボタンを押すごとにasdfghが表示されるかと思います。


/* USER CODE BEGIN WHILE */
while (1)
{
while(interrupt == 0);
interrupt = 0;
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_8) == 0){
keyboardHID.key[0] = 0x04; //a
keyboardHID.key[1] = 0x16; //s
keyboardHID.key[2] = 0x07; //d
keyboardHID.key[3] = 0x09; //f
keyboardHID.key[4] = 0x0A; //g
keyboardHID.key[5] = 0x0B; //h
}
USBD_HID_SendReport(&hUsbDeviceFS, &keyboardHID, sizeof(struct keyboardHID_t));
for(int i = 0 ;i < 6; i++){
keyboardHID.key[i] = 0;
}
/* USER CODE END WHILE */

これでキーボードも完成です。

まとめ

マウスとキーボード(という名の1ボタンの何か)ができました。ハードと操作するソフトウェアの組み合わせで様々なことができるので、ぜひ作ってみてください!

物理のすヽめ

この記事はrogy Advent Calendar 201819日目です。

みなさんこんばんは,17年度入学のおがたです。翌日提出の実験レポに追われていたら投稿日当日の23時半でした。

さて、rogyを構成しているメンバーは大多数が4類と5類、制御や機械、電電をはじめとした工学系の人たちですが、一部理学系の人たちも所属しています。僕も1類出身の物理学系所属、つまるところ理学の人間です。工学やりたい(切実)

ということで今回は僕が物理学系がどのようなところなのかざっくりと紹介していきたいと思います。 “物理のすヽめ” の続きを読む

車のはなし

はじめまして、16のあおのりです。
この記事は、rogy Advent Calendar 2018の18日目の記事です。
(ごめんなさい、間に合いませんでした…)
皆さんは、自動車の運転はされるでしょうか。
私は実家通いなので、実家の車を利用してちょくちょく出かけています。
その自動車ですが、ボンネットを開ければその中にはエンジンだけでなく、
多くのセンサが搭載されていることはご存知でしょうか。
ただアクセルを踏んで加速するにも、様々なセンサの情報を得て、エンジンを制御しているというわけです。
その他、運転に必要な情報を提供する速度計や回転数計、距離計に水温計…とそれらを表示するために自動車の内部では様々なセンシングを行っています。
これらを利用して電子工作をしてみようと思い、距離計を作ってみました。

自動車の距離計は、トランスミッション等から発生する回転信号を取得し、その信号のパルス数を計数することで距離を算出しています。
普通、1km走行毎に637*n(nは自然数)回パルスが発生するようになっているらしく、これまで調べた限りだと、ト〇タやホ〇ダ、〇菱の乗用車はn=4の車両が多いようです。
自動車は時速60kmで分速1km、これを基準に考えれば大体40Hzのパルス波が出ていることになります。
パルス波の振幅などは整備解説書が手に入れば載っているのですが、今回の製作対象車の情報は手に入らなかったので、20km/h、30km/h、40km/h時の車速パルスを観測しました。
ECUからメータに伸びる配線から取得が可能です。

 

 

 

 

 

20km/h時の車速パルス

 

 

 

 

 

30km/h時の車速パルス

 

 

 

 

 

40km/h時の車速パルス

あとは、1パルス毎に車が進む距離を大体見積もって、プログラムします。

 

 

 

 

 

こちらはテスト用に作った回路です。
7セグで4桁表示。実際の自動車が0.1km単位なので、0.01km単位まで表示できるように設定しました。
あとはキロポストがあって直線が長い道路で調整して製作完了です。
最終的には東名高速でキロポスト基準40km走行時に誤差0.1kmのところまで調整できました。
これ自体は大した作業では無いのですが、運転しながら計測や調整するのは不可能なので、2人で行いました。

とまあ、自動車を利用した電子工作は対象が自動車なので、計測やテストが少々面倒なところがありますが、
目に見えていない情報を可視化することも出来るので楽しいと思います。
(スロットルの開き具合、エンジン油温など)

最後に、自動車の電気配線を誤って接続すると、正常な運転ができなくなり、エンジンが始動しなくなるなどの問題を起こす場合があるため、十分に気を付けて行うようにしてください。
では。

 

 

 

 

 

上手くいったので電池含め一枚の基板にまとめました。

ロリノススメ

初めまして、17のバンル( @17_bnr )です。

この記事はrogy Advent Calendar 2018の17日目になってます。

さて、みなさんロリは好きですか? 僕は好きです。

ロリとはもちろんエレクトニクスとエレクトシティを勉強・研究するところ、つまり工学院電気電子系です!!

 

電気電子系では主に5分野について研究しています。

このページを見てもらうと5分野が詳細にわかると思いますが、ざっくりいうと

回路:いろんな素子を使っていろんなものを作る研究

波動・光および通信:電磁波の利用の仕方を研究

デバイス:新しい電子部品の研究

材料・物性:新しい物性を持つ材料の開発、利用の研究

電力・エネルギー:電気エネルギーとほかのエネルギーの変換を研究

 

ということで、

可視光で抵抗値が変わる材料を用いた可視光通信による、スイッチング電子デバイスより電力機器を動かす回路を作りました。

 

回路図です。

動作の流れとしては4.5Vで流れるLEDが光るとフォトICの抵抗が下がるので、R1にかかる電圧が上がるので、FETのゲートがONになります。

そうすると無安定バイブレーターが作動し、電流が交互にAIN1とAIN2に入ります。

最後に、モータードライバーに信号が入り、モーターが動きます。

 

ということで動かした動画です。

容量の関係で短い動画しかアップロードできませんでしたが長めの動画はツイッターにあげたいと思います。

そろそろ系所属が始まると思うのでぜひロリ系へ

猫でもできるsomething

この記事は rogy Advent Calendar 2018 16日目の記事です。

初めまして。猫(=・ω・=)になりたかったふらいです。普段は2匹の猫^ↀᴥↀ^と暮らしています。

簡単な自己紹介をすると、今年の6月までMaquinistaでNHKロボコンをやっていました。
今年のロボコンは(猫∩(^ω^∩)でもできる!?)4足歩行が課題として課せられていて後輩たちは頑張っているようです。
なおMaquinistaは12/23にADCの担当になっているのでお楽しみに!

自分はMaquinistaにいた時ははロ技研での活動はロボコンしかしてなかったのですが、引退したのでやることがなくなりました。(卒論を書け!)

今回はサーバーを立てるということに挑戦してみたので、そのことについて書こうと思います。

この記事は

  • サーバーっていう単語は聞いたことあるけどなんだかよくわからない
  • 無料でサーバー構築して遊んでみたい

という猫(^・o・^)ノ”向けに初心者が書いた記事ですので、ご容赦下さい。

なおタイトルに「猫(ฅ^・ω・^ ฅ)でもできる」とありますが、これは登録する際に何も考えなかったのでこうなってしまいましたが

  • お金がない猫(=ΦÅΦ=)でもできる
  • 専門知識がない猫(=^・^=)でもできる

という意味ということにしておきます。

サーバーとは

Wikipediaで調べてみます。

サーバーあるいはサーバ(英: server)は、サービスを提供するコンピュータである。

サービスを提供すれば、サーバーということです。英語訳しただけですね笑。

ではここでいうサービスとは何でしょうか。身近な例で考えてみます。

今あなたは、この記事をスマホで読んでいるとしましょう。(PCかもしれませんが)
実はこの記事はロ技研のサーバーに保存されています。
この記事を表示するために、あなたのスマホはロ技研のサーバーにこの記事を欲しいとお願いします(リクエスト)。
そのリクエストを受け取ったロ技研のサーバーはこの記事を送ってくれて(リスポンス)、それをスマホが表示してくれるのであなたは今この記事を読めています。

ここで既にサーバーという単語を使ってしまいましたが、Webページを提供してくれているのでサーバー、あなたのスマホはサーバーにお願いしてWebページをもらうのでクライアントと呼ばれます。

ここではWebサーバーを一例に挙げましたが、その他にもメールサービスを提供してくれるメールサーバー等、色々なサーバーが存在します。

どうやってサーバーを作るの?

サーバーと言うと、もしかしたら

こういうすごく強そうなやつを想像するかもしれません。(ちなみにこれはGoogleのデータセンターです。https://www.google.com/about/datacenters/gallery

しかし、上で説明したようにサービスを提供するコンピューターはサーバーです。自分のパソコンだってサービスを提供すればサーバーになれます。

自分のパソコンで簡単なWebサーバー

Node.jsを使った例を示します。Node.jsについてはここで説明しませんが、調べればいっぱい記事出てくるので調べてみて下さい。

const http = require('http');
const server = http.createServer(
  (request, response) => {
    response.write('Hello World!!');
    response.end();
  }
).listen(3000);

ただリクエストが来たらHello Worldとリスポンスを返すだけですが、これだけでできます。すごいニャン =^∇^*=
これを起動してブラウザでlocalhost:3000と入力すればHello Worldと表示されると思います。

今回はサーバーとクライアントが同一のパソコンなので、localhostと打つだけで自分自身が立ち上げてるサービスにアクセスできます。後ろについてる3000はポートと呼ばれる番号です。ポートがあることで、1つのサーバーで複数のサービスを動かしていても混ざってしまうことはありません。実はWebサーバーは80番ポートというお約束があり、普段はWebページにアクセスする時に毎回:80とは入力しませんが、サーバーの80番ポートにリクエストしています。

パソコンで立ち上げたWebページにスマホからアクセスしてみる

まずはサーバーもクライアントも同じネットワーク内にいる状態で試してみます。
つまりパソコンもスマホも家のWifiにつなげておけばOKです。
先程はlocalhostでアクセスしてましたが、今回はクライアントはサーバーとは別なのでそうはいきません。
ここでスマホからパソコンにアクセスするためにはパソコンのIPアドレスというものが必要になります。
ではパソコンのIPアドレスを調べてみましょう
ターミナルなりコマンドプロンプトなりを立ち上げて

ipconfig

と入力します。
するとズラーッと情報が表示されると思います。
その中で

IPv4 Address. . . . . . . . . . . : 192.168.1.8

と書かれた部分があると思います。私のパソコンはIPアドレスが192.168.1.8だということがわかりました。

あともう一つだけやることがあります。firewallをオフにします。
普段は外部から悪さをされないようにfirewall君が守ってくれてますが、今回は外からアクセスしたいのでオフにします。用が済んだらオンに戻しておきましょう。

Windowsの場合はこれでOK!
では、スマホのブラウザに

192.168.1.8:3000

と入力してみます。

やったニャン V(=^・ω・^=)v

家の外からでもアクセスしたい

今やったのは、同じネットワーク内にいるサーバーにアクセスする例でした。
つまり、家の外からモバイルネットワークを通してアクセスすることはできません。

それを実現するためには

  • 自宅のルーターのグローバルIPアドレスを調べる。
  • ルーターでサーバーになってるパソコンへポートフォワーディングの設定をする。

ことでできますが、話が長くなるので今回は省略します。
やってみたい方はポートフォワーディング等で検索してみて下さい。

サーバーを借りる

ここまでは自分のパソコンをサーバーにするお話をしてきました。
サーバーに求められることはリクエストが来たらリスポンスを返すことでした。
つまりサーバーは常時稼働しててインターネットに接続されていることが望まれます。
ですが、自分のパソコンを常時起動しっぱなしにするというのはあまりしたくないですよね。
そこでサーバーを借りるというという選択肢が出てきます。
つまり、どこかで動いているコンピューターを使わせてもらうということです。
でも借りるからにはお金がかかるんじゃない?と思いますよね。
そこで、今回は無料で借りられるサーバーを紹介します。

GCP(Google Cloud Platform)

Googleが提供するクラウドサービスです。仮想マシンを動かすことはもちろん、色々なサービスがあります。
https://console.cloud.google.com/getting-started?hl=ja
ここにアクセスするとこんな事が書いてあります。

色々制約はありますが、登録すると最初に$300分のクレジットをもらえて、1年間はもらったクレジットを使って色々なサービスを試すことができます。
一年間しかありませんが、サーバー立てて遊んでみたいという猫(=^ ڡ ^=)には十分ですね!

仮想マシンの設定などはここでは省略しますが、こちらも調べると丁寧に解説してくれてる方がいます。
自分はこのページとかを参考にさせてもらいました。

ネームサーバー

IPアドレスという話が先程もでてきました。
インターネットに繋がっているデバイスには全てIPアドレスが割り振られるので、それを使って特定のサーバーにアクセスできるというものでした。
ですが、皆さん普段Webページを見る時にIPアドレスを入力しませんよね。なんででしょう?
例えば昨日のADCの記事は https://blog.rogiken.org/blog/2018/12/16/adcなのでadcを作った と入力すればアクセスできます。IPアドレスはどこにも見つかりません。これを実現するためにはドメインを取得する必要があります。
この場合ドメインはblog.rogiken.orgにあたります。
実はネームサーバーというこれまたサーバーが世の中には存在して、blog.rogiken.orgと言われたらIPアドレスはxxx.xx.xx.xxxだよと返してくれるのです。つまり https://blog.rogiken.org/blog/2018/12/16/adcなのでadcを作った とURLを入力してアクセスすると一度ネームサーバーがIPアドレスを教えてくれて、最終的にはやっぱりIPアドレスを使ってロ技研のサーバーにアクセスしてます。d(=^・ω・^=)b

ドメインを取得

それではいつまでも自分のサーバーにIPアドレス直入力でアクセスするのもかっこ悪いので自分用のドメインを取得しましょう!
ですが、これも普通はお金がかかります。
今回はもちろんドメインも無料で取得していきます。
そこでこれです。
https://www.freenom.com/ja/index.html

freenomでは無料で自分用のドメインを取得することができます。やったニャン Σ(^._.^=ノ)ノ
ですが、無料であることにはもちろん理由があります。
freenomで無料で取得できるドメインは

.tk (トケラウ)
.ml (マリ)
.ga (ガボン)
.cf (中央アフリカ)
.gq (赤道ギニア)

と、あまり馴染みのない国に割り振られているドメインに限られます。.comとか.jpなどよく見るやつは無料ではゲットできません。
でもこれも遊びでドメイン欲しい程度なら全然ありだと思って私は使ってます。

SSL

こういう表示に出会うことがたまにあります。

これはサーバーとの通信が暗号化されていない場合に表示されることがあります。
Webサーバーを立てて何もしないと基本的に通信は暗号化されていません。暗号化にはSSLというプロトコルが使われていますが、これを使うための証明書を取るのにこれまたお金がかかります。
そこでSSLの証明書も無料で取ろうということをやっていきます。ฅ(≚ᄌ≚)
https://letsencrypt.org/

Let’s Encryptを利用することで無料でSSLの証明書を取得することができます。
https://letsencrypt.jp/usage/にあるようにcertbotというのを使うと簡単です。

certbotを使うとDNS TXT recordというのを吐き出してくれます。これをコピーしてFreenomのドメイン管理ページに行きTXTレコードを追加します。

****mKmy5****と書かれている部分です。
ちなみに35.***.*7.120は私のサーバーのIPアドレスです。

freenomの設定ができたらnginxにも証明書とキーファイルを指定してあげる必要があります。

nginxって?

こことか参考になるかな。調べてみても「Apacheとの比較」みたいのばっかでてきて初心者には優しくない記事が多い気がします。

nginxは一言でいうとWebサーバーです。例えば

https://luciole.gq/about.html

にアクセスすると私のサーバー上にある about.html が表示されます。これをやってくれてるのがnginxです。最初にやった例だとlocalhost:3000のあとに何をつけてもHello World!! しか返って来ませんが、それでは到底Webサーバーとは呼び難いですよね。

またnginxは単純なWebサーバーとしての機能の他にのリバースプロキシやバーチャルホストの機能もあります。nginxがリバースプロキシの役割をしてくれることによって、サーバーと外部の間でSSLで暗号化された通信が可能になっています。

バーチャルホストとは
app.luciole.gq
wiki.luciole.gq
など、複数のドメインを1つのサーバーで扱う技術です。いずれも同じIPアドレスですが、バーチャルホストによって別のものが返ってきます。

サーバーで何してるの?

ここまでずっとサーバー構築のお話でしたが、やっと中身についてです。

上で書いたように私のサーバーはluciole.gq です。

ここで動いているのは

です。blogは書くつもりがないので立ち上げてないです。

wikiは自分用のメモや記録等に毎日役立ってます。

Node.jsのアプリはWebSocketを使ってなんか遊んでみようということで、本当は今日までにもう少し面白いものを作る予定でしたが、今はただ足し算するだけのが動いてます。これはサーバーがないとできないことをやろうと思って、今アクセスしている人全員の数字を足した結果が表示されてます。まあこれができればチャットとかも同じ要領で作れるねって感じです。

twitter bot は今の所、毎日猫^ↀᴥↀ^をつぶやくだけです。こちらももう少し機能を追加したいなーと思ってます。暇になったらやろうと思います。

 

以上長くなりましたが、ふらいでした。(=^・ω・^=)丿

AdCなのでADCを作った

こんにちは16のマッキーです。
この記事はrogy Advent Calendar 2018の15日の記事です。

タイトルの通りですが、AdC(Advent Calendar)ということでADC(Analog Digital Converter)を作ってみました。

ADCはマイコンとかを使う人はおなじみの機能だったりすると思うのですが、それを使うのではなく自分で作ろうといったところです。

そんな感じで作ったものを紹介します。

 

ADCの概要についてはここ → https://www.rohm.co.jp/electronics-basics/ad-converters/ad_what1 などを見ると以下の説明もだいたいわかると思います。

今回はフラッシュ型と逐次比較型のADCを作りました。とりあえず動作すればいいかなということで性能は特に気にして作ってませんが、最終的にAD変換したものをLEDにレベルメーターのように出力できればいいかなと思ったのでどちらも5bitのADCにしました。

フラッシュ型


回路自体もコンパレータを大量に並べただけなのでシンプルでいい感じですね。

逐次比較型


本当はサンプルホールド回路が入るのですが、時間が足りなかったのでついてません。ただ人がLEDのメーターを見る分には問題なさそうです。(動画は1Hzの三角波)

二分探索してる様子です。青い信号(DACの出力)が少しずつ黄色い入力電圧に近づいてます。

比較部分のロジックはFPGAを使いました。
またそのためのHDLのコードをMATLABのHDL Coderというツールを使ってみました。このため、コードは書かずにブロックをごちゃごちゃいじってHDLを生成できました。

↑Simulink上の回路の雰囲気

FPAG周りの回路はユニバーサル基板上に作りました。(こんな感じの配線は初めてやったけど意外とできることが分かった)

まとめ

  • AdCでADC作ったっていうのができてよかった(これが一番やりたかった)
  • AD変換ができたっぽかったのでよかった
  • なんかFPGA使いたかったので使えてよかった
  • MATLAB最高だった
  • はんだ付け楽しかった
  • 他の変換方式もやろうと思ってたけど時間が足りなくて悲しかった