ラベル arduino の投稿を表示しています。 すべての投稿を表示
ラベル arduino の投稿を表示しています。 すべての投稿を表示

2020年4月24日金曜日

温湿度モニター(センサーをSHTに変更)

センサーをDHTからSHTに変更して、センサー部分の構造をむき出しから、アクリルパイプ(16φ 10cm)の中に入れる方法にしてみました。 
また、SHTだけですが供給電圧を計測時にonして終了すればoffするようにして、省電力化をさらに進めてみました。 
また、計測時間間隔を凡そ10分にしています。 (何故か、一つの計測点のDHTがうまく動作しなくなってしまったので、この際2つ共にSHTに変更しました。)
 また、実験中にhttpd-access.logに408が記録され、データがちゃんと受信できていなかった時があったので、Li電池を新しいものに交換してみました。
回路図を添付するほどの物ではないので、以下結線の記述;
SHT VIN -> D6(GPIO12)
      G     -> Ground
      SCL -> D1(GPIO5)
      SDA -> D2(GPIO4)
ESP-WROOM-32
     RST -> D0(GPIO16)  deepsleep wakeup の為、

>> 408のエラーを調べてみると、Headerが送られて来てから中身が送られて来るまでの間隔が長いと、攻撃とみなして、Timeoutさせる、仕様になっているようなので、外部にexposeするサーバーでは無いので、取り敢えず、/usr/local/etc/apache24/httpd.confのmod_reqtimeout.soをコメントアウトして様子を見ることにしました。
また、SHTの電源のoffは、サーバーとのコネクションを切ってからにしました。
>> これも解決には至っていない! 何が原因だろう?
何故か、手こずるなー、、、。
>> deepsleep で4時間半(10分毎なので、25,6回)位で止まってしまうので、別の8266に替えてみると、問題なく動いています。 結局は原因が良くわからず、8266自身が不良品だったのかもしれません。 
色々弄っているときにESP8285でもやってみましたが、此方はdeepsleepから立ち上がりませんでした。 ググるとdeepsleepが動かない、と言う書き込みがあったので、8266と同じものとして扱うことは出来なさそうです。
>>使用していた1000mAhのLi電池の出力が3.7V位に下がってしまう(劣化?)とNJU7223が3.3V作ってくれなくて起動できなくなっている物があることに気が付きました。NJUは入力電圧が0.6V以上高い必要がある為に、Liが3V台に落ちてしまうとアウト!




/*
    This sketch establishes a TCP connection to a "quote of the day" service.
    It sends a "hello" message, and then prints received data.
*/
#include "ESP8266WiFi.h"


#ifndef STASSID
#define STASSID "Buffalo-G-4CC0"
#define STAPSK  "65rhwrit3nnee"
//#define IDENTIFIER "GardenCenter"
#define IDENTIFIER "GardenEast"
//#define IDENTIFIER "GardenWest"
#endif
#define SHT 12  //  D6=GPIO12 set to SHT power. DTH11 was broken and replaced to SHT10 2020/04/21
#define DHTpin 14

#ifdef DHT  
  #include "DHTesp.h"
  DHTesp dht;
#else
  #include "SHTSensor.h"
  #include "Wire.h" 
  SHTSensor sht;

#endif
const char* ssid     = STASSID;
const char* password = STAPSK;
const char* Identifier = IDENTIFIER;
const char* host = "192.168.1.3";
const uint16_t port = 80;

void setup() {
  Serial.begin(115200);
  delay(1000);  //let sercial console settle.
  pinMode(SHT,OUTPUT); // Control SHT power to minimize the consumption.  
  // We start by connecting to a WiFi network
  /* Explicitly set the ESP8266 to be a WiFi-client, otherwise, it by default,
     would try to act as both a client and an access-point and could cause
     network-issues with your other WiFi-devices on your WiFi-network. */
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
#ifdef SHT  
  digitalWrite(SHT, HIGH);
  delay(100);  // need to wait a while ...
  Wire.begin();
  if (sht.init()) {
    Serial.print("init(): success\n");
  } else {
    Serial.print("init(): failed\n");
  }
#endif
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
#ifdef DHT
  dht.setup(DHTpin, DHTesp::DHT11);  //Connect DHT sensor to GPIO 14
#else
  sht.setAccuracy(SHTSensor::SHT_ACCURACY_MEDIUM); // only supported by SHT3x
#endif
}
void loop() {

  WiFiClient client;
  if (!client.connect(host, port)) {
    Serial.println("connection failed");
    delay(5000);
    return;
  }
#ifdef DHT
  delay(dht.getMinimumSamplingPeriod());
  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.getHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.getTemperature();
  // Check if any reads failed and exit early (to try again).
#else
  float h = sht.getHumidity();
  float t = sht.getTemperature();

#endif

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT/SHT sensor!");
    delay(100);
    return;
  } 

  // WEB serverにデータをアップロードする。
  String url = "/weather/weather_log.php";
        url += "?location=" + String(Identifier); // ID to identify location
        url += "&temperature="+String(t);
        url += "&humidity=" +String(h);
        url += "&pressure=" +String("-----");     
  Serial.print("Requesting URL: ");
  Serial.println("GET "+ url);
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                "Host: " + host + "\r\n" +
                "Connection: close\r\n\r\n");
  delay(50); 
  // Read all the lines of the reply from server and print them to Serial
  Serial.println("Returned message from server: ");
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
  client.stop();  
  
  digitalWrite(SHT, LOW);  // turn off SHT power.

  // 15分deepsleepする。
  ESP.deepSleep(10*60*1000*1000, WAKE_RF_DEFAULT); // 60*1000*1000 = 1min, 10 min
  delay(1000); // execute once every 5 minutes, don't flood remote service
}

2019年11月10日日曜日

ESP8266 Arduino 続き)

アマゾンで”Aideepen 2個セット ESP8266 ESP-12F CH340G CH340 V2 3.3V USB WeMos D1 Mini WIFI開発ボードD1 Mini NodeMCU IOTボード”を購入しましたが、Serial Monitorがうまく動作しなくて、昨日から四苦八苦していましたが、やっと解決策を見つけました。 (これ、技適マーク無いので、WiFiは使っちゃダメです)。
「ツール」->「ボード」で、LOLIN WeMosがらみの物を指定すると、ちゃんと表示されるようになりました(もっとも、最初に表示されるゴミは相変わらずですが、、、。中国語のバナーかなんかかな?)。
 LOLIN WeMOS, WeMOSで4種類ありますが、取り敢えず、どれでも動いていますが、正しくはメモリの量などでちゃんと選ぶ必要があるのでしょう



早速、ブレッドボード上にDHT11を乗っけてWiFiで定期的に温度湿度を送信できるようにしてみました。 「わーお、なんて簡単なんでしょ。 プルアップ抵抗も何もいらず、あまりにも簡単」


スケッチは、以前作ったもののコピペで、、、。 消費電力を抑えるためにdeepsleep()を使って1時間毎に! ただし、以前deepsleep()では1時間は出来なかったように記憶していたので、ググってみたら、ココが出てきましたが、実際にやるとやはり60分を指定するとうまくゆかないので、30分にすることにしました。 何故60分が出来ないんだろう?

deepsleep()を利用するために、RSTとDPIO16(D0)を接続する必要がありますが、これ接続しておくと、スケッチの書き込みが出来なくなるので、スケッチの書き込みが終了した後にD0とRSTをショートさせる必要があります。

後は、来週以降PPかなんかの容器に入れて、太陽電池とリチウム電池の電源で実際にどの位の期間使えるのか、検証することにします。

 3-4年前に購入した素のESP8266-WROOM2が幾つかあるのですが、うまくプログラムの書き込みが出来なくて、このままでは廃棄かな? 今更メンドクサくなってしまいました。

参考にした記事; 
 WeMos D1 (ESP8266) を動かす
 Get started with Arduino[D1/D1 mini series] 
   ESP8266の真骨頂Deep-Sleepモードの使い方

   ESP-WROOM-02のDeep-sleepはどれだけ寝ていられるのか 



====== Sketch =======

/*
    This sketch establishes a TCP connection to a "quote of the day" service.
    It sends a "hello" message, and then prints received data.
*/

#include 
#include 

#ifndef STASSID
#define STASSID "XXXXXXXX"
#define STAPSK  "YYYYYYYYYYYYY"
#define IDENTIFIER "Garden Center"




//#define IDENTIFIER "Garden East"
//#define IDENTIFIER "Garden West"
#endif
#define DHTPIN 14
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

const char* ssid     = STASSID;
const char* password = STAPSK;
const char* Identifier = IDENTIFIER;

const char* host = "192.168.1.3";
const uint16_t port = 80;

void setup() {
  Serial.begin(115200);
  // We start by connecting to a WiFi network
  /* Explicitly set the ESP8266 to be a WiFi-client, otherwise, it by default,
     would try to act as both a client and an access-point and could cause
     network-issues with your other WiFi-devices on your WiFi-network. */
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  // dht to start
  dht.begin();
}

void loop() {
  // Serial.print("connecting to ");
  // Serial.print(host);
  // Serial.print(':');
  // Serial.println(port);

  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  if (!client.connect(host, port)) {
    Serial.println("connection failed");
    delay(5000);
    return;
  }

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    delay(100);
    return;
  }
    // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C\t");
  //Serial.print(f);
  //Serial.print(" *F\t");
  Serial.print("; Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Heat index: ");
  Serial.print(hic);
  Serial.print(" *C ");
  // Serial.print(hif);
  // Serial.println(" *F");

  // WEB serverにデータをアップロードする。
  String url = "/weather/weather_log.php";
        url += "?location=" + String(Identifier); // ID to identify location
        url += "&temperature="+String(t);
        url += "&humidity=" +String(h);
  Serial.print("Requesting URL: ");
  Serial.println("GET "+url);
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                "Host: " + host + "\r\n" +
                "Connection: close\r\n\r\n");
  delay(50); 
  // Read all the lines of the reply from server and print them to Serial
  Serial.println("Returned message from server: ");
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
  client.stop();
  // 30分deepsleepする。
  ESP.deepSleep(30*60*1000*1000, WAKE_RF_DEFAULT); // 60*1000*1000 = 1min, 30 min
  delay(1000); // execute once every 5 minutes, don't flood remote service
}
 







2019年7月11日木曜日

MLA用コンデンサ ver 0.9

取り敢えずアクリル板の工作でコアの部分だけアセンブルして、全体をまとめて採寸、容量測定などをしてみました。
 
結果; 
 最大容量 181.4 pF
   最小容量  13.5 pF
   最小容量から最大容量までにかかる時間 19 sec
 という結果となりました。 容量の再現性は非常に高く、満足できるレベルでした。
 10KV以上の耐圧を見込んでいるのですが、手元に試験装置が無いので、近々誰かに頼んで測定してみることにします。
 アセンブルの過程で、駆動軸を、M3の長ネジ、4φのすべりネジ、M6の長ネジの3種類を実験してみましたが、
 当然のことながら4φのすべりネジが最も快調でした。 
 M3の長ネジは動作はするのですが、ピッチが0.5mmと細かくステッピングモーターのメリットが相殺されてしまいます。 
 M6の長ネジはピッチが1mmと4φのすべりネジと同じなので期待したのですが、ステッピングモーターの軸3φとのジョイント用にフレキシブルジョイントが入手できなかった為か、スムースに動かず難があり、ちょっと使用できる状態にはなりませんでした。 
すべりネジは高価なので、M4の長ネジ(ピッチ0.75mm)で代替できないか、現在実験中です。 うまくゆけば、これにしたいと考えています。

 コアの部分で300X100X80mm位の大きさになりますので、全体として320X150X100mm位の大きさに収まる物が出来ると思います。

容量を除いて満足できる結果だったのですが、当初期待していた容量が出ていない(30pF ~ 350pFを期待していたのですが)ので、色々検討してみたのですが、どうも外と内のパイプの間隔が広すぎる為におこるようです。
20φ1mm厚のパイプの内径は18mm,内側のパイプは15.88φなので、中心が揃っていれば1.06mmの間隔ということになりますが、内側のパイプは外側のパイプにもたれ掛かる状態になりますので、最小:フィルムの厚み、最大:2.12mmということになります(
最初のあたり試験で単に寝かせた太いパイプにポリイミドフィルムを張り付けた細いパイプを入れて容量を測定ー中心を維持することはしていなかったことが原因で予想外の結果が出たようです)。 
どうも2mm位で計算させるとラシイ値が出てきますので、容量を稼ごうとすると、パイプ径の組み合わせの再検討が必要となりそうです。 フィルムは50μなので接着層を加味して3~4重に巻いても高々300μ位ですので、20φの代わりに19.05φ0.8mm(内径17.45φ)に変更して月内に再度挑戦してみることにします。

 Arduinoの方は実にすんなり、快調に動いてくれて、大満足です。 周波数プリセットや、SWRによる自動同調も組み込み可能だと思われますので、今後給電方法なども含めて検討課題となります。

//  For use of DRV8835+SPG27-1101
//  Author  Ken Yamada, JA2IYJ
//  Date:  2019 July 3rd. V0.5 Initial version.
//              July 11th V1.0 Zero_sensor added and bandled to the workable protype hardware.
//
#include

#define TRUE 1
#define FALSE 0
#define MOTOR_1 8
#define MOTOR_2 9
#define MOTOR_3 10
#define MOTOR_4 11
// digital address それぞれをボタン、センサーにアサイン
#define ZERO_SENSOR 13
#define UP_BUTTON 2
#define DOWN_BUTTON 3

// 以下3つ重要!
#define PITCH 1.0 // mm/rotate
#define LENGTH_2_MOVE 93  // mm 必要な移動距離
#define STEPS_PER_REV 120  // SPG27-1101 specification


long currentPosition = 0;  // 絶対値 ... 動作開始時にsetupで起点0にされる
long maxPosition;   // setup()で、#defineに定義された数値から計算
boolean toggle1 = FALSE;
boolean toggle2 = FALSE;

// stepPerRotate は素のモーターの一回転当たりのstep数の様です(ギアの事汎用では顧慮できないもんね)
//const int stepsPerRotate = 20;// SPG20-1332ス テップ数 = 480 ギア比1:24 hence 20
const int stepsPerRotate = 12;// SPG27-1101 ステップ数 = 120 ギア比1:5 hence 24 でも12でないと動かない! 何故?

Stepper myStepper(stepsPerRotate, MOTOR_1, MOTOR_2, MOTOR_3, MOTOR_4);

void setup(){
  long start_t;
  long end_t;
  Serial.begin(9600);
  pinMode(ZERO_SENSOR, INPUT_PULLUP); //内部pullup抵抗でHighになっている
  pinMode(UP_BUTTON, INPUT_PULLUP); // 手動制御用のUp/Down ボタン High
  pinMode(DOWN_BUTTON, INPUT_PULLUP); // 手動制御用のUp/Down ボタン High
//  start_t = millis();
  resetCurrentPos2Zero();  // currentPositionを0に戻す(ZERO_SENSORがLOWになるまでCCWする
//  end_t = millis();
//  Serial.print( "== reset took ");
//  Serial.print( end_t - start_t);
//  Serial.println( " millisec");
  maxPosition = LENGTH_2_MOVE/PITCH*STEPS_PER_REV;
}

void loop(){
  long start_t;
  long end_t;

  myStepper.setSpeed(2500); // 2500位まではOKの様です。
  //Serial.println("Start ... ");
 // Serial.print( "toggle1 = ");
 // Serial.print( toggle1 );
 // Serial.print( "   toggle2 = ");
 // Serial.println( toggle2 );
 // Serial.print( " currentPosition = ");
  //Serial.print( currentPosition );
  //Serial.print( "     MaxPosition = ");
  //Serial.println( maxPosition );
 

  if( digitalRead(UP_BUTTON) == LOW || toggle1 == TRUE){
    toggle1 = TRUE;
//    start_t = millis();
    while( digitalRead(UP_BUTTON) == LOW && toggle1 == TRUE && currentPosition < maxPosition ){
      myStepper.step(1);
      currentPosition++;
    }
    end_t = millis();
 //   Serial.print ( "....." );
 //   Serial.print ( end_t - start_t);
 //   Serial.println( " .... millisecond took");
 //   delay(10000);
  }
  if ( digitalRead(UP_BUTTON) == LOW && toggle1 == TRUE ){
    toggle1 = FALSE;
    while ( digitalRead(UP_BUTTON) == LOW && currentPosition < maxPosition){
      myStepper.step(1);
      currentPosition++;
    }
  }
  if ( digitalRead(DOWN_BUTTON) == LOW || toggle2 == TRUE ){
    toggle2 = TRUE;
    while( digitalRead(DOWN_BUTTON) == LOW && toggle2 == TRUE && currentPosition > 0 && digitalRead(ZERO_SENSOR) == HIGH ){
      myStepper.step(-1);
      currentPosition--;
    }
  }
  if ( digitalRead(DOWN_BUTTON) == LOW && toggle2 == TRUE ){
    toggle2 = FALSE;
    while ( digitalRead(DOWN_BUTTON) == LOW && currentPosition > 0 && digitalRead(ZERO_SENSOR) == HIGH ){
      myStepper.step(-1);
      currentPosition--;
    }
  }
  stopMotor();
  delay(100);
}
void stopMotor(){
  digitalWrite(MOTOR_1, LOW);
  digitalWrite(MOTOR_2, LOW);
  digitalWrite(MOTOR_3, LOW);
  digitalWrite(MOTOR_4, LOW);
}

void resetCurrentPos2Zero(){
  myStepper.setSpeed(2500);  // As fast as possible
  while ( digitalRead(ZERO_SENSOR) == HIGH ){
    myStepper.step(-1);
  }
}
int moveAbsPos2(long pos){
  if (pos < maxPosition) {
    myStepper.step(currentPosition - pos);
    currentPosition = pos;
  } else {
    return -1;
  }

}
int incrementPosBy(long pos){
  if (currentPosition + pos < maxPosition) {
    myStepper.step(pos);
    currentPosition = currentPosition+pos;
  } else {
    return -1;
  }
}
int decrementPosby(long pos){
  if (currentPosition - pos > 0 ){
    myStepper.step(-pos);
    currentPosition = currentPosition - pos;
  } else {
    return -1;
  }
}


 

2016年1月26日火曜日

ESP-WROOM-02を弄ってみる

ESP-WROOM-02にはArduinoが内蔵されているしWifiの技適も通っているので、これを使ってサーバ上のデータロガーにデータを送ることを考えてみる。 というわけで、ESP-WROOM-02でググってみると、同じようなことを既に実現されている方が数多居られる事がわかったので、取りあえず、ここの記事を手本として利用させていただき、まずは実験。
USB2.0の供給電源では不安がありそうなので、別途5V電源を用意して、5V->3.3Vとして取り敢えず動くことを確認する。
使用したESP-...はマイクロテクニカの物


1)ATコマンドで動くか?
  実行モードで動かしてみると、ATコマンドの一部は受け付けるが、肝心のAT+CWLAPなどを入れるとErrorと返ってきてWiFiの動作が確認できません。 (原因は不明)

2)Arduinoとして動くのか? 
「おい、おい、Wifi出来ないの?」ということで、Arduinoとして動くのか恐る恐る確認。 Arduinoの定石(?)pinMode(13,OUTPUT)でLEDをつけたり消したり。 プログラムモードに切り替え、リセットスイッチを一旦押してプログラムをロードしてやると「動くジャーン!」 どうもモジュールは問題なさそう。

3)ではWifiとして使える? 
 ATコマンドがうまく行かなかったがプログラムは動きそうなので、WiFiサーバを実験してみる。

ソー スはサンプルスケッチから持ってきて、ピンを2から13に変更して2)で試験した状態のままプログラムをロード。動かしてみる。  「お、接続できるじゃん!」 で、Firefoxから 192.168.1.21/gpio/1にアクセスすると、「やったね。LED点灯した。」
ということで、 一応使えそうです。



今度は、温度湿度センサーから、サーバのデータロガーに定期的にデータを送る実験をして、うまく行けば、庭の温度湿度を定期的に観測するステーションを作ることにします。 これも、制作例が興味本位の Trial 安堵 Errorにありましたので、参考(丸写し?)にさせていただく予定。 deep sleep モードで1時間に一回程度のアップロードで、単3電池でどの位持つのか興味がありますねー。 屋外での使用になると、電子回路の動作だけでなく、耐候性とか別の要素も必要になってきますし、WiFiですので、密封した缶に入れるわけにもいきませんし、、、。

と、取りあえず「WiFiが動く」ことを確認したので、センサーとのインターフェースを考えて、、、。


2015年9月13日日曜日

Arduinoをちょっと触って見る。

暫く仕事で余裕もなかったので弄っていなかったけど、コンディションも悪いので久しぶりにArduinoで並行輸入のGPSと秋月で買ったAE-BME280を動かししてみました。
GY-GPS/NEO6MV2
  TinyGPSで動かしてみましたが、「げ、動かない」。 参照
  Simple_testで "** No characters received from GPS: check wiring **"が出てきてしまう。
 後で、再度 test_with_gps_deviceで再実験することにしてみよう。

  これもだめ、、、。 テスター噛ましてみると20mA~25mA流れていて、規則的に電流量が増減しているので、動作しているようにも見えるのですが、いずれにせよ ss.available()がFalse返してくるのでは手のつけようがないです。

 しかし、ハードに問題があるときはどうやって検証するんだろう?

で、簡単な処でAE-BME280で実験してみることに。 取り敢えずJ1/J2/J3全部半田でショートさせI2Cで実験。 これはSketchをここからコピーして使用。  こちらはすんなり動作。 BME280についてはWEBにも多くの書き込みがあるので、安心して使えますね。


で、何でこんな事しているかというと、外部環境をリモートでモニター出来るようにしないと、リモートステーションの安全管理ができないだろうから、そんな環境の構築技術を少し勉強しておこう、ってなわけです。  できれば、GPSの経度緯度高度と時間情報をくっつけて、温度、湿度、気圧、風速、、、等の情報を定期的に発信するWEB発信装置に仕立て上げる? 或るいはネット上の要求に答えてその時点の環境情報を返してくるWEB発信装置かな? 
 ま、この位の事は誰でも考えるようで、 Netatmo ウェザーステーション NET-OT-000001というのがありました。無線Lanでデータ要求に対して情報を返してくるようです。 書き込みに農家が温室で使用していると思わせるような事が書いてありましたが、無線LanServerが必要だし、これ自体1台2万円では、些か投資に対するリターンに?が付きます。 学生時代にこんなものがあれば、私も研究職続けていて、ちょっとは真面な仕事していたかもしれません、なーんちゃって。 (ま、これはありえなーい、かな)
 
 アンテナの垂直方向の電界強度パターンって実測があまりないので、AruduinoのA/D機能とAD8307使った電界強度計をドローンに乗っけで、GPSの位置、高度情報と電界強度を定期的に無線Lanで送ってくる(SDカードにメモリでもいいですけど)ような事もしてみたいですねー。 市販のドローンってGPSデータを取り出して利用することはできるのでしょうかね? インターフェースが問題か?

 まー、実力とやる気から、どこまで出来るかはわかりませんが、Arduinoが提供してくれる環境は、そんな夢を「やってみようかな」って気持ちにさせてくれるので、気に入ってます。 
 しかし、CもJavaもいつも書いていないと忘れちゃいますねー。 20年程、どっぷり使っていたはずなのに、ちょっと離れていると、中々、、、。 Algol系の言語なので、C、Java、Python、、、と殆どの言語は読めますが、自由に書くとなるとちょっと違うのは普通の言語と一緒。 ま、ドイツ語くらいのレベルかな、、、。

余談で、ARRLの"Arduino Projects for Amateur Radio"に出ていたExpressPCBをダウンロードして使ってみましたが、ExpressSCHという回路図を書くプログラムも一緒に入っており、SCHの回路図とExpressPCBにリンクを張る事を推奨する、とあったので、つい「え、Auto Routingしてくれるの?」と早とちりで、リンクしてじっと待っても何にもしてくれない。 当たり前ですよね。 「私バカよねー」の世界でした。  なんかFreeの物でもAuto routingまでしてくれるような物もありそうな記事を見たことがある気がするので、探してみようかな?

PLLのVFOの基板(Ham Journal No.18)を書いたときに両面基板の配線図を書くのに苦労したことを思い出します(それがきっかけでPCを、それも6502の1ボードを始めたのですが、、、)。

 "Arduino Project ..."はかなりハード寄りで、基板のデザインとか、どうやって物理的に作るとかに、中心があるような気がして、個人的に期待していたのとは、少し違うように思います。 でも、一般論としてソフトが好きではない無線家さんにArduinoを普及させる為の本、という事では良いのかもしれません。



   

2015年8月20日木曜日

arduino を使ってみることに、、、

arduinoってのがある事に何かを読んでいて気が付いて早速ググってみると、「おー、色々あるし、ちょうどやりたい事が簡単に出来そう」という事で早速、アマゾンで「Arduinoを始めよう」と「Arduinoで計る、測る、量る」を買ってもう少し詳しく理解を試みる。 
「あー、基本的にはCとかJavaでI/Oを簡単に扱えるようになっているんだ」という理解で、Arduino Unoを買って、Windowsに繋いでみる。
「あれ?動かないよ」「ひょっとしてUSB<->RS232cの所為? 何しろLogger32やFlex6500、ローテータの制御でComポートは大量に消費されていますので、、、」 でラップトップで実験してみると問題なく動作します。 「やっぱり、Comポートの所為か。 しかし別のPC立ち上げるのも面倒だ」

ということで、サーバとして動かしているFreeBSDで動かして、これをWindowsからXlaunchでアクセスして使う方法を試みることにする。 
FreeBSD 10.0 Stableに最新のPortコレクションを入れ、/usr/ports/devel/arduinoをインストール。幾つかインストールされているバージョンとの齟齬があり、途中で止まった。 make deinstall; make install で実行した方が良いかも、、、。 /usr/ports/emulator/linux_base-c6のところで、「インストールされているカーネルのバージョンが、、、」というエラーが出て進まない。 ググってみると、「ちゃんとUpdate情報を読めよ!」との書き込みと共に
今回購入の本とArduino Uno
> # sysctl compat.linux.osrelease=2.6.18
>
> and add
>
>   compat.linux.osrelease=2.6.18
>
> to /etc/sysctl.conf.
という事で解決、、、、。
 
  
 
 
  
 
これでarduinoのコンパイルは終了。 早速起動すると? usbが見えていない! 
これもググってhttp://playground.arduino.cc/Learning/FreeBSD にたどり着き、
/usr/ports/comms/uardunoをインストール。
これでようやく/dev/cuaU0で見えるようになりました。
という事で Windows の画面からarduinoを弄って色々悪戯が出来るようになりました。 
目出度し愛でたし、、、で、何をするかといえば、色々考え中です。
 
二足歩行ロボットとか、ドローンとかは作らないと思いますが、、、。 
WindowsからXLaunchでFreeBSDにアクセスしArduinoを起動。

WSJT-x Super F/H

 WSJT-x使い始めてから随分経ちます(JT65しかなかった頃から)が、FT8のF/Hの使いがっ手の悪さ、MSHVの方が利用されている実態、F/HでFoxがマルチで返答すると信号が弱くなる、などからSuperF/Hが実装されましたね。  そこまでは、問題なく理解していたのですが...