04/22/2017

PIRで検知しVC0706で撮影、Ethernet ShieldのmicroSDに記録

Pirethernet Arduino UNO にEthernet Shield と シールドボードに小型のブレッドボードを貼り付けた。
Fritzingで絵を描いてみると・・・左図のようになる。
一番下の階層は、Arduino UNOで、第二階層がEthernet Shield、その上の第三階層に自作のシールドボードを載せ小型のブレッドボードを装着して、そこに部品を配置した。
前回のようなSDカードシールドでは、ブレッドボードが小さいとそこに部品を置ききれないので、Ethernetシールドを使えないかと調べ、可能だという事が分かったので、トライしてみた。


Dsc_0005Dscf9618 Dscf9621 Ethernet Shieldは、サードパーティ製のもので(写真にあるものはKeystudio製だが、他のメーカー製、例えば「HiLetgo W5100 Ethernet Shield
」等でも稼働した)、ただしMACアドレスのラベル添付も無かった。未だ Ethernet の接続は行っていないが、このShield に装備されている microSDカード装置部は、写真やFritzing にあるような Pin接続で問題なく使う事が出来た。

使用したMicroSD Cardは、Amazonで2GB⑩のものを購入し、「
SD Formatter」でフォーマットして使用。

また、ArduinoのSketchは、下記のようになった。

尚、マイコンボードに書き込み時、幾つかのWarningメッセージは出るが、稼働している。

システムが稼働し、セットアップが終了した後
・PIRが検知するまでの間、LEDランプ1を0.3秒間隔で点滅させて、システムが稼働している事が分かるようにした。
・PIRがものの動きを検知すると、LEDランプ1が点灯し、ブザーを1.5秒間鳴らし、その後写真を撮影する。
・撮影した写真をmicroSDカードに記録中は、別のLEDランプ2を点灯させる。
・SDカードへの記録が終われば
  LEDランプ2は消灯し、
  PIR検知中を示すLEDランプ1は点滅状態になる。

詳細は、後ほどここに記載するが、記載している時間が今は無いので、今日はここまで・・・

/**
 * VC0706 Camera Module Arduino Compatible:
 *  + cvbs: N/A
 *  + 5V: connected to arduino => pin 5V0
 *  + TX (OUT): connected to the RX (IN) of arduino => pin 2
 *  + RX (IN): connected to the TX (OUT) of arduino => pin 3
 *  + GND: connected to the GND
 *  set the serial monitor 38400bps when use it
 *  PIR sensor: connected to arduino => pin 6 
 */

#include <SoftwareSerial.h>
#include <SPI.h>
#include <SD.h>
#include <JPEGCamera.h>

const int chipSelect = 4;
int pirPin     =  6;  // PIR sensor
int pirState =  LOW;  // states of PIR at the initial
int buzzerPin  =  5;
int ledPin1    =  8;  // LED shows Ready(flashing) or Detected(lighting)
int ledPin2    =  7;  // LED shows SD card writing(lighting) or not

File testFile;
SoftwareSerial s(2, 3);
JPEGCamera cam(s);
char filename[15];
int num = 0;
int numOfBytes;

int photoSize = 1; // 0 -> 160x120 / 1 -> 320x240 / 2-> 640x480
unsigned long mainStartTime, mainEndTime, startTime, endTime;

void setup()
{
//activate 5V for the SD Card shield
  Serial.begin(38400);
  Serial.println("Start of SPY Camera SetUp");
  pinMode(  pirPin,  INPUT); 
  pinMode( ledPin1, OUTPUT); 
  pinMode( ledPin2, OUTPUT); 
  pinMode(buzzerPin,OUTPUT);  
  digitalWrite( ledPin1, LOW);       // LED:OFF
  digitalWrite( ledPin2, LOW);       // LED:OFF
  
  Serial.begin(38400);
// Wait for the serial port to be opened
   while (!Serial) delay(25);
 
//check SD card
  while (!SD.begin(chipSelect))
    {
      Serial.println("Error: SD initialization failed. Is SD card in the card folder?");
    }
      Serial.println("Info: SD Initialization complete,");

// Serial port connected to the cam
    s.begin(115200); //for VC0706 cam
    delay(50);

    Serial.println("Info: Reseting cam...");
// reset cam and wait.
    cam.reset();
    delay(3000);

    Serial.println("Info: Changing baud rate...");
// change baud rate to work at 3.3v
    cam.chBaudRate(2);// 0 -> 9600 / 1 -> 19200 / 2 ->  38400 / 3 -> 57600 / 4 -> 115200
    delay(50);
  
//change serial to match new camera baud rate
    s.end();
    s.begin(38400);
    delay(50);

  Serial.println("Info: Changing picture size...");
//change picture size
  cam.chPictureSize(photoSize);
  delay(50);

  Serial.println("Info: getting last pic num for the created files...");
  num = getNewSDFileNum();
  Serial.println("Info: Setup is DONE!");
}

void loop()
{
  while(digitalRead(pirPin) == LOW )
  {
    digitalWrite(  ledPin1, HIGH);
    delay(300);
    digitalWrite(  ledPin1, LOW);
    delay(300);
  }

  pirState = digitalRead(pirPin);   // read the state of PIR sensor
  if (pirState == HIGH) {           // detected => "HIGH", if not-detected => "LOW"
                                    // Detected!
   digitalWrite(  ledPin1, HIGH);   // LED :ON
   digitalWrite(buzzerPin, HIGH);   // Warnig Buzzer ON   
   Serial.println("Some movements were detected!");
   delay(1500);
   digitalWrite(  ledPin1, LOW);    // LED:OFF 
   digitalWrite(buzzerPin, LOW);    // Buzzer OFF  
   takePic();
  }
}

void takePic()
{
  Serial.println("Info: Preparing to take new photo.");

// must call stopPictures before a new photo is taken.
  cam.stopPictures();
  delay(50);

// take photo
  cam.takePicture();
  delay(50);

  num++;
  sprintf(filename, "PIC_%i.JPG", num);

  if (SD.exists(filename)) {
    SD.remove(filename);
  }

// Create file
  digitalWrite( ledPin2, HIGH);     // LED :ON 
  testFile = SD.open(filename, FILE_WRITE);

//save to file
    Serial.print("Info: Saving photo to SD: ");
    Serial.println(filename);
    numOfBytes = cam.readData(testFile);
    Serial.print("Info: Bytes for photo: ");
    Serial.println(numOfBytes);

//must close file to finish writing.
    testFile.close();
    digitalWrite( ledPin2,  LOW);     // LED:OFF
    Serial.println("Info: saved picture that detected!");
}

int getNewSDFileNum() {
  File root = SD.open("/");
  int n = getFileLastNumForDirectory(root);
  root.close();

  return n > 0 ? n : 0;
}

int getFileLastNumForDirectory(File dir) {
  int n = 0;
  int fn = 0;

  while (true) {
    File entry =  dir.openNextFile();

    if (!entry) {

// no more files
      break;
    }

    fn = 0;

    if (entry.isDirectory()) {
      //fn = prepareFileLastNumForDirectory(entry);//no need to be recursively
    }
    else {
      String name = String(entry.name());

      if (name.startsWith("PIC_") && name.endsWith(".JPG")) {
        int pos = name.indexOf(".JPG");
        name = name.substring(4, pos);

        if (isValidNumber(name))
          fn = name.toInt();
      }
    }

    if (fn > n) {
      n = fn;
    }

    entry.close();
  }

  return n;
}

boolean isValidNumber(String str) {
  if (str && str.length() > 0) {
    for (byte i = 0; i < str.length(); i++)
    {
      if (!isDigit(str.charAt(i))) return false;
    }
    return true;
  }
  return false;
}

Arduino EthernetシールドとSDライブラリーの利用に関してのメモ書き

SdFatライブラリー (2016/6/19にアップデートされている)
 ・
Arduino 1.6x以上で使う

 ・このライブラリーは、SD/SDHCフラッシュカード上のFAT16/FAT32ファイルシステムへの読み取り/書き込みアクセスを提供する。
 ・新規クラス「File」は SD.hライブラリーとの互換性を提供するために付け加えられた。
 ・SD.hで書かれたプログラムに対してSdFatを使えるようにするには、#include <SD.h>をその下の2行のように置き換えて記載すればよい。

  #include <SD.h> 
 

⇒ #include "SdFat.h"
  SdFat SD;

uint8_tのデータ・タイプ
 Byte、uint8_t、unsigned charは、Arduinoでは基本的に同じもの
。組み込みソフトウェアの作者は、システムが8ビット、16ビット、または32ビットの長さを定義することがあるため、これらのタイプを定義することがよくある。uint16_tやint32_tなどの他のtypedefも使用している場合は、uint8_tを使用する。型定義の数値には、変数が何ビットを占めるかが明示されています。
uint16_t 
 16ビットの非負整数を格納する。


Arduinoのマイクロコントローラ(ATmega168)のメモリ
・Flashメモリ(16kバイト):Arduinoのスケッチが格納される
・SRAM(static random access memory)(1024バイト):スケッチの実行中に変数の作成と操作がおこなれる領域
 スケッチの中の文字列はSRAMを使うので、できるだけコメントは記入しない方が良さそうだ。
・EEPROM(512バイト):長期的に情報を記録するためのスペース


W5100 Ethernet Shield & SD Card Slot
Ethernet ボードが適切に機能することができるように、SS用に Pin10 を使わず開放しておく必要がある。
 使わなくても 
  pinMode(10, OUTPUT);
 としてスケッチの中に記載しておかなければならない。

またSDカード用のSSはPin4 が使われる。
  const int chipSelect = 4;
 としておかなければならない。

また、Pin10,11,12,13は、Ethernetシールドで利用されるので、それ以外のPinを利用しなければならない。
 10:Ethernetコントローラー用のSS
 11:MOSI
 12:MISO
 13:SCK


MACアドレスの目的
  物理ネットワーク上のデバイスを区別するため
時々やってしまう失敗
・スペースを入れる時には必ず半角で入れる事。間違えて全角で入れるとエラーになり、なかなか原因が分からなかったりする。


Ethernet Shield のスケッチ新旧バージョンでの違い
  旧 current_line_is_blank
  新 currentLineIsBlank

 Ethernet library (Ethernet.h) manages the W5100 chip,
 while Ethernet2 library (Ethernet2.h) manages the W5500 chip;
 all the functions remain the same.

04/20/2017

Fritzing で使うBread board はインスペクターでサイズ変更できる

Breadboard_halfsize Fritzingで使うBread boardは自分にはサイズが大きいなぁと思って小さなサイズのものを探していたが、次の手順でサイズの違うものを選んで使う事ができると分かった。

①Fritzingを起動してブレッドボードのタグを選択する。

②ブレッドボードが表示されたら、そのブレッドボードをマウスでクリックして選択した状態にする。

③ツールバーにあるボタン「ウインドウ」をクリックして、「インスペクター」をチェックする。

④Fritzingの画面右側にインスペクターの設定画面が表示される。
 ・プロパティの中に「サイズ」という項目があるので、その枠の右側にある「▼」部分をクリックする。
 ・現設定は「full」になっていると思うが・・・、
 ・「half+」などを選べば、長さが半分のブレッドボードに変更できる。

04/09/2017

VC0706 で撮影し SDカード に記録する Arduino camera

VC0706シリアルカメラで撮影し、マイクロSDカードに記録するArduino Cameraが出来た。
Img_20170409_205846 Arduino_camera_with_vc0706_and_sdca
Arduinoのシールド基板に小さなブレッドボードを貼り付けて、その上に部品を配置してテストした(左の写真)が、Fritzingのブレッドボードで描いてみると右側の絵のようになる。

これで撮影した写真は、上下逆転している!


Sketchは、Photo Spy Cam using Arduinoのものが大変参考になった。
各パーツとArduinoとの接続は下記のようになっている。
Arduino 
部品数が少ないので、Arduinoのシールドボードの上にミニブレッドボードを貼り付けて、部品を配置し左表のように結線した。

ここでVC0706は、秋月電子で購入した部品
micro-SDカードは、Amazonで購入


ここでは写真サイズを 640x480 としたが、このサイズにするとSDカードへの記録時間が極端に長くなるので注意を要する。テストの際は、320x240 ぐらいで始めるのが良いのではないだろうか。

.

/**
 * VC0706 Camera Module Arduino Compatible:
 *  + cvbs: N/A
 *  + 5V: connected to arduino => pin 5V0
 *  + TX (OUT): connected to the RX (IN) of arduino => pin 2
 *  + RX (IN): connected to the TX (OUT) of arduino => pin 3
 *  + GND: connected to the GND
 */

#include <SoftwareSerial.h>
#include <SPI.h>
#include <SD.h>
#include <JPEGCamera.h>

File testFile;
SoftwareSerial s(2, 3);
JPEGCamera cam(s);
char filename[15];
int num = 0;
int numOfBytes;

const int chipSelect = 9; // CS : connected to pin 9 of arduino
int photoSize = 2; // 0 -> 160x120 / 1 -> 320x240 / 2-> 640x480
unsigned long mainStartTime, mainEndTime, startTime, endTime;

void setup()
{
//activate 5V for the SD Card shield
  pinMode(8, OUTPUT);    // VCC : connected to pin 8 of arduino
  digitalWrite(8, HIGH); // SD Card power ON

  Serial.begin(38400);

// Wait for the serial port to be opened
   while (!Serial) delay(25);
 
//check SD card
  while (!SD.begin(chipSelect))
    {
      Serial.println("Error: SD initialization failed. Is SD card in the card folder?");
    }
    Serial.println("Info: SD Initialization complete,");

// Serial port connected to the cam
    s.begin(115200); //for VC0706 cam
    delay(50);

    Serial.println("Info: Reseting cam...");
// reset cam and wait.
    cam.reset();
    delay(3000);

    Serial.println("Info: Changing baud rate...");
// change baud rate to work at 3.3v
    cam.chBaudRate(2);// 0 -> 9600 / 1 -> 19200 / 2 ->  38400 / 3 -> 57600 / 4 -> 115200
    delay(50);
  
//change serial to match new camera baud rate
    s.end();
    s.begin(38400);
    delay(50);

  Serial.println("Info: Changing picture size...");
//change picture size
  cam.chPictureSize(photoSize);
  delay(2500);

  Serial.println("Info: getting last pic num for the created files...");
  num = getNewSDFileNum();

  Serial.println("Info: Setup is DONE!");
}

void loop()
{
  mainStartTime = millis();
  takePic();
  mainEndTime = millis();
  Serial.print("Info: Main elapsed time (in secs): ");
  Serial.println((mainEndTime - mainStartTime) / 1000);
}

void takePic()
{
  Serial.println("Info: Preparing to take new photo.");

// must call stopPictures before a new photo is taken.
  cam.stopPictures();
  delay(50);

// take photo
  cam.takePicture();
  delay(50);

  num++;
  sprintf(filename, "PIC_%i.JPG", num);

  if (SD.exists(filename)) {
    SD.remove(filename);
  }

// Create file
  testFile = SD.open(filename, FILE_WRITE);
//if it opens ok
  if (testFile)
  {
//save to file
    Serial.print("Info: Saving photo to SD: ");
    Serial.println(filename);
    
    startTime = millis();
    numOfBytes = cam.readData(testFile);
    endTime = millis();

    Serial.print("Info: Elapsed time (in secs): ");
    Serial.println((endTime - startTime) / 1000);

    Serial.print("Info: Bytes for photo: ");
    Serial.println(numOfBytes);
  }
  else  //else it didn't open ok
    Serial.println("Error: Error opening file on SD,");

//must close file to finish writing.
  testFile.close();
}

int getNewSDFileNum() {
  File root = SD.open("/");

  int n = getFileLastNumForDirectory(root);

  root.close();

  return n > 0 ? n : 0;
}

int getFileLastNumForDirectory(File dir) {
  int n = 0;
  int fn = 0;

  while (true) {
    File entry =  dir.openNextFile();

    if (!entry) {
// no more files
      break;
    }

    fn = 0;

    if (entry.isDirectory()) {
      //fn = prepareFileLastNumForDirectory(entry); //no need to be recursively
    }
    else {
      String name = String(entry.name());

      if (name.startsWith("PIC_") && name.endsWith(".JPG")) {
        int pos = name.indexOf(".JPG");
        name = name.substring(4, pos);

        if (isValidNumber(name))
          fn = name.toInt();
      }
    }

    if (fn > n) {
      n = fn;
    }

    entry.close();
  }

  return n;
}

boolean isValidNumber(String str) {
  if (str && str.length() > 0) {
    for (byte i = 0; i < str.length(); i++)
    {
      if (!isDigit(str.charAt(i))) return false;
    }
    return true;
  }
  return false;
}


《撮影した写真》
Pic_392逆さまに撮影されていた・・・








《参考にしたブログ》

1)Photo Spy Cam using Arduino
  このブログは同じVC0706カメラと、同じmicro-SDカードを使った事例だったので、大変勉強になった。
 この事例と私の場合のPin接続は違っているのでもし参考にされる場合には、その点を注意してください。

2)オッサンとバイエル、ピアノ等 「カメラで遊んでみる

 このブログも大変参考にさせて戴いた。



《使用部品》

1)小型TTLシリアルJPEGカメラ VC0706 
  [adafruit PRODUCT ID: 1386] 秋月電子で購入
2)

ココログで arduino sketchソースコード を少し見やすくするには・・・

ブログのソースコードに行番号を付けた見やすい表示にするには、google-code-prettify の公式サイトから一番新しいzipファイル (今はこれかな:prettify-21-Jul-2010.zip)をdownloadして、適当な場所に解凍する。

解凍すると google-code-prettify フォルダが作られ、その中に srcフォルダ がある。

その srcフォルダの中から、 prettify.css, prettify.js, lang-css.js をココログのフォルダに格納する。

フォルダの格納先は、 ココログを開いて⇒コントロールパネル⇒「ファイルのタグ」をクリック
僕は、jsファイルを scriptsフォルダに、cssファイルを stylesフォルダにアップロードしたが、これらのフォルダが有れば、その場所を先ほどdownloadした内の3つのファイルのアップロード先とする。
フォルダが無ければ、先ず「新しいフォルダの作成」に scripts と記載し、「フォルダを作成」のボタンをクリックする。
stylesフォルダも同様に作成する。

次に、download し解凍した3つのファイルを其々 scripts,styles のフォルダにアップロードする。
 ・現在のフォルダで srcを選択し、
 ・新規ファイルのアップロードの「ファイルを選択」ボタンをクリックして、
 開いたエクスプローラーからファイルを選択した後、「アップロード」ボタンをクリックする。
  アップロードが完了したら、「ブログ」のタブをクリックして、左下画面の下方にある「設定」をクリックする。
 ブログの基本情報画面になる。

ブログのサブタイトルの中に、下記のように script の記載をする。
この窓画面は小さくて編集しにくいので、Windowsのテキストを開いておいて、そこで作業する事をお勧めする。
僕は、Windowsのテキストを開いてから下記を打ち込み、

<script src="../scripts/lang-css.js" type="text/javascript"></script>
<script src="../scripts/prettify.js" type="text/javascript"></script>
<link href="../styles/prettify.css" rel="stylesheet" type="text/css" />
<script type="text/javascript"> SyntaxHighlighter.all(); </script>

上記のテキストを書いた後、これらをコピーして、サブタイトルの中に貼り付けた。

「変更を保存」ボタンをクリックして、設定変更の内容をサイトに反映させるために「サイトに反映」ボタンをクリックした。

次の画面で、「すべてのファイル」そのまま・・・「反映」ボタンをクリックで全てのブログ記事に反映された。

ここまでの作業は、準備段階である。

各ブログページで行う作業は、

ブログの本文を記載する場所で、HTMLの編集タブをクリックして、
ソースリスト記載部の直前に、
 <pre class="prettyprint linenums"> 

と記載し ソースリスト終了部分に </pre> と書いて締めくくる。
この通り行ったが、デフォルトでは 5行単位での行番号表示となってしまう。

一行ごとに行番号を付けるには、prettify.cssの内の記述を変更する必要があるようだ・・・

下記のようにやってみたが、棒のブログでは上手く行かなかった。


《prettify.cssの編集作業》
 prettify.cssの後半部分に記載されている  
   li.L0, li.L1, … li.L8 { list-style-type: none } 

 を全てコメント行にしてしまうか、{}内を消去する。

 すなわち、下記のように書き換えて保存。

li.L0, li.L1, … li.L8 {  }

そこで、 ブログ本文の<pre ・・・ >の記述の直前に下記を追記した。

<style>
 li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:decimal}
 </style> 

 これで、Sketchソースコード部分の表示はこのようになった。
しかし、「<」「>」「"」「'」「&」は、HTML編集作業の中で下記のように文字を置き直して記載する必要がある。
 「<」 ⇒ 「&lt;」
 「>」 ⇒ 「&gt;」
 「"」 ⇒ 「&quot;」
 「'」 ⇒ 「&apos;」
 「&」 ⇒ 「&amp;

// Sketch : It detects a human and an animal by the PIR sensor.
//          Then, it makes warning by voice using WTV020-SD.
 
#include <Wtv020sd16p.h>

int resetPin   =  2;  // Reset
int clockPin   =  3;  // Clock
int dataPin    =  4;  // Data
int busyPin    =  5;  // Busy
int pirPin     =  6;  // PIR sensor
int p07Pin     =  7;  // P07
int ledPin     = 13;  // LED
int pirState =  LOW;   // states of PIR at the initial

  Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin);
 
void setup()
{
  Serial.begin(115200);
  pinMode(   pirPin,  INPUT); 
  pinMode(   p07Pin, OUTPUT); 
  pinMode(   ledPin, OUTPUT);    
  wtv020sd16p.reset();

  digitalWrite( p07Pin,HIGH);       // Button(P07) is open(=Off)
  digitalWrite( ledPin, LOW);       // LED:OFF
}
 
void loop()
{
  pirState = digitalRead(pirPin);   // read the state of PIR sensor
  if (pirState == HIGH) {           // detected =>"HIGH", if not-detected =>"LOW"
                                    // Detected!

   digitalWrite( p07Pin,  LOW);     // Button(P07) is close(=On) :PREV  
   digitalWrite( ledPin, HIGH);     // LED :ON  
   
//Plays asynchronously an audio file.
   wtv020sd16p.asyncPlayVoice(1);   // Play audio file number 1
   delay(20000);                    // it sounds for 20 seconds

   digitalWrite( p07Pin, HIGH);     // Button(P07) is close(=On) :PREV 
   digitalWrite( ledPin,  LOW);     // LED:OFF
   delay(3000);  
  }
   wtv020sd16p.reset();
}

04/08/2017

ArduinoにPIRとWTV020-SDを使って音声警報装置

Fritzing_pirwtv020led Dsc_5550

PIRセンサー(集電型赤外線センサー)で人や動物の動きを検知し、音声で警告を与えるシステムをArduinoで作ってみた。

システムは
1階層のArduinoの上にシールドする形で2階層部分を自作した構造になっている。

左側の模式的な回路図は、フリーソフト「fritzing」を用いて作成した。(fritzingプログラムのダウンロード先は、このトップページの中にある。)

この工作で使ったパーツ類については、Googleで「fritzing parts xxxx (xxxxはパーツ名称など)」で探せば、利用できるものが見つけられる。私のような初心者が扱う部品なら、殆どWeb上からかき集めることが出来るだろう。私は、この図をプログラムファイルのインストールから作成まで、3時間ほどの時間で行う事が出来た。

Fritzing_pirwtv020ledcircuitfritzingを使ってブレッドボードと部品間の接続の絵を書いていると、その裏で回路図の下書きが着々と進んでいる。
裏面で作成された回路図は、下書きレベルのものなので、とてもそのままでは使えない。
回路図上で部品配置を変えたり、部品間を結ぶ配線を整列させたり、繋がれなかった配線を足したりしてようやく回路図が作成できる。左図のような簡単なものであれば、それほど時間は要しない。
パーツ間を結ぶ線の色は、デフォルトでは黒で結ばれるようだが、ブレッドボードで結んだ線と合わせた方が分かりやすいので、両者が同じ色になるようにした。


ブレッドボード上では繋いでいる線が、回路図では結ばれていない場合があった。

逆に回路図側で結線すると、ブレッドボード側に破線で結ばれてしまう。この辺りの処理をどのようにフォローすれば良いのか・・・僕は未だこのソフト利用の初心者なので、よく理解できていない。

僕が一番苦労したのは、
WTV020-SDの英文マニュアルを十分に読まずに作業した事が原因だった。そのために、Sketch内ではデバイスのON/OFFで手間取り、音の再生ファイル作成でも手間取った。

音声ファイルの演奏等を確認するには、MP3モードにして行うのが便利そうなのだが、WTV020-SDに対して microSDカードにMP3形式で書き込んでも、MP3で演奏される訳ではない。
WTV020-SDの場合、ファイル形式は「.ad4」にして、ファイル名も「0000.ad4」「0001.ad4」`「0002.ad4」・・・と付ける必要がある。
MP3ファイルデータをad4形式に変換するには、

HOW TO CONVERT MP3 AND WAV FILES TO AD4 FORMAT- WTV020SD-16P TUTORIAL 」の中の紹介にあるツール「UsbRecorder」を使った。

ここで、AD4ファイルは、16Bit、sampling rateは、36000Hz以下なので、私は32000Hzを使ったが、WTV020-SDで演奏できるサンプルの.ad4ファイルが上記のURLの中にある(ダウンロードできる)ので、上手く演奏できない場合には、これを参考にするのが良い。

尚、WTV020-SDカードで使えるmicro-SDカード容量は、1GBとあるが、今時1GBのSDカードは何処にも見当たらない。Matthias Lorenz氏が Arduinoのスケッチの中で 下記のように記載している。
Transcend 512 MB : Working

Transcend 1 GB : Working
Transcend 2 GB : Working
Transcend 4 GB : NOT Working
Transcend 8 GB : NOT Working

どうやらWTV020-SDは、2GBまでは使えるようだ。

SDカードは2GBまで使える事が分かったので、
拙宅の机の周りを探してみて、やっと2GBの容量のものが見つかった。


《Sketch》

Arduino_sketch_20170401_pirdetect_tいろいろな事例を参考に、僕が作成した sketch は左のようになった。
警告音は、虎が威嚇している音にした。
音声や
音楽等を入れておくこともできる。もう少し音量を上げたいので、小型のD級パワーアンプを接続するかな・・・


僕が作った Sketch は、下記から download 出来る。















僕が使っている@niftyのココログでは、HTML5のpre要素が使えないので、Sketchは下記のようにダウンロード先を表示して、そこからダウンロードできるようにした。
「Arduino_UNO_Sketch_PIR_sensor_detects_and_make_voice_warning.ino」をダウンロード

《動かないと悩んだら・・・僕が体得したこと》

動かない原因は、幾つか考えられる。

①パーツ間の配線を間違えている。
②パーツが壊れている。(組みつけ途中、配線ミスに気づかず、電源を入れてしまい部品を壊しているかもしれない)
③マニュアルの読み間違いをして、逆の行動(配線の逆接続や、逆のプログラミング)をしているかもしれない。
④マニュアルに書かれているルールや基準から外れた取扱をしているかもしれない。
 例えば、ad4フォーマットでしか演奏できないのに、mp3フォーマットで演奏できると思い込んでいたり・・・、ファイル名の付け方にルールが有るとか・・・
⑤参考にしている資料にミスが有るかもしれない。
 著者が出版前に訂正すべき点を忘れているかもしれない。
 そのため、複数の資料を参考にするのが良い。
⑥とにかく、使う部品については、その取扱説明書を良く読むことだ。
 Sketchでは、データの形式、内部の値などに整合性がとれているかどうかをプリントアウトしてデバッグしてみる。
⑦エラーが起きている行が問題ではなく、その行よりも前段階のところにバグがある可能性もある。
 ステートメントの区切りの「;」を忘れている場所があったり、
 コメント行の書き方を間違えていたり、
 宣言文を忘れていたりなど、編集している間に、思わぬミスをしている可能性もある。
⑧最後に、分からなかったら、Google先生に聞いてみる!
 ただし、問題の原因が「自分の行ったうっかりミスだったり」すると、答えが得られることは少ないかもしれない。


《参考事例》
① WTV020SD-16Pを使った Daniele Alberti 氏が作成した事例
Lettore "mp3" super economico per Arduino
  ・・・回路図は正しいのかな?

もう一つ大変参考になったURLが有ったのだが、この記事を書いている間に、残念ながら相手の事情で繋げなくなってしまった。

04/06/2017

K12マーチのソーラーパネルを使ったバッテリー充電

最近車を乗るより歩く方が頻度が高くなっているので、車のバッテリー電圧が低下気味!
数日ぶりにエンジンをかけようとするが、エンジンが一発でかからない・・・バッテリー上がりが原因のようだ。

Img_20170405_170815 新しいバッテリーに交換するぐらいなら、同じだけの費用をかけてソーラーパネルでバッテリー充電させることにした。

必要な部品は、ソーラーパネルとバッテリーの充電コントローラー、配線用電線ケーブル。
電気的な計算をしたわけでは無いが、
ある程度の充電電流を流す必要がありそうなので・・・





①ソーラーパネルは、3200円ほどの価格のものを購入。
Img_20170406_095229 Img_20170404_094545  10W12V仕様のもので、Amazonでは3人が高評価していましたが・・・私が入手したものは、あまり出来が良くなくてソーラー液晶の一部が欠けているところが2ヵ所ほどありました。返却するのも面倒なので、電力が出ればいいかと思って、そのまま使う事にしましたが、中国製だからか日本では当たり前の「〇検」のマークも無かったし・・・外観品質も良くないです。


②ソーターパネルの充電コントローラーは、Sun YOBA製の20A仕様ものもを購入。
Img_20170405_170825  コントロールの状態が分かるようにと液晶タイプのものを選びました。 三時間 20A 12V/24Vオートスイッチ仕様。価格はAmazonで約4600円。マニュアルが英語のみなので、使用方法が少し分かり難い。使い始めて思うが、もっと安価なものでも良かった。
電流値の表示が2桁あるが、1A単位になるので、ここで使っているソーラーパネルでは1Aに満たない電流値なので、表示されないため意味が無い。僕が購入したのは古い製品らしく、同じ会社の別の同じ価格帯のものでは、小数点以下1位まで表示できるようになっている。シマッタ!


③配線用ケーブルは、
 使っていない電気器具用の電源ケーブルを使って仮付けチェック!機能上は特に問題無いが、電気器具用に使っていた電源ケーブルでは、プラスとマイナスを間違い兼ねない。
極性を間違わないように、またバッテリーから運転室内に引き込む電線は長さが不足していたので、ホームセンターで新たに買ってきた。

2日間稼働させて・・・バッテリーへの充電も問題なくできている。


《車内配線》
①バッテリーに接続するケーブルの端子は、
Img_20170405_171026 Img_20170405_171034 裸圧着端子 丸形で穴径はバッテリー端子部のM6ネジが挿入できるものをホームセンターで購入し、電線の端部に圧着接続
写真のようにナットを外して、本ケーブル端子を挿入して締め込んだ。





②バッテリーから車室内へは
Img_20170406_095354 Img_20170406_095458 Img_20170406_095610 左側のフェンダーの中を通して(以外に簡単に通すことが出来た)、左ドアの下部から室内へ取り込んだ。





③ソーラーパネルは、
Img_20170404_084844パネル裏側の端子部分にケーブルを半田接着し
写真のようにした。






④2本のケーブルを、コントローラーに接続した。
 バッテリー側のケーブルを接続すると、コントローラーの電源が入り、電圧値などが表示される。
 コントローラーには、コントローラーが置かれる環境温度を計測するための端子が付いているので、忘れないようにコントローラーに挿し込んでおく必要がある。

これで、暫くバッテリーやソーラーパネル・コントローラーなどの様子をみてみよう・・・

03/29/2017

保護されたpdfファイルのテキストを部分的にコピーするには

保護された外国語のpdfファイルは、コピー等が制限されているために、Acrobat Readerで一部分のテキストさえもコピーすることが出来ない。

翻訳ソフトに数行分をコピペして訳してみたいとき・・・ Google Chromeを下記のように使って保護の解除が出来るようだ。

《手順》
1)Downloadしたpdfファイル(保護されたもの):①とする。


2)ブラウザ「Google Chrome」を起動させ、ドラッグアンドドロップで①のファイルをChrome上にドロップする。
  ⇒①のpdfファイルが開く。


3)「Ctrl」+「P」で印刷モードにして、

  ⇒印刷欄にある「送信先」の「変更」をクリックする。

  ⇒「ローカルの送信先」のメニューの中から 「PDFに保存」 を選びクリックする。


5)「印刷」の画面に戻るので、
  ここでブルーのボタン「保存」をクリックする。


6)「名前を付けて保存」の画面が表示されるので、

  既に保存してある①に対して別の名前②に変更して保存する。

7)②のファイルをAdobe Acrobat Readerなどで開くと、②に対してコピーが出来る。

  ファイル②の該当部分に移動し、
  マウスでハイライトして後、 右クリックメニューでコピーすることが出来る。


8)翻訳ソフトを開いておいて、ここにコピーしたテキストを貼り付ければ、翻訳が容易に行える。



尚、保護されたpdfファイルを解除して使用することは、一部分であろうと、自己の責任で行う行為であるので、注意を要する。

03/20/2017

MDS-JE780 を Windows10 64bit にNET-MDで繋ぐ

「MDウォークマン MZ-N920に録音できないかなぁ~」と、ネット上を調べていたら、MDS-JE780をWindows10 64bit上でNet-MDとして使えるか検証 という記事を見つけた。「Windows10 64bit にMDS-JE780が繋げられるなんて、そんな!」と疑いの眼で読んでみると・・・ 繋がっている! 僕も、やってみよう!

キーワードは3つあって、①「X-アプリ(Windows10のNet-MDに対応している!が、Windows8以降のX-アプリではNET-MDのドライバーのインストールは行われない。)」と ②「ドライバーの署名の強制を無効にする(Windows10で実施できる)」、③ Windows7 64bit OS によって、ハードルをクリアーしている事がわかった。


Netmd_and_xappli 私もMDS-JE780を所有しているので、この記事通り「Net-MDで繋がるか?」試してみた。左図の通り!


私の場合の問題点は、最後の Windows7 64bit OS の PC! 幾つかあったWindows7 64bit OS マシンは、全て Windows10 にアップグレードしてしまい、今、手元には一台も無い。

Amazon ショッピングを見て、Windows7 64bit OS を購入しようかと考えたが、一番安価なものでも1万円ほどの価格である。 この作業で必要なのは、Net-MDのドライバーソフトを確保するためだけなので、この作業を3日間以内に終えられれば、未だ手元にある Windows7 64bit OS を、一時的に別のマシンを組み立てて、そこにインストールして作業すれば良い。


また、コンポーネントステレオのキャビネットから私のWindows10 64bit PCまでの数mの距離をUSBケーブルで接続する必要がある。それには、Amazonから(5m+3m⇒合計8m)のUSBケーブルを購入した。


1)先ず、手元に転がっている64GBのSSDを使って、そこに Windows7 64bit OSをインストールした。


2)Windows7 64bit OS が起動できるようになったところで、X-アプリをDownload して、
NET-MDを利用する(MZ-RH1)を選んでインストールした。

Netmd1 X-アプリのインストールが済んだところで、Cドライブを確認すると、左図のように
C:\Program Files (x86)\Sony\x-APPLICATION NetMD Driver
が出来上がっている。

これが出来れば、もうWindows7 PC は不要になる。

(僕は、出来上がったドライバーフォルダーを、Windows10の
一時的な場所にもコピーしておくことにした。)

Windows10 64bit OS PC の C:\Program Files (x86)\Sony\ にドライバーの入ったフォルダーをコピーした。

3)Windows10 PC と MDS-JE780 をUSBケーブルでつなぎ、
MDS-JE780の電源を入れて、Net MDボタンをONにする。

4)デバイスマネージャを開くと、NET MD❕ と表示されているので、そのプロパティを開き、詳細タブに移動する。
 プロパティのプルダウンからハードウェアIDを選択すると、ハードウェアIDが

  
VID_054C&PID_0081 であると分かるので、これを控えておく。

5)ここからは、ドライバーのファイルを変更する作業になるが、管理者権限で作業を行わないと、保存できなくなるため、Windowsの「メモ帳」を管理者権限で開いて、そこから作業することにした。

《管理者権限でメモ帳を開く》
スタートボタン⇒Windowsアクセサリ⇒メモ帳 が見える状態で、メモ帳の上でマウス右クリック
その他 > 管理者として実行 をクリック

これで「メモ帳」が開くので、ファイルから・・・

C:\Program Files (x86)\Sony\x-APPLICATION NetMD Driver 

 にある NETMD760.inf  
の場所を開いて(このときすべてのファイルを対象にしていないと表示されない)下記部分を変更し、上書き保存する。

《下記より変更部分3か所 
オレンジ色文字部分⇒青色文字部分へ》
[ControlFlags] のところ・・・

ExcludeFromSelect=USB\VID_054C&PID_0286    ; MZ-RH1

ExcludeFromSelect=USB\VID_054C&PID_0081    ; MDS-JE780

; For Win2K and later のところ
[Sony]
%NETMDUSB.DeviceDesc%=NETMDUSB.Dev, USB\VID_054C&PID_0286

%NETMDUSB.DeviceDesc%=NETMDUSB.Dev, USB\VID_054C&PID_0081

; For Vista 32 64 のところ
[Sony.NTAMD64]
%NETMDUSB.DeviceDesc%=NETMDUSB.Dev, USB\VID_054C&PID_0286

%NETMDUSB.DeviceDesc%=NETMDUSB.Dev, USB\VID_054C&PID_0081

《ここまで書き換えの説明部分》


上記のように書き換えたら、「NETMD760.inf」を上書き保存する。


6)次に、デジタル署名を強制しないモードでWindows10を起動させるのだが、
 Windows10動作中の手順は、下記《参考資料》2)を参考に行った。

 ①スタートメニューを左クリックし、ウインドウの左上の「三」を左クリックして、
 メニューの中から「設定」を選び、左クリック。

 ②新たに開いたメニューウインドウから、「更新とセキュリティ」を選択する。

 ③メニューの中から「回復」を選んでクリック

 ④回復メニューの中の「PCの起動をカスタマイズする」の下にある
  「今すぐ再起動する」を選んでクリックする。
   ⇒PCが再起動する。

 ⑤オプションの選択画面が表示されるので、ここから「トラブルシューティング」を選んでクリック。

 ⑥「詳細オプション」⇒「スタートアップ設定」を選んで、「再起動」ボタンをクリックする。

 ⑦PCが再起動して「スタートアップ設定」画面が表示される。
  ここで「7)ドライバー署名の強制を無効にする」を選ぶために、数字の「7」を押す。
  ⇒PCが再起動する。

 ⑧PC再起動後、デバイスドライバーを開いて、NET-MD のドライバーをインストールする作業を行う。

7)いよいよ最終段階(NET-MD デバイスドライバーのインストール)
Netmd8n ①スタートボタン(右クリック)⇒デバイスマネージャーをクリックしてみると、Net-MDは表示されているが、未だドライバーがインストールされていないので「!」マークが表示されている。

Net-MD を右クリックし、「ドライバーソフトウェアの更新」を行う。



Netmd9②ドライバーソフトウェアの更新作業は、
「コンピューターを参照してドライバーソフトウェアを検索します」を選んで・・・

③その場所は、Cドライブの
 C:\Program Files (x86)\Sony\x-APPLICATION NetMD Driver の中にいれてあるので・・・
勿論、「サブフォルダーの中も検索する」を選ぶ。




Netmd91④下側に表示のある、「このドライバーソフトウェアをインストールします」を選んでクリックすると・・・








Netmd92Netmd93 ⑤ドライバーソフトウェアが正常に更新されたと表示されるはず。


⑥確認すると、Net-MDに付いていた「!」マークが消えている。





8)ドライバーはインストールされたので、ここで「X-アプリ」をインストールする。
Xappli_1
Sonyのサイトに行って、X-アプリをダウンロードする。

中央の赤いボタンをクリックするとダウンロードが始まる。

ダウンロードの状況は、この画面の左下隅に表示される。

ダウンロードが終わったら、そこをダブルクリックして



Xappli_3Xappli_4 X-アプリをインストールする。









9)X-アプリを起動させて後、MDS-JE780 の電源を入れ、USBでPCと繋いで、Net-MDをONにして、
Xappli_6_mzrh1
この画面の左下にある「機器への転送」ボタンをクリックすると、
「”MDウォークマン”[MZ-RH1]」と表示される。

転送先の機器は「
MDS-JE780」なのに、”MDウォークマン”[MZ-RH1]と表示されてしまうが、変更方法は分からないので、放置!









この状態で、どこまでの事が出来るのか・・・
《参考資料》1)には、何が出来て何が出来なかったかが、詳しく記載されているので、必要な方は参照願います。


《参考資料》
1)「ソニーなVAIO&XPERIAとジャンクオーディオ好きのブログ」
  MDS-JE780をWindows10 64bit上でNet-MDとして使えるか検証
2)Windows10 64bit版へのインストール
 「ドライバー署名の強制を無効にする」の手順

03/18/2017

Youtube のお気に入り音楽を mp3形式に変換するには

Youtubeを見ていて、お気に入りになった音楽を、自分用にmp3でdownloadする方法のうちの一つをここに書き留めておく。

1)インターネットブラウザからYoutubeを起動して、お気に入りの音楽ビデオを表示する。
 ・例えば、Youtubeを起動して検索枠に「smoothjazz vocal sleeping」と入れて・・・

  表示された音楽ビデオを選択して、演奏が始まってから、
 
  ブラウザのURL枠に記載されているアドレスを、コピーする。

次に、
2)Youtubeの動画をmp3に変換するソフトは、

Online Video Converter v3.0」(https://www.onlinevideoconverter.com/ja/video-converter)を使います。

上記URLの変換ソフトがある場所にアクセスして、

「URLを入力してください...  」と薄いグレーの文字色で記載されているところに、1)でコピーした音楽ビデオのURLを貼り付ける。

その下の枠には「フォーマット:.mp3」とあるが、僕はmp3に変換したいので、そのままだが、

もし他のフォーマット(例えば、wma, wavなど)に変換したいのなら、その枠の右端にある「∨」をクリックすると、フォーマットを変更することが出来る。

mp3のフォーマット形式を変更する訳ではないが、ここで「∨」をクリックしてみると、[.mp3]にチェックが入っていることを確認できる。

3)準備が整ったので、2)の「フォーマット:.mp3」の下にあるオレンジ色の「スタート >」ボタンをクリックする。

 尚ここで、
「スタート >」のボタンの上にある「その他の設定」をクリックすると、音声の質を変えることもできる。デフォルトは「192kbps」のようだ。

「スタート >」ボタンをクリックすると、変換が始まる・・・

4).mp3への変換作業が終了すると、
 変換された動画のタイトル画面と、タイトル、.mp3のファイル容量が表示されて、 その右に2つの青いボタン「ダウンロードする」「もう一度変換する」が表示されている。

無事に変換が終わっているようなら、
「ダウンロードする」ボタンをクリックする。

.mp3に変換されたデータは、PCの「ダウンロード」に「上記のタイトル.mp3」で書き込まれている。ダウンロードには、幾らか時間がかかる。Windows10でブラウザにChromeを使っているなら、Chromeの画面の左下にダウンロードの状態が表示されている筈です。

5)続けて別の音楽ビデオを変換したいのなら、
「もう一度変換する」をクリックすると、2)の画面になり、URLを入力できるように準備される。


02/15/2017

Microsoft Office 互換ソフト

拙宅では、Microsoft Office 2010を使って作業を行っている。この度、小型のノートPCを追加購入しようと検討しているが、そのPCでも、オフィスソフトは継続して使いたい。

Microsoftオフィスのソフトは、バージョンが進んで2016になっている。ネットで価格を調べてみると、2016からは、アカデミック版が見当たらず、少し安価に設定されたPersonal版のみが目につく。

時代は、オンライン版や、ネットで一年契約のものに切り替わりつつある。
フリーソフトでは慣れていても、インストール用のCDやDVDが無いというのには、少し不安を覚える。

これでも高いと思うので、いい案は無いものかと考えた挙句、
自分ではWordは、ほとんど使わない。いや、使わないではなくて、自分が使いこなすだけの技量がないから使っていない。使うのは、添付された資料などで読むときぐらいだろう・・・

Powerpointも、今では使うチャンスが減っている。ここ数年データを作っていないなぁ。

Excelは、マクロを含め、便利に使っている。
それなら、無料のオフィスソフトを使うのではどうだろう・・・と調べてみた。

ここで調べた以外にもオフィスの無料版ソフトは色々あるようだが、僕は次のものを試してみた。
1)Apache「OpenOffice」
 アメリカのApacheソフトウエア財団が開発しているオフィス互換の無料ソフト。
 エクセル互換は、 Calc というソフト。


2)Libre Office
 ドイツのDocument Foundationが開発しているオフィス互換の無料ソフト。
 エクセル互換は、Calc というソフト。Apacheに似ている。

3)SoftMaker「FreeOffice」
 ドイツのSoftMaker社が開発しているオフィス互換の無料ソフト。
 エクセル互換は、PlanMaker というソフト。

これらに、Excel 2010で先日作成した「マクロ入りのExcel データ」を読ませて、簡単なチェックをしてみた。

1)
Apache「OpenOffice4.1.3」
 Calc:

 ・
マクロは使えるが、Excelのマクロとは互換性が無いようだ。
 ・読込の際にマクロは外されてしまう。
 ・セルの中にURLの一部が記載されていると、勝手にリンクを貼ってしまう。
 ・
セルの中の文字列を、繰り返して表示する(一部分ではあったが、頻度が高い)。
 ・Excel資産を使う場合、作業の修正に時間がかかりそうだ。
 ・私の使い勝手には、あまり馴染まない。

2)
Libre Office5.3
 Calc:
 ・マクロは使えるが、Excelのマクロとは互換性が無いようだ。
 ・マクロが有ると勝手に外されて読み込まれる。
 ・セル内の斜め罫線が太く表示される。
 ・セル内に書いたURLの一部が、赤いアンダーラインで表示されたりするところが有る。
 ・セル内に書いたURLは、Ctrl キーを使って Web上にリンクすることが出来る。

3)SoftMaker「FreeOffice2016」
 PlanMaker:
 ・マクロが全く使えない。ソフトのメニューの中に見つからない。
 ・データに記載されているマクロは削除されて読み込まれているようだ。
 ・表示はシンプルで良いが、これでは私の用途に合わない。

Kingsoftのオフィスソフトでは、マクロも互換性があるという情報がネット上にあった。しかし、僕は以前そのソフトをインストールし、その後アンインストールしようとした際に、完全に削除するために大変苦労したトラウマが有ったので、今回そのソフトは試していない。

新しいノートPCには、
趣味で使っているデスクトップPCにインストールしている「Microsoftオフィス2010」を外し、それを移設インストールし、デスクトップPCには、Libre Office5.3 をインストールして、しばらく使ってみようと思う。

Excel資産にあるマクロを書き直す必要があるのは、面倒な作業になりそうだが・・・。

02/12/2017

Adafruit Wave Shield を使ってみる(FatReader.h の悪夢から覚めて)

IDEにスケッチをコピペし、起動させようと何度も試みたが、色々なエラーが表示され、コンパイルが途中で止まってしまったりしていた。原因を探そうと、英文書き込みを含めネットを探し回ったが、同様のエラーを持つ輩のコメントが有っても、対策について書かれているものが見当たらず、原因が分からず、まるで悪夢を見ているようだった。

初心者の常・・・、訳も分からずに「waveHC library」を適当な所に入れて起動させていた事が、起動しない原因だという事がようやくわかった。

Arduino の IDE(統合開発環境)には、4系統のバージョンが有った。それは
Arduino の創始者グループが内紛で分裂して2つの会社(Arduino LLC社、Arduino SRL社)を創立し、訴訟問題となるような状況になったことに由来するらしい。私は、細かな事は把握していない。
僕がそのことを知った際、私のシステムにエラーが起きる原因は、このIDEバージョンとライブラリーの使用の不整合が原因ではないかと思ったりした。

しかし現在、IDE は 「Arduino 1.8.0」に統合化されたので、初心者としては、これを download して用いれば、IDE使用上の問題は無さそうだ。IDE(
Arduino 1.8.1)を downloadする場所は、ここにある。

私が Wave Shield を使うに際して起こした問題は、
adafruitの「The Play6_HC Example」のページに書かれている事を、忠実に守らなかったことに依ると思う。また、いろいろなライブラリをふんだんにフォルダに放り込んでいた。
要らないライブラリを整理して、すっきりさせてから以下の作業にとりかかった。

The_play6_hc_example 左図が、adafruitの「The Play6_HC Example」のページ

左図の丁度中央辺りに水色の文字で「
waveHC library」と書かれたところがある。

先ずそこをクリックして、「adafruit/WaveHC」のページに移り、これから行おうとするスケッチに適合する必要なライブラリーをインストールする必要がある。

「Clone or download▼」の緑色のボタンをクリックする。


小さな窓が開くので、窓の右下の「Download ZIP]をクリックする。

これで、WaveHCが含まれたzipファイルがダウンロードできる。

Windowsのダウンロードフォルダに download されたこの zipファイルは、「WaveHC-master.zip」という名前である。

このファイル
「WaveHC-master.zip」を解凍して、出来上がった「WaveHC」フォルダを、
中身ごとWindowsの「ドキュメント」フォルダの中にある「Arduino」配下の「libraries」の中に、移動又はコピーする。

これでライブラリーの準備が出来た。

次に、「Digital audio player」のスケッチであるが、「The play6_HC Example」のスケッチの2つ下にある「Examples」をクリックする・・・、
The_play6_hc_example_2
左図のページを開いて、
「Digital audio player」のところに青い字で記載の「Sketch」をクリックし、開いたウインドウに書かれているスケッチをコピーする。

IDEを開きそのスケッチをペーストすればよい。






IDEにペーストされたスケッチには、WaveHCライブラリーが必要なので、
IDEのツールバーから

  スケッチ⇒ライブラリをインクルード⇒Contributed ライブラリにある「WaveHC」をくりっくしてやる。

これで、ツールからシリアルポートを確認して、

ツールバーアイコンから(⇒)をクリックして、

マイコンボードに書き込みを行えば、

エラー無くコンパイルが完了する筈だが・・・。



01/18/2017

Windows10 USB接続が頻繁に切れる⇒対策

Windows10で、スマートフォンやカメラをUSBで接続していると、頻繁に切れてしまう。多分Windows10化の際に設定内容が変更されてしまった可能性があるので、PCの関連する設定項目のところを再確認し、設定内容を変更したところ、この問題がほぼ解消した。

《設定内容の確認と設定変更》
先ず、スタートボタンのところで右クリックして、メニューを開き、
メニューの中から「デバイスマネージャ」を選んでクリックする。

デバイスマネージャの画面が開くので、「ユニバーサルシリアルバスコントローラー」をダブルクリックする。

「USBルートハブ(xHCI)」が2ヵ所ある。先ず、一方をクリックして開き、
「電源の管理」のタブをクリックする。
頻繁にUSB接続が切れるとすれば、下記の項目に☑が入っているものと思われる。
このチェックを外す。
☑電力の節約のために、コンピュータでこのデバイスの電源をオフにできるようにする(A)

 ☑ ⇒ □  として、「OK」ボタンをクリック。

次に、もう一方の
「USBルートハブ(xHCI)」を同様に開いて、
「電力の節約のために、コンピュータでこのデバイスの電源をオフにできるようにする(A)」に☑が入っていれば、そのチェックを外し、「OK」ボタンをクリックする。

「汎用 SuperSpeed USB ハブ」や「汎用USBハブ」などの項目も同様の方法で「電源の管理」タブを開き、上記内容を確認し、チェックが入っていれば、外して、「OK」ボタンをクリックする。

次にまた、スタートボタンのところで右クリックして、メニューを開き、
メニューの中から「電源オプション」を選んでクリックする。

「プラン設定の変更」をクリックし、「詳細な電源設定の変更」の「+」をクリックする。

次の画面の中から「USB設定」を選び、その中の「USBのセレクティブサスペンドの設定」の「+」をクリックする。
 バッテリ駆動 と 電源に接続 それぞれに対し、「有効」となっていれば「無効」ぶ変更する。そして「OK」をクリックする。

上記の設定変更が終われば、PCを再起動させること。
`
僕のPCでは、上記の設定変更で、USBの接続が切れる事は、ほぼ無くなった。

01/08/2017

Arduinoで動態検知装置(ブザーを鳴らし、LEDライトを点ける)

Img_20170108_170358 Arduino「初心者でも簡単に扱えるマイコンボード(たばこのケースぐらいの大きさ)」のボードの上に、ブレッドボードを置いたシールド基板を載せて、そこに集電センサー、LED、ブザーを配置し結線して、人や動物の動作を検知し、LEDライトとブザーを鳴らす試作品を作って、上手く動いた。

ここでは、いわゆる仕組みづくり・・・



これを動かすプログラムは、Python言語!

主な構成部品は、
① Arduino keyestudio UNO R3  @1020  1個
② Arduino用ユニバーサル プロトシールド基板 ガラスコンポジット @200 1個
③ ピンソケット 1x6 @30 1個
④ ピンソケット 1x8 @40 2個
⑤ ピンソケット 1x10 @50 1個
⑥ ジャンパー線
⑦ 電磁ブザー 1個
⑧ LED 1本

⑨ 集電センサー: SB412A-01-012 @500  1個

部品からArduinoへの各配線は、

集電センサー(SB412A-01-012

 プラス → 5V端子に
 マイナス → GND端子に
 中央のセンサー端子 → 3番端子へ

電磁ブザー

 プラス → 9番端子へ
 マイナス → GND端子へ

LEDランプ

 プラス → 13番端子へ
 マイナス → GND端子へ

《 Python sketch 》
Arduino










←ここでは10秒間(数値10000)
   ブザーを鳴らす設定にしている。

01/07/2017

Raspberry Pi2用のセキュリティ設定覚書(暫定版)

これは自分のRaspberry Pi2用セキュリティ関連設定の覚書

いろいろやって紙に書いていると、纏めておいたつもりのものでも、容易に散逸してしまったり、どこかにファイリングしてしまい、また調べることになる。
また、他の人によってブログなどに書かれた手順も、自分の理解のために加筆しておく必要があるものもある。・・・それで、自分のメモ代わりにここに書いておく。

手順と処置方法
1) rootユーザのパスワード設定を行う

 sudo passwd root

  と打ち込みパスワードを設定。 

2) Raspberry Pi2のアップデート

 sudo apt-get update
 
3) Raspberry Pi2のファームウェア更新

 sudo rpi-update

  この後、再起動

4) テキストエディタ(Vim/Emacs)のインストール
  vim か emacs どちらかでOK

 sudo apt-get -y install vim
  sudo apt-get -y install emacs

5) IPアドレスの固定
 私のシステムでは有線LAN接続する。先ほど「vim」をインストールしたので、
 先ず、

 sudo vim /etc/dhcpcd.conf  で格納先を開き、

 下記の 4行を、行末尾に追記する。「***」は固定アドレスの指定番号を入れる。

 interface eth0
 static ip_address=192.168.1.***/32
 static routers=192.168.1.1
 static domain_name_servers=192.168.1.1

 設定が終了したら、Raspberry pi2 を再起動すればIPアドレスが固定される。


6) SSHを安全に利用するために・・・
   SSH接続用の鍵ファイルを作成する。

  cd ~  でホームディレクトリに移動し、

  ssh-keygen -t rsa  とキーインして実行し、


 以下のようなメッセージが表示される。
 これは、鍵ファイルを作成する場所を聞かれているだけなので、問題がなければエンターを押す。

 Generating public/private rsa key pair.

 Enter file in which to save the key (/home/pi/.ssh/id_rsa):

そのあと、パスフレーズの入力
 2か所あり・・・


 このステップが終わると、

 /home/pi/.ssh/  ディレクトリに id_rsa(秘密鍵) と、 id_rsa.pub(公開鍵)が作成される。

7) 作成された公開鍵を pi ユーザーの公開鍵として登録する。

 cat .ssh/id_rsa.pub >> .ssh/authorized_keys


8) 秘密鍵(/home/pi/.ssh/id_rsa)の方は
 外部から Raspberry Pi にアクセスする際に利用するので、
 このPCには保存しないで、他のパソコンや USB メモリ等にコピーしておく。
 絶対に第三者に漏れる事がないように注意する事。

9) 念のため、今までのファイルのアクセス権を変更
 「 pi ユーザーのみ 読み書き出来る」ように、
 下記のようにアクセス権を変更しておく。


  chmod 600 ~/.ssh/authorized_keys

  chmod 600 ~/.ssh/id_rsa
  chmod 600 ~/.ssh/id_rsa.pub

10) SSHサーバー設定の変更

  sudo vim /etc/ssh/sshd_config
 
  で、設定ファイルを開いて 下記の①~④の4 箇所を書き換える。


 ①ポート番号の変更
  49152~65535 あたりで好きなポート番号(*****)を選んで設定する。

  # What ports, IPs and protocols we listen for
  #Port 22   ← #でコメントアウト化して、何かの時に戻すことがやり易いように・・・
  Port *****

 ②管理者権限での SSH ログインの禁止

  #PermitRootLogin without-password ← #でコメントアウト化しておく
  PermitRootLogin no

 
平文パスワードでのログイン禁止 (これで、必ず秘密鍵が必要となる)

  #PasswordAuthentication yes ← #でコメントアウト化しておく
  PasswordAuthentication no


 
空のパスワードでのログイン禁止
  念のため、空パスワードでのログインも明示的に禁止しておくため、追記する。

  PermitEmptyPasswords no

 修正が終わったら、
 
 
設定内容を Systemd に反映する。

  sudo systemctl daemon-reload

  として、反映させ、次に、

  sudo systemctl enable ssh
  sudo systemctl start ssh

  とコマンドを打ち込んで、SSH サーバーを再起動させる。

 ⑥ 再起動後、接続の確認実施
  ・ 外部のパソコンから、ID とパスワードのみではログインできないこと、
  ・ id_rsa 秘密鍵のみで SSH 接続出来ること を確認すること。

13) 監視ツールの設定
  失敗したログインの履歴を見ることができるコマンド(実行には root 権限が必要)


  sudo lastb

参考としたブログ
・殆どそのまま利用させて頂いた。感謝!
 私のブログでは、私自身が後から理解しやすいように書き加えただけである。

・ラズパイの最低限セキュリティ・セッティング
 http://www.feijoa.jp/laboratory/raspberrypi/minimumSecurity/

«Radikaでラジオ番組を録音しようとして・・・上手く行かない

April 2017
Sun Mon Tue Wed Thu Fri Sat
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

Recent Trackbacks

無料ブログはココログ