2016年4月24日日曜日

DXCC

30年以上の中断があるのであまり自慢できるような状態ではありませんが、LoTw上のDXCC関連のパフォーマンス。 おー、もう少しでChallengeが1000になる!!(整理できてないので殆どLoTw様様+DXCCMixの申請ー現物しかない場合)
FT4JAは2-3日前にアップされていたので、これにVK0EKが5つ加わって、、、、。  夏位までにはChallengeも最低限の処はクリアかな? DigitalはJT65/JT9で結構EUが出来ていますがRTTYはカメさん状態ですねー、飛ばないのか、周りが強すぎるのか、、、。
Challenge3000を目指しているOMの話はおいておいて、Challengeは1500位までは何とかなるけど、2500を超えると急激に大変になりそうですねー。300x8=2400なので80mから10mまで300やっても2400にしかならない! 160m, 6mとEMEと総動員してやっと3000を越えられるのかな? 執念と継続性に尊敬してしまいますねー。

Account Status

DXCC
Award
New LoTW QSLs LoTW QSLs in Process DXCC Credits Awarded Total
(All)
Total
(Current)
Mixed * 4 0 319 323311
CW 69 0 184 253253
Phone * 19 0 265 284274
Digital 77 0 59 136136
80M 0 0 3 33
40M 1 0 7 87
30M 0 0 3 33
20M 60 0 163 223219
17M 105 0 79 184184
15M 36 0 214 250244
12M 65 0 104 169169
10M 56 0 107 163163
Challenge 323 0 669 ---992

2016年4月21日木曜日

Palmyra DXpedition w/ Flex6500

PalmyraのDXpeditionにFlex6500とMaestroの試作機が持ち込まれた事がcommunityに報告されていて、ここにも転記しましたがTCDXAのPalmyra DXpeditionの報告書にも記載があり、communityにリンクが張られていましたので、ここにもリンクを張っておきます。

Flex6500の使用感として「特にローバンドの静かさと、バンドスコープに示される信号の在りかは今までとは次元の違う世界」という記載がありました。 

あー!LowBandやりたいな~。 福井の田舎に帰ってやるか、静岡でヤドカリさせてもらうか、しかないけど、もう一台Flexが必要だなー、、、。 

> 昨日LoTwに1972-02-05の10mSSBのcfmが来ていました。W6LJK。  時々1970年代のcfmが来ますねー。 もう40年以上も前のQSOのcfmが今頃来るなんて、殆どタイムマシンの感じ。 

> インターネットの普及で誰でも匿名で言いたいことが不特定多数に発信できるようになり、結果として「炎上」だなんだと、問題が生じていますが、そう言えば、昔のSSBのパイルアップは酷かったですね。 ほとんど罵声の浴びせ合いで、「イモ!ひっこめ!」。 横浜辺りのガキが酷かったなー、彼らも もう赤いチャンチャンコ着て、相変わらず口汚くののしっているのかな、今度はネットで、、、。
パイルアップを聞いていて酷い運用をしている局は少なくありませんが、昔の様に罵声を浴びせるようなことはなくなりましたねー。 少し大人になったのかな? そういう自分も黙って我慢していますが、、、。
  匿名性が確保されると途端に、内向的で普段おとなしい人たちが滅茶苦茶な事を言い出す、と思っているのは私の偏見でしょうか? 
自分の発言には責任を持つ為にも匿名が出来なくすべき、少なくとも誰でも閲覧の出来る場所では、、、。 もし、匿名の書き込みを尊重する、というのであれば(そういう場合もありますから)、匿名の書き込みを受け入れる専用の場所(ゴミ箱)を用意したらどうだろうか? 最近はツイッターを全くやっていませんが、瞬間の思い付きで短くても文書を書き込むというスタイルでしかも匿名、というのはやはり宜しくないように思います。 憤懣のはけ口になってしまいます。



2016年4月17日日曜日

土壌水分計 続き

センサー部分と表示・WiFi部分の二つの構成にして、組み合わせることを考えていたので、表示・WiFi部分の作成をこの2日ほどしていたが、回路が簡単な割に手こずってしまい、やっと動くようになった。 後は、組み合わせて一つの装置のような体裁に仕上げる(これは電池の大きさと、筐体の作りの検討が必要なので試作するか否かは??)。
2.54mmピッチの変換モジュールとユニバーサル基板ではここまでなので、これを使ってセンサー出力電圧と土壌水分の変換テーブルの作成に取り掛かることにします。 
風乾土壌の作成は我が家では土壌を広げて置くような雨のかからない場所があるわけではないので、雨に濡れたりして意外と時間が掛かっています。

> 右の回路図のIO15に10KΩのプルダウン抵抗をつけておかないと、書き込みモードに移行してくれません。 何故?かはわかりませんが、取りあえず修正。
 




2016年4月16日土曜日

EP2A

09Z位から何の気なしにSpot見ていたらEP2Aが15m,17mCWでQRVしていたので、Get。
なんと15mのEPを持っていませんでした、、、。
A25UKが結構リポートされていますが、何故かアキマヘーン。 聞こえません。  これも17mが無いなー、、、。


2016年4月12日火曜日

春のDXpedition VK0EK, FT4JA

終わってしまいましたねー。
結局はVK0EKは10mから20mまで5バンド出来ましたが、FT4JAは20mを逃してしまいました。 例によって「2週間あるしもう少ししたら出来るさ」が仇でした。 E44YLは出来るような状態ではありませんでしたがJAからは出来たのでしょうかね?
これで暫くは暇ですねー。

 

2016年4月5日火曜日

VK0EK

10mのCWは気づくのが遅かったからかダメ。 DXAにJA2CXFのコールサインが、、、。「どこのPhかな? 15m, 12m?」 10mのCWを諦め、12m,15mのPhを聞いてみるが12m以外は弱いので、12mで呼んでみることに、、、。 しかし、これは中々、、、。 結局1時間ほど掛かってやっとこさQSO。
やっぱり、Phは嫌だね。
明日は10mのCWでQSOしたいものです。 ついでにFT4JAの20m CW。 それに出来ればE44YLも、、、。
> 4月6日: 10mのCWを05Z位から張っていましたが、聞こえず。 DXAを見ると06Z過ぎからSSBに出ているみたいなので聞いてみると、かすかすで聞こえました。 インバータ系のノイズで聞きづらい状態でしたが何とか言っていることが分かるので、5Khz dnで呼んでみると、10分ほどで返ってきました。
最も苦手のPhで10mが出来るとは!!  他のバンドは出れないので、これでVK0EKは終了。


土壌水分計 続き microSD, WiFi

SDカードのソケットではちょっと図体が大きすぎるのでmicroSDに変更してみたが、SPIモードですんなり動いた。 WiFiの接続が不安定で、今朝は問題なく繋がったがdeep sleep modeの試験をすると、繋がっていない。 バッファローのルータのログの意味が良く分からずに頓挫していたが、ググっていると「ログの意味は何ですか」というのを見つけました。それによれば
reason 15 = "4 way handshake timeout"で「ノイズやその他の理由によりWPA2/WPAなどの認証時、またはKey(鍵)更新時に行われる鍵交換通信がうまく行かず、タイムアウトしてしまったことが考えられます。この場合は認証が失敗するため、無線の切断が発生します。無線子機では、通信が切断されると、再び無線接続動作をやり直します」
ー>要するに波の送受信がうまくいっていない(弱い)。 
だったら、中継器を部屋につけてやってみたらどうだろう? ということで、実験台の直ぐそばに中継器を置いてみたら、すんなり接続できました。

ちょっと不安だったSDカードから接続情報を取得する方法も問題なく使えることが確認できました。
後は、回路を完成させて、動作試験と、土壌湿度の校正データの構築。 折角、風乾土壌を準備し始めたのに昨日の雨で振出しに戻りました(研究室と違い、自宅は土を広げる屋根のある場所などありませんので、、、)。 

>> ESP.deepSleepの受け取る引数のサイズを意識せずに、指定していたところ何か動作がおかしいので、ググってみたらuint32だと!! これだとmicro sec単位での指定なので1時間がMaxということになりなります。 取りあえず30分毎に起きるようにすることにします。 ただ、これで単4電池2本でどのくらい持つのか、、、。


 SoilMoistureMeasurement


/*
 *  This sketch sends data via HTTP GET requests to data.sparkfun.com service.
 *
 *  You need to get streamId and privateKey at data.sparkfun.com and paste them
 *  below. Or just customize this script to talk to other HTTP servers.
 *
 */
#include
extern "C" {
  #include "user_interface.h"
}
#include
#include
#include
#include
#define SWITCH 15 // use pin 15 as the switch to temp/moist - Low: moist, High:temp

Sd2Card card;
ST7032 lcd;
const int chipSelect = 2;


char ssid[30]     = "Buffalo-G-4CC0";
char password[30] = "**********";
char Id[30] = "*************************";
char host[20] = "192.168.1.3";
const char* streamId   = "Baffalo-G-4CC0";
const char* privateKey = "";
const float vref = 1.00;  // ESP8266 ADC(Tout) reference is 1.00, declare globally
char conversionTable[100];  // Convert voltage to moisture (0 - 100) %

int measure_temp(){
  float offset = 0.424; // volts at 0 degree
  float v = 0.0;
  float vc = 0.00625;  // delta volts per degree
  uint ADC_Value = 0;
  float temp = 0.0;
  int i;
  for(i = 0;i < 30; i++){
    ADC_Value = system_adc_read();
    v = float(ADC_Value)/1024.0 * vref;
    temp = temp + (v-offset) / vc;
    delay(30);
  }
  return (int)temp/30;
}

void read_ssid(){
   // open the file for reading:
  File myFile = SD.open("ssid.txt", FILE_READ);
  char *s = ssid;
  if (myFile) {
    // read from the file until there's nothing else in it:
    while (myFile.available()) {
      *s++ = myFile.read();
    }
    *s = '\0';
    // close the file:
    myFile.close();
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening ssid.txt");
  }
}
void read_password(){
  File myFile = SD.open("password.txt");
  if (myFile) {
    char *p = password;
    // read from the file until there's nothing else in it:
    while (myFile.available()) {
      *p++ = myFile.read();
    }
    *p = '\0';
    // close the file:
    myFile.close();
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening password.txt");
  }
}
void read_Id(){
  File myFile = SD.open("Id.txt");
  char *p = Id;
  if (myFile) {

    // read from the file until there's nothing else in it:
    while (myFile.available()) {
      *p++ = myFile.read();
    }
    *p = '\0';
    // close the file:
    myFile.close();
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening Id.txt");
  }
}  
void read_host(){
  File myFile = SD.open("host.txt");
  char *p = Id;
  if (myFile) {
    // read from the file until there's nothing else in it:
    while (myFile.available()) {
      *p++ = myFile.read();
    }
    *p = '\0';
    // close the file:
    myFile.close();
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening host.txt");
  }
}
void setup_conv_table(){
  File myFile = SD.open("conv.dat");
  if (myFile){
    for(int i=0, j=0; i < 100; i++, j++){
      conversionTable[i] = myFile.read();  // put one byte into the table.  tobe binary 0 to 255 (8 bit)
    }
    myFile.close();
  }else{ // If no data available, make one to one fake one.
    for(int i=0, j=0; i < 100; i++, j++){
      conversionTable[i] = j;
    }
  }
}
int measure_moist(){
  float v = 0.0;
  uint ADC_Value = 0;
  float temp = 0.0;
  int i;
 
  for(i = 0;i < 30; i++){
    ADC_Value = system_adc_read();
    v = float(ADC_Value)/1024.0 * vref; // milli volts
    temp = temp + v;
    delay(30);
  }
  return (int)temp/30*1000; // rounded milli volts in decimal
  // return (int)conversionTable[(int)temp/30*1000)]; // In future, % moisture.
}

void setup() {
  Serial.begin(115200);
  delay(10);
  pinMode(SWITCH, OUTPUT);  // set SWITCH(IO15) pin as an output
 
  byte mac_addr[6];
  WiFi.macAddress(mac_addr);
  char buff[20];
  Serial.print("Mac address: ");
  sprintf(buff, "%02X:%02X:%02X:%02X:%02X:%02X",
    mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
  Serial.println(buff);
 
  Serial.print("Initializing SD card...");
  if (!SD.begin(chipSelect)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");
  Serial.println("");
  Serial.println("Started");

 // Read ssid, password, Id from SD card and put 'em to global variables
  read_ssid();
  read_password();
  read_Id();
  read_host();
  delay(500); //Why?, but need this, otherwise WiFi cannot connect to

  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  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());
 
  // Set up LCD display
  lcd.begin(8,2);
  lcd.setContrast(25);
  delay(40);
}
void loop() {
  // Display data to LCD first
  String s1;
  String s2;
  int temp;
  int moist;

  digitalWrite(SWITCH, HIGH);
  temp = measure_temp();
  digitalWrite(SWITCH, LOW);
  moist = measure_moist();
  digitalWrite(SWITCH, HIGH);
  s1 =  String(temp) + " C";
  s2 = String(moist) + " %";
  lcd.clear();
  lcd.setCursor(2,0);
  lcd.print(s1);
  lcd.setCursor(2,1);
  lcd.print(s2);
  Serial.println(" ====  Temp = " + s1 );
  Serial.println(" ==== Moisture = " + s2);
  /*
// Use WiFiClient class to create TCP connections 
  Serial.print("connecting to ");
  Serial.println(host);

  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }
 
  // We now create a URI for the request
  String url = "/data/data_logger.php";
         url += "?Identifier=" + Id;
         url += "&data1="+String(temp);
         url += "&data2=" +String(moist);
         url += "&data3=" +String("");
         url += "&data4="+String("");
         url += "&data5=" +String("");
         url += "&data6=" +String("");                    
  Serial.print("Requesting URL: ");
  Serial.println("GET "+url);

  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                  "Host: " + server + "\r\n" +
                  "Connection: close\r\n\r\n"); 
  delay(50);

  // Read all the lines of the reply from server and print them to Serial
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
 
  Serial.println();
  Serial.println("closing connection");
  */
  //DEEP SLEEPモード突入命令
  Serial.println("DEEP SLEEP START!!");
  //1:μ秒での復帰までのタイマー時間設定  2:復帰するきっかけの設定(モード設定)
  ESP.deepSleep( 60 * 1000 * 1000 * 60 * 3 , WAKE_RF_DEFAULT); // 3 hours
  //deepsleepモード移行までのダミー命令
  delay(1000);
  /*
  //  QRX
  for(int i=0; i < 60 ; i++){
    delay(1000);
  }
  */
}

2016年4月4日月曜日

FT4JA Juan de Nova

コンディションが悪いながら、今日は10m,12mのCWで立て続けに出来た。 SNが38に上がっていたおかげだろうか? しばらくはVK0EKの10m CW を狙ってみることにしょう。 あーE44YLも出来ればやっておきたいなー、cfmが出来ていないので、、、。
28050位でガヤガヤしていたのでFT4JAだな、と見当をつけて一生懸命ワッチするもノイズが酷くて聞こえない!パナアダプタでは-120dBm位がノイズフロアになっていて、いつもより良い状態なのに、と思いながら画面を煮たら、4バンドパナアダプタを開いていたのが(いつもはメイン以外はミューとしている)、17mの受信音がOnになっていた。 これをミュートしたら聞こえるジャーン!でQSO. 気が付くのに30分ほど掛かっていたのでヤバかった? いや、その間にビッグガンがやっているので、結果は同じかも。 複数バンド開いている時は気を付けなければ、、、。

4月の末までにはSDRの新しいバージョンが出るようなので、voice keyerが使えるようになってほしい! いまは使えないので、結果PhのQSOは少ないのです。 若い頃のように何時間もバカ声張り上げる元気はありません。


FT4JA

6m10m12m15m17m20m30m40m80m160m
PH          
CW          
RTTY          




土壌水分計の制作 続き

ESP8266は使い勝手が良く、結構思ったことが簡単に実現できるので気に入ってます。
今回は、測定値を表示するためのI2CDisplayとWiFiのアドレスやデータの校正情報を個別に保存できるようにSDカードの接続を実験してみました。
I2CもSDカードも実にすんなり使うことが出来るようになりましたが、肝心のBaffaloの無線LanのルーターがDHCPを出してくれないので、ここでとん挫。  Failed status 37って何ですか? reason code とかstatus codeがLogに吐き出されますが、これらのコードの説明が見つからないために中断です。
I2CとSPIを使い、尚且つToutを使ったADCに、更に温度計と水分計の切り替えの為の1ポートと、目いっぱいの利用で、左のような接続で実験していますが、問題はないようです。
SDカードの読み出しは
myfile = SD.open()
myfile.read()
しかないようなので、一文字ずつバッファに書き出してゆくまどろっこしいコードになりますね。
コメントアウトした部分(未完成)も含めて、備忘録としてアップしておくことにします。

 I2CDisplay_update.ino



/*
 *  The circuit:
 * SD card attached to SPI bus as follows:
 ** MOSI - pin 11 on Arduino Uno/Duemilanove/Diecimila
 ** MISO - pin 12 on Arduino Uno/Duemilanove/Diecimila
 ** CLK - pin 13 on Arduino Uno/Duemilanove/Diecimila
 ** CS - depends on your SD card shield or module.
    Pin 4 used here for consistency with other Arduino examples

 */
#include
extern "C" {
  #include "user_interface.h"
}
#include
#include
#include
#include
Sd2Card card;
const int chipSelect = 2; // IO2 not IO4

ST7032 lcd;

char ssid[30] = "*********************";
char password[30] = "#####################";
char Id[20] = "$$$$$$$$$$$$$$$$$$$";
char host[20] = "?????????????"; // host address ie. 192.168.100.100
File myFile;

float offset = 0.424;
float v = 0.0;
float temp = 0.0;
float vc = 0.00625;
float vref = 1.0;

void setup() {
  Serial.begin(115200);
  delay(10);

  byte mac_addr[6];
  WiFi.macAddress(mac_addr);
  char buff[20];
  Serial.print("Mac address: ");
  sprintf(buff, "%02X:%02X:%02X:%02X:%02X:%02X",
    mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
  Serial.println(buff);  // Check MAC address

  Serial.print("Initializing SD card...");
  if (!SD.begin(chipSelect)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");
  Serial.println("");
  Serial.println("Started");

  // Read ssid, password, Id from SD card and put 'em to global variables
  read_ssid();
  read_password();
  read_Id();
  read_host();
  /*

  // First connect to WiFi

  Serial.print("Connecting to ");

  Serial.println(ssid); 

  WiFi.begin(ssid, password );

//  WiFi.begin("Baffalo-G-4CC0","65rhwri3nnee" );

  while (WiFi.status() != WL_CONNECTED) {

    delay(500);

    Serial.print(".");

  }

  Serial.println("");

  Serial.println("WiFi connected");

  Serial.println("IP address: ");

  Serial.println(WiFi.localIP());

*/
  // Set up LCD display
  lcd.begin(8,2);
  lcd.setContrast(25);
  delay(40);
}


void loop() {
  // put your main code here, to run repeatedly:
  /*

  Serial.print("connecting to ");

  Serial.println(host);

  WiFiClient client;

  const int httpPort = 80;

  if (!client.connect(host, httpPort)){

    Serial.println("connection failed");

    return;

  }

  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(p);

  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);

  }



  Serial.println();

  Serial.println("closing connection");

  */
  String s1;
  String s2 = "*******";
  int temp;
  temp = measure_temp();
  s1 =  String(temp) + " C";
  lcd.clear();
  lcd.setCursor(2,0);
  lcd.print(s1);
  lcd.setCursor(0,1);
  lcd.print(s2);
  Serial.println(" ====  Temp = " + s1 );
  delay(1000);
}


int measure_temp(){
  uint ADC_Value = 0;
  float temp = 0.0;
  int i;
  for(i = 0;i < 30; i++){
    ADC_Value = system_adc_read();
    v = float(ADC_Value)/1024.0 * vref;
    temp = temp + (v-offset) / vc;
    delay(30);
  }
  return (int)temp/30;
}
void read_ssid(){
   // open the file for reading:
  myFile = SD.open("ssid.txt", FILE_READ);
  char *s = ssid;
  if (myFile) {
    Serial.println("ssid.txt");

    // read from the file until there's nothing else in it:
    while (myFile.available()) {
      *s++ = myFile.read();
    }
    *s = '\0';
    // close the file:
    myFile.close();
    Serial.println(ssid );
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening ssid.txt");
  }
}
void read_password(){
  myFile = SD.open("password.txt");
  if (myFile) {
    Serial.println("password.txt");
    char *p = password;
    // read from the file until there's nothing else in it:
    while (myFile.available()) {
      *p++ = myFile.read();
    }
    *p = '\0';
    // close the file:
    myFile.close();
    Serial.println(password);
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening password.txt");
  }
}
void read_Id(){
  myFile = SD.open("Id.txt");
  char *p = Id;
  if (myFile) {
    Serial.println("id.txt");

    // read from the file until there's nothing else in it:
    while (myFile.available()) {
      *p++ = myFile.read();
    }
    *p = '\0';
    // close the file:
    myFile.close();
    Serial.println(Id);
  } else {I2c
    // if the file didn't open, print an error:
    Serial.println("error opening Id.txt");
  }
}  
void read_host(){
  myFile = SD.open("host.txt");
  char *p = Id;
  if (myFile) {
    Serial.println("host.txt");

    // read from the file until there's nothing else in it:
    while (myFile.available()) {
      *p++ = myFile.read();
    }
    *p = '\0';
    // close the file:
    myFile.close();
    Serial.println(host);
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening host.txt");
  }
}

アンテナ切り替えの自動化 (続き)

 調子よく動いていると思っていたら、インジケータのLEDが次々と点かなくなってゆく、、、。 不精して、出力端子(14Vのon/off)にLEDを直列抵抗と入れていたのですが、これではダメっぽい。 LEDが死んでいる。 では、という事でFETのスイッチを入れて、ゲート電圧で検出して...