2025年6月
1234567
891011121314
15161718192021
22232425262728
2930  

検索・リンク

高専プロコン2018/校内審査

今年度の高専プロコンの応募時期を控え、4EI前期の創造工学演習で作品づくりや、卒業研究のグループからの参加希望の資料をみて、今年度の学内審査を行いました。

課題部門

サバ×サバ(,指導:村田)

  • 村田研5年からエントリー
  • スマホのカメラ・音楽・SNS情報から好みに応じて旅行コースを作る。

Cloudraw(石井,寺本,兵田,鷲田,指導:斉藤)

  • 見上げた空に仮想的な雲を作り、空にお絵かきする。
  • 提出資料の完成度をあげる必要あり。

自由部門

chair CAM(京藤,玉村,辻野,中村,幅岸,木村,指導:高久)

  • お店の空き情報をLINE botで返答するシステム。
  • 店内に設置するセンサー系の具体性の追記が必要

ポーズでプログラミング(大瀬,奥村,道関,向井,村上,指導:小松)

  • Kinectでポーズを認識させ、そのポーズを並べることでプログラミング
  • プログラミングで動くオブジェクトがもうひと工夫ほしい。

競技部門

(永田,谷川,河野,指導:村田)

  • 具体的な計算方法の説明が不足

H30年度秋季・情報処理技術者試験

情報処理技術者試験

情報処理技術者試験開催の案内が届きました。

試験実施日 平成30年10月21日(日)
受験手数料 5,700円
試験区分 基本情報処理技術者試験(FE)
応用情報処理技術者試験(AP),ほか
願書受付期間 個人申込:7月5日(木)
インターネット申込みができます。

ITパスポート試験

ITパスポート試験は、コンピュータを用いたCBT方式で、随時申込ができます。
情報処理技術者試験の中で、初心者向けの試験ですので、ぜひともトライしてみましょう。

高専ライブ:2018年5月20日(第575回)

  • 三国まつりの話
  • 暑い日が続いた話
  • サイエンス共和国 第30回「iPhoneで儲ける技術者の話 その3 iPhoneに使われる部材の話」
  • 電気自動車の話

担当:西野(2E,MC)中島(4C,MIX),椎林(2B)、西(教員)

D/A変換回路とA/D変換回路

小型コンピュータを使った制御では、外部回路に指定した電圧を出力(D/A変換)したり、外部の電圧を入力(A/D変換)したりすることが多い。以下にその為の回路と動作について説明する。

D/A変換回路

ラダー抵抗回路によるD/A変換の仕組みを引用

このような回路で、D0,D1,D2 は、デジタル値の0=0[V] , 1=5[V] であった場合、Output 部分の電圧は、(D0,D1,D2)の値が、(0,0,0),(0,0,1),…(1,1,1)と変化するにつれ、5/8[V]づつ増え、(1,1,1)で 5*(7/8)=4.4[V]に近づいていく。Output が出力によって電圧が変化しないように、アンプで増幅する。

DCモータをアナログ量で制御しないこと

このように、電圧をコンピュータから制御するようになると、ロボットで模型用の直流モータの回転速度をこれで制御したい…と考えるかもしれない。
しかし、直流モータは、コイル(電磁石)は単なる導線である。例えば、小さい電流で遅い速度でモータを回転させようとすると、小さい電圧でも導線(抵抗はほぼ0[Ω])には大量の電流が流れる。


PWM変調

こういう場合には、PWM変調(Pulse Width Modulation) を行う。

このような波形であれば、低速度でも高トルクが得られる。

A/D変換回路

D/A変換とは逆に、アナログ量をデジタル値に変換するには、どのようにするか?

このような場合には、A/D変換回路を用いる。一般的な回路では、以下のような逐次比較型A/D変換を用いる。

この回路では、変換開始と共に入力値をサンプル保持回路でアナログ量を保存する。
その後、Registerの中のデジタル値を、D/A 変換回路でアナログ量に変換した結果を、比較器(Comparator)でどちらが大きいか判断し、その結果に応じて2分探索法とかハイアンドローの方式のように、比較を繰り返しながらデジタル値を入力値に近づけていく。

ハイアンドロー(数あてゲーム)

数あてゲームで、デタラメな0〜127までの整数を決めて、ヒントを元にその数字を当てる。回答者は、数字を伝えると、決めた数よりHighかLowのヒントをもらえる。
最も速い回答方法は…

例えば決めた数が55だとすると
・64 - Low   0------  0..63
・32 - High  01----- 32..63
・48 - High  011---- 48..63
・56 - Low   0110--- 48..55
・52 - High  01101-- 52..55
・54 - High  011011- 54..55
・55 - Bingo 0110111 55確定
どんな値でも、7回(27=127)までで当てることができる。

入出力と変数・レポートNo.2

以下のような、位相が 0°,15°,30°,45° ずれた sin(x) のグラフを描くためのプログラムを作りたい。

Excel で式入力すりゃいいじゃん…というのはナシ。

0 =A1+15 =B1+15
=A1+5 =sin((A2+B1)/180*3.141592) =sin((A2+C1)/180*3.141592)

// 以下のプログラムは、初心者なら書きそうなボケが沢山入ってます。
// 正しく直してください。
#include <stdio.h>

#define PI = 3.1415926535 ;
int th ;

void phase( int x ) {
    printf( "%d" , x ) ;
    // 位相を0度から45度まで15度ずつ変化させる
    for( th = 0 ; th <= 45 ; th += 15 ) {
        printf( " %d" , sin( (x + th) / 180 * PI ) ) ;
    }
    printf( "¥n" ) ;
}

int main() {
    // 角度を 0..360度 の範囲で表示
    for( th = 0 ; th != 360 ; th += 5 ) {
        phase( th ) ;
    }
    return 0 ;
}

このプログラムを正しく修正し、Excel に値を取り込んで、上図に示すようなグラフにしてください。

レポートでは、プログラムリスト、プログラムの説明、実行結果、感想・考察を記載し提出してください。

mallocとfree

前回の講義での、「長いかもしれない名前」を覚える処理は、最悪の場合をどう扱うかでメモリのムダが発生する。
ここで、前回講義で説明した、大きな配列を少しづつ分けて使う処理を考える。

大きな配列を少しづつ貸し出す処理

char str[ 10000 ] ;
char* sp = str ;
char entry( char* s ) {
   char* ret = sp ;
   strcpy( sp , s ) ;
   sp += strlen( s ) + 1 ;
   return ret ;
}
int main() {
   char* names[ 10 ] ;
   names[ 0 ] = entry( "saitoh" ) ;
   names[ 1 ] = entry( "tomoko" ) ;
   return 0 ;
}
// str[] s a i t o h ¥0 t o m o k o ¥0
//       ↑             ↑
//     names[0]        names[1]

このプログラムでは、貸し出す度に、sp のポインタを後ろに移動していく。

スタック

この貸し出す度に、末尾の場所をずらす方式にスタックがある。

int stack[ 100 ] ;
int* sp = stack ;
void push( int x ) {
   *sp = x ;    // 1行で書くなら
   sp++ ;       // *sp++ = x ;
}
int pop() {
   sp-- ;
   return *sp ; // return *(--sp) ;
}
int main() {
   push( 1 ) ;
   push( 2 ) ;
   push( 3 ) ;
   printf( "%d¥n" , pop() ) ;
   printf( "%d¥n" , pop() ) ;
   printf( "%d¥n" , pop() ) ;
   return 0 ;
}


スタックは、最後に保存したデータを最初に取り出せる(Last In First Out)から、LIFO とも呼ばれる。
このデータ管理方法は、最後に呼び出した関数が最初に終了することから、関数の戻り番地の保存や、最後に確保した局所変数が最初に不要となることから、局所変数の管理に利用されている。

スタック上の動的メモリ確保 alloca

最初のプログラム例のような方法で、スタック上にメモリを確保する関数として、alloca() がある。

// C言語では、配列サイズに変数を使えない。
int size = ... ;
int array[ size ] ;

// これを alloca で書くと...
int size = ... ;
int* array ;
array = (int*)alloca( sizeof( int ) * size ) ;
if ( array != NULL ) { // スタック溢れはNULLで検知できないか...
   :
   // array[]を使った処理
   :
}

ただし、alloca はスタック領域を使用するため、数MBといった巨大なデータを確保するのには使えない。
この領域は、スタックのように末尾だけを覚えておけばいいので、管理が簡単である。一方で、関数の局所変数として確保して、「この場所を使ってこの計算してね」的な使い方をしなければならない。「この場所を返すから後は自由に使って」的な使い方はできない。

malloc()とfree()

alloca を使うような処理は、スタックのように「最後に確保したものが最初に不要となる」という状況でしか使えない。
確保した領域が不要となる順序が判らない場合には、malloc() を使う必要がある。

ポインタ = malloc( 確保するbyte数 ) ;
   メモリ不足で malloc に失敗したら NULL を返す。
free( ポインタ ) ;
   確保したメモリ領域を解放する。
   解放されたメモリは、mallocで再利用してくれる。

最初に説明した、入力された文字を次々と保存する処理を malloc で記述すると以下のようになる。

char* names[ 100 ] ;
char buff[ 1000 ] ;
int size ;

// データ入力
for( size = 0 ; size < 100 ; size++ ) {
   fgets( buff , sizeof( buff ) , stdin ) ;
   names[ size ] = (char*)malloc( strlen( buff ) + 1 ) ;
   if ( names[ size ] == NULL )
      break ;
   strcpy( names[ size ] , buff ) ;
}
// データを使う処理
for( int i = 0 ; i < size ; i++ ) {
   // names[] を使う処理...
   printf( "%s" , names[ i ] ) ;
}
// データ領域をfreeで解放
for( int i = 0 ; i < size ; i++ )
   free( names[ i ] ) ;

malloc() で確保したメモリ領域は、free() で解放しない場合、メモリ領域は使われないムダな領域が蓄積して、最終的にはメモリ不足で止まるかもしれない。また、大量のムダなメモリ領域ができると、仮想メモリが使われ処理速度の低下が発生するかもしれない。
このような、解放されないメモリ領域が発生することは、メモリーリークと呼ばれる。

確保したメモリは、プロセス毎に管理されているので、長時間動きっぱなしのプログラムでメモリリークが発生すると問題となる。
ただし、プロセス終了と共に確保されているメモリはOSに回収されるので、処理が終わってすぐにプロセス自体も終わるのであれば、free() を書き忘れても問題は発生しない。

高専ライブ:2018年5月13日(第574回)

  • キャンパスウォークの話
  • 母の日の話
  • サイエンス共和国 第29回「iPhoneで儲ける技術者の話 その2 iPhoneサプライヤーの話」
  • ペットの話

担当:越後(2E,MC)、坂田(2C,MIX)、西島(4EI)、中村(教員)

php5からphp7に移行

自宅サーバにて、毎朝 apache2 が止まる症状が続いた。調べてみると、php5 との相性が悪いみたい。

んで、当然ながら、他の管理しているサーバも動かないものが出てきた。ということで、職場の関連サーバも php7 に移行作業を行った。
Ubuntu(trusty) は、PHP5 で問題なし。

moodleサーバは、切り替えたら色々と表示されたな。

切り替えたら、アップロードできるファイルサイズ上限が2MBに減ってしまっていた。

(( /etc/php/7.0/apache2/php.ini ))
upload_max_filesize = 400M
post_max_size = 450M
memory_limit = 500M
# upload_max_filesize < post_max_size < memory_limit で要設定

(( apache 再起動 ))
$ sudo /etc/init.d/apache2 restart

キャンパスウォークのウエルカムボード

キャンパスウォーク2018

今日は、中学生や近隣の方を対象としたキャンパスウォークを開催中です。
電子情報の展示風景。



システム

最新の投稿(電子情報)

アーカイブ

カテゴリー