全世界で発生中。ATtiny85のボードがマネージャーから使えない事件!!

 

ATMEGA用書き込み装置がお亡くなりになったので、
 今度は自作しようと思った。

 

ATMEGA328PUの場合は簡単そうだったので、
 とりあえず、秋月で
  [111743]ゼロプレッシャーICソケット 28P
   を注文した。

あと、うちで御用達で使っているのが
 ATtiny85なんですね。8ピンのかわいいやつ。
 
 今使っているArduinoIDEを見ると、
  ボード設定が無かったので、
   こちらでご紹介している通り→https://miha.jugem.cc/?eid=202
 
  ATtiny85のボードを登録したんだけど出来ず。
   なんかエラーになっている。
  
  http://drazzy.com/package_drazzy.com_index.json が 正しく読み取れないとな・・・・

    で、あれこれ調べて・・・(再インストールとか色々やったあげくのはてにやっとたどり着いた)


https://github.com/SpenceKonde/ATTinyCore/issues/885
なんと、
 「https://drazzy。com/package_drazzy。com_index。json-SSL証明書は3日前に期限切れ」
そして
 『彼らがこれを修正するまで、手動でインストールできます。install。md
  スケッチブックの場所で、
  「ハードウェア」フォルダーがまだない場合は作成し、
   レポからそのフォルダーにzipを抽出します。
   私にとっては、「~ / Arduino / hardware / ATTinyCore-1。5。2」のように見えました』
 となっているぜ。
  
手動かー
 でも、zipファイルとかどっから持ってくるの?
 となり、

とりあえず、
 https://drazzy.com/package_drazzy.com_index.json をブラウザーで無理やり開いて
 その中にATtiny85の文字を見つけ出し・・
 
  一部抜粋

    {
     "name": "ATTinyCore",
     "architecture": "avr",
     "version": "1.5.2",
     "category": "Contributed",
     "url": "https://SpenceKonde.github.io/ATTinyCore/ATTinyCore-1.5.2.tar.bz2",
     "archiveFileName": "ATTinyCore-1.5.2.tar.bz2",
     "checksum": "SHA-256:35bb47dc378daea53524eca3fa3838a350a6cf3dde0f12f0117ce636a11f8eb3",
     "size": "344758",
     "boards": [
      {
       "name": "<b>Program via ISP or Serial:</b> ATtiny841/441, ATtiny85/45/25, ATtiny84/44/24, ATtiny1634, ATtiny861/461/261, ATtiny167/87, ATtiny43, ATtiny828, ATtiny88/48, ATtiny4313/2313"
      },
・・・・

 

以下のURL.tar.gzにたどり着く
 https://SpenceKonde.github.io/ATTinyCore/ATTinyCore-1.5.2.tar.bz2

 

これの中身を展開すると・・・以下の様であり、それなりに正しそうなので、
 これを
  ドキュメントのarduino/hardwareにコピー

 

ATTinyCore-1.5.2.tar.bz2
└─ATTinyCore-1.5.2
    │  .travis.yml
    │  avrdude.conf
    │  avrdude_conf.txt
    │  boards.txt
   
   略
   
    │          optiboot_attiny85_1000000L.hex
    │          optiboot_attiny85_11059200L.hex
    │          optiboot_attiny85_12000000L.hex
    │          optiboot_attiny85_14745600L.hex
    │          optiboot_attiny85_16000000L.hex
    │          optiboot_attiny85_18432000L.hex
    │          optiboot_attiny85_20000000L.hex
    │          optiboot_attiny85_7372800L.hex
    │          optiboot_attiny85_8000000L.hex
    │          optiboot_attiny85_9216000L.hex
   
   略
   
   
そして、ボードマネージャーを表示する操作を行うと・・・
 boards.txtがフォルダーにない といったエラーになった。


 なので、boards.txtをそれぞれの中にコピーしていき、BlinkLEDをコンパイル!!。


 しかし、あえなくコンパイルエラー
 なんか、ファイルが足りないっぽい。

 

boards.txtをコピっていったのが悪かったのかもしれない。

 

それならと、他のを参考にしつつ
 間にディレクトリを一つ追加する。
  具体的にはhardwareの下に tiny を追加して
 
 arduino/hardware/tiny/ATTinyCore-1.5.2
                │  .travis.yml
                │  avrdude.conf
                │  avrdude_conf.txt
                │  boards.txt
            
               略
として再起動
 再度BlinkLEDをコンパイル。
 
 成功!!

とりあえず、環境は合っている・・・とする。・・・様な気がする。


■書き込み回路 
 
 こちらを参考にして接続
 
  https://jcomet.com/attiny85-1-setting/577/

 

■ブートローダー書き込み時の設定
 
 以下のあたりを気をつけて
 
  ボード:ATiny25/45/85(No nootloader)
  Chip:ATtiny85
  ClockSource(Only set on bootload):8MHz(internal)
  シリアルポート:COM15(自分の環境に合わせる)
  書き込み装置 ARDUINO as ISP

  

  
  
  
  
  

■ARDUINO-IDEのツールから
 
 ブートローダーを書き込む
 
  成功!!
 
 
  
■Lチカなんですが、
 ATtiny85ちゃんは デジタルポート少ないんで、
  1番のポートを使うことにして
  プログラムは以下の感じ
  
  書き込みはスケッチから「書込装置を使って書き込む」
  
   void setup() {
     pinMode(1, OUTPUT);
   }
   
   void loop() {
     digitalWrite(1, HIGH);
     delay(100);
     
     digitalWrite(1, LOW);
     delay(3000);
   }
  
 3秒に1回ピカッと光って成功です。

 


 
■まとめ(ArduinoIDEに手動でボードを追加する方法。今回はATtiny85)
 
 URLは
  https://SpenceKonde.github.io/ATTinyCore/ATTinyCore-1.5.2.tar.bz2
 
 このファイルをダウンロードして
  arduino/hardware/tiny/ATTinyCore-1.5.2
   ドキュメント配下のarduino/hardware/に展開。
    ※このarduinoはスケッチの入っている場所。
  
 ArduinoIDEを再起動して
  ツールからボードを見ると
   選択できるボードが増えている。
   (ATTinyCoreが増えている)
 その中から
  ATiny25/45/85(No nootloader)を選択
   普通に秋月で買った場合はNo bootloaderでOKです。
   他のは何か拡張されているっぽいですけど未確認。
 
 ブートローダー書き込み回路で接続して
  今回の書き込みはArduinoにArduinoISPスケッチを入れて書き込み装置とする。

  (専用機はまた作る)

 
 ブートローダーを書き込み
  ツールからブートローダーを書き込む
 
 スケッチの書き込みは
  スケッチから書込装置を使って書き込む
 
 実行は書き込み装置から外して
  電源+とーとLEDなど接続してください
 
以上

電池の容量測定_INA219

 

エネループとか、他のメーカーでもニッケル水素電池系の
乾電池式の充電電池なんですが、
時々、充電失敗すること無いですか?

 

なんか、充電開始してすぐに点滅で何か異常を示していたりとか?
うちのPanasonicのだと、BQ-CC25っていう機種ですが、
 充電開始すぐに点滅する場合は
  ・間違って普通の乾電池をセットしている
  ・充電式電池だが劣化している
 のどちらからしい。
  by https://www.marutsu.co.jp/contents/shop/marutsu/datasheet/panasonic_BQ-CC25.pdf
   13ページ
 しかーし、同じ電池で適切に放電した後にもう一度充電器にセットすると
なにげに普通に充電できてしまって使えたりするのであります。
謎どぇすね。

 

自分の場合、電池が劣化しているとは思いたくないので
 適当に電球をくっつけて、数時間点灯させて、
  光が切れたり、
   光が弱くなってから外して再度普通に充電していたりしてましたが、
    なんとなく納得いかない。

なので、アナログの電流計とか繋げて
 上のように電球点灯させてみたり
  していたのですが、
   時々見に行ったりするのが面倒くさいとかありました。

それで、デジタルで出来たら良いのにーと思っていたのですが、
 INA219を使うことで可能らしいと最近気づいて
  電光表示でリアルタイムの電圧、電流、積算ワット数等など
   表示する装置を開発しました。

 

 

お名前はEmoWat's、エコなワットは交流用で。

 自分のは直流専用なエモーショナルなワッツです。

 

 

■回路図

 

 

 

得意のATMEGAとAQM1602Yを使った回路ですね。
 回路図とは色違いの表示機になってますけど。

 

■使用感としては

 時々見に行ったりするのは変わらないんですけど・・・

  その機能を実装するならば、何ボルトまで下がったら、

    止めるんですけど、

     何ボルトまでなのか謎なので、今のところ実装していません。

   目安としては1.2Vの電池であれば、1V切ったあたりか?

    と思っていますけど。見極めが難しい。


  ただし、実績の数字が出ますので、

   電池として何ワットぐらい使えるのかの目安にはなります。
    『まだ使える』と自信を持って使えるようになります。

 

■プログラム


// 
// 
 
#include <Wire.h>                      // ライブラリのインクルード
#include <Adafruit_INA219.h>
#include "ST7032_asukiaaa.h"

Adafruit_INA219 ina219;                // INA219オブジェクトの生成(アドレス0x40)
ST7032_asukiaaa lcd;

double MWH=0.00;
double MAH=0.00;
int DisplayModeFlag = 0;
unsigned long time_ms = 0;

void display(char *strBuf1, char *strBuf2)
{
  strcat(strBuf1, "                ");
  strcat(strBuf2, "                ");

  lcd.setCursor(0, 0);
  lcd.print(strBuf1);
  lcd.setCursor(0, 1);
  lcd.print(strBuf2);
}

void setup(void) 
{
  Serial.begin(115200);                // シリアル通信の開始
  ina219.begin();                      // INA219との通信を開始(初期化)
//ina219.setCalibration_16V_400mA();   // 測定レンジの設定
//ina219.setCalibration_32V_1A();
  ina219.setCalibration_32V_2A();

  lcd.begin(16, 2);
  lcd.setContrast(50);

  lcd.setCursor(0, 0);
  lcd.print("Emo Wat's");
  delay(2000);

  time_ms = millis();
}
 
 
void loop(void) 
{
  float shuntvoltage = 0;
  float busvoltage = 0;
  float current_mA = 0;
  float loadvoltage = 0;
  float power_mW = 0;
 
  shuntvoltage = ina219.getShuntVoltage_mV();        // シャント抵抗間の電圧計測
  busvoltage = ina219.getBusVoltage_V();             // 接続した回路の電圧計測
  current_mA = ina219.getCurrent_mA();               // 電流の計測
  power_mW = ina219.getPower_mW();                   // 電力の計測
  loadvoltage = busvoltage + (shuntvoltage / 1000);  // 負荷電圧の計算
  MWH = MWH + ((float)power_mW/360.0);
  MAH = MAH + ((float)current_mA/360.0);
  
  Serial.print("Bus Voltage:   "); Serial.print(busvoltage); Serial.println(" V");
  Serial.print("Shunt Voltage: "); Serial.print(shuntvoltage); Serial.println(" mV");
  Serial.print("Load Voltage:  "); Serial.print(loadvoltage); Serial.println(" V");
  Serial.print("Current:       "); Serial.print(current_mA); Serial.println(" mA");
  Serial.print("Power:         "); Serial.print(power_mW); Serial.println(" mW");
  Serial.println("");

  
  char strLoadVoltage[16];
  char strAmpere_mA[16];
  char strPower_mW[16];
  char strMWH[16];
  char strMAH[16];
  dtostrf((float)loadvoltage,6,2,strLoadVoltage);
  dtostrf((float)current_mA,5,1,strAmpere_mA);
  dtostrf((float)power_mW,7,1,strPower_mW);
  dtostrf((float)MWH,8,1,strMWH);
  dtostrf((float)MAH,8,1,strMAH);
  
  Serial.print("strLoadVoltage:  "); Serial.print(strLoadVoltage); Serial.println(" V");
  Serial.print("strAmpere_mA:  "); Serial.print(strAmpere_mA); Serial.println(" mA");
  Serial.print("strPower_mW:  "); Serial.print(strPower_mW); Serial.println(" mW");
  Serial.print("strMWH:  "); Serial.print(strMWH); Serial.println(" mWH");
  Serial.print("strMAH:  "); Serial.print(strMAH); Serial.println(" mAH");

  unsigned long keika_min = (millis() - time_ms) / 1000 / 60;
  unsigned long keika_hh = keika_min/60;
  unsigned long keika_mm = keika_min%60;
  
  char strHH[16];
  char strMM[16];
  if(keika_hh<1000){
    dtostrf(keika_hh,3,0,strHH);
    dtostrf(keika_mm,2,0,strMM);
  }
  else{
    strcpy(strHH, "---");
    strcpy(strMM, "--");
  }
  
  if(strMM[0]==' '){
    strMM[0]='0';
  }

  dtostrf((float)MAH,8,1,strMAH);
  Serial.print("keika_min:  "); Serial.print(keika_min); Serial.println("");
  Serial.print("hh:  "); Serial.print(strHH); Serial.println("");
  Serial.print("mm:  "); Serial.print(strMM); Serial.println("");

  char strBuf1[256];
  char strBuf2[256];

  sprintf(strBuf1, "%sV  %smA", strLoadVoltage, strAmpere_mA);
  sprintf(strBuf2, "%s:%s %smW", strHH, strMM, strPower_mW);

  display(strBuf1, strBuf2);

  delay(5000); //5秒

  sprintf(strBuf1, "AccA:%smAH", strMAH);
  sprintf(strBuf2, "AccW:%smWH", strMWH);
  DisplayModeFlag = 0;

  display(strBuf1, strBuf2);
 
  delay(5000); //5秒
}

ラジオRDA5807のソフトを改良2

 

昔の記事
 RDA5807のラジオ作成
 https://miha.jugem.cc/?eid=316


前の記事
 ラジオRDA5807のソフトを改良
 https://miha.jugem.cc/?search=RDA5807

 


ラジオ現役で使ってますけど、
 最近気づいたんですが、使っていると、なんか雑音が・・・
  音にザッ音が入る時があるなーと、
   で、一回電源切って入れ直してあげると
    安定するんですよね。


気のせいだと言い聞かせてしばらく使っておりましたが、
 これって、ハードが悪いんじゃねーかな~と。
  確か、ATMEGAのATMEGA328をXtal無しで使いたいために、
   本来3.3V駆動のRDA5807を5Vで動作させていたので・・・

    と思っていたんですが、

     本当はー3.3Vでも動くっすね。

      動かなかった原因はAVCCへの電源供給線が無かった為でした。(修正)

という理由で、
 今回3.3V化としてXtal追加しました。←これは不要だったと思います。(修正)
  あと、それだけじゃ駄目で、AVCCへの3.3V供給も追加しています。(こっちが原因)

それと、
 ロータリーエンコーダーのチャタリング防止にコンデンサーも追加しました。


回路図

 

 

 

ついでに、周波数選択時に使うSEEK機能を追加しました。

音の方はこれから試験ですけど、
 心無しか、いや、前よりも 断然良い音がする気がします。

 

スペックよりも大きい電圧でもRDA5807が動いていてくれて良かったです。

 

プログラム

 

#include "EEPROM.h" 
#include "ST7032_asukiaaa.h"
#include "radio.h"
#include "RDA5807M.h"

ST7032_asukiaaa lcd;

int old2=1;
int old3=0;
int old4=0;
float fHz = 79.7;   //FM泉
//float fHz = 77.1; ///FM仙台
//float fHz = 93.5; ///TBC
//float fHz = 82.5; ///NHK宮城
//float fHz = 76.2; ///仙台シティーFM
//float fHz = 78.1; ///BAY WAVE石巻 NG
//float fHz = 76.4; ///ラジオ石巻 NG
//float fHz = 77.9; ///エフエムいわぬま NG
float oldHz = 0;
long lastTm;
int modeMONO=false;
int nMode = 0;  //0=周波数1MHz
                //1=周波数0.1MHz
                //2=SEEK
                //2->4=ST/Mono
                //3->3=Volume

#define FIX_BAND     RADIO_BAND_FMWORLD
int nVolume = 1;
int VolumeSaveFlag = 0;

RDA5807M radio;

//
// address  0=周波数
//          1=ボリューム
void save_EEPROM(int address, int v)
{
  int address_h = address*2;
  int address_l = address*2+1;
  EEPROM.write(address_h, v/256);
  EEPROM.write(address_l, v%256);
  
  Serial.println("save");
  Serial.println(address_h);
  Serial.println(address_l);
  Serial.println(v/256);
  Serial.println(v%256);
}

int load_EEPROM(int address)
{
  int address_h = address*2;
  int address_l = address*2+1;
  int h = EEPROM.read(address_h);
  int l = EEPROM.read(address_l);

  int r = h * 256 + l;
  Serial.println(r);
  return r;
}
void displaySet()
{
    Serial.println("displaySet ---");
    lcd.setCursor(0, 0);
    if(nMode==0){
      lcd.print("FM Radio!     ");
    }
    if(nMode==1){
      lcd.print("FM Radio! *1  ");
    }
    if(nMode==2){
      lcd.print("FM Radio! SEEK");
    }
    if(nMode==3){
      lcd.print("FM Radio! VOL ");
    }
    if(nMode==4){
      lcd.print("FM Radio! S/M ");
    }
    if(nMode==0 || nMode==1 || nMode==2){
      prtHz();
    }
    if(nMode==0){
      lcd.setCursor(12, 1);
      if(modeMONO==true){
        lcd.print("MONO");
      }else{
        lcd.print("ST  ");
      }
    }
    if(nMode==3){
      char buf[16];
      lcd.setCursor(0, 1);
      lcd.print("                ");
      
      lcd.setCursor(2, 1);
      sprintf(buf, "%02d", nVolume);
      lcd.print(buf);
    }
    if(nMode==4){
      char buf[16];
      lcd.setCursor(0, 1);
      if(modeMONO==true){
        lcd.print("  MONO          ");
      }else{
        lcd.print("  STEREO        ");
      }
    }
}

void prtHz()
{
  char buf[21];

  Serial.println("prtHz");
  
  memset(buf, '¥0', sizeof(buf));
  dtostrf((float)fHz,6,2,buf);
  strcat(buf, "MHz");

  lcd.setCursor(1, 1);
  lcd.print(buf);

}
void setup(){
  Serial.begin(115200);

  Serial.println("start BuildNo 0.05-1");

//  save_EEPROM(0, 7710);
  int hz = load_EEPROM(0);
  Serial.println("setup 100");
  if(hz<0){
    hz=0;
  }
  fHz = (float)hz / (float)100.0;

  nVolume = load_EEPROM(1);
  Serial.print("volume=");
  Serial.println(nVolume);
  if(nVolume < 0 || 15 < nVolume){
    nVolume = 5;
  }
  
  Serial.println("setup 110");
  oldHz = fHz;
 
  delay(200);
  
  Serial.println("setup 120");
  
  radio.init();

  Serial.println("setup 200");
  
  //radio.debugEnable();
  radio.setBandFrequency(FIX_BAND, fHz*100);
  //radio.setBandFrequency(FIX_BAND, 77.1*100);
  radio.setVolume(nVolume);
  radio.setMono(false);
  radio.setMute(false);

  //lcd 初期化
  lcd.begin(16, 2);
  lcd.setContrast(50);
  //
  displaySet();
//  lcd.print("FM Radio! ");
//  prtHz();
//  lcd.setCursor(11, 1);
//  lcd.print("ST  ");

  //
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  pinMode(4, INPUT);


  lastTm = millis();
}

int nSeekFlag = 0;
void loop() {
//  lcd.setCursor(0, 1);
//  lcd.print(millis()/1000);

  //
  int nDisplayFlag = 0;
  int val2 = digitalRead(2);  //くるぐる
  int val3 = digitalRead(3);  //ぐるぐる
  int val4 = digitalRead(4);  //ModeSW

  //ぐるぐるの判定
  int plus = 0;
  int flag = 0;
  if(val2!=old2){
    old2 = val2;
    if(val2==1 && val3==0){
      plus = 1;
      flag = 1;
    }
    if(val2==0 && val3==0){
      plus = -1;
      flag = 1;
    }
  }
  
  //Serial.println(val4);
  if(old4!=val4){
    Serial.println("old4!=val4");
    delay(100);
    if(val4==1){
      nMode = nMode + 1;
      if(nMode > 4){
        nMode = 0;
      }
      Serial.println(nMode);
      nDisplayFlag = 1;
    }
    old4=val4;
  }
  if( flag == 1){
    if(nMode==0){
      if(plus==1){
        fHz = fHz + 0.1;
      }
      if(plus==-1){
        fHz = fHz - 0.1;
      }
      //Serial.println(fHz);
      nDisplayFlag = 1;
      prtHz();
      lastTm=millis();
    }
    if(nMode==1){
      if(plus==1){
        fHz = fHz + 0.01; 
      }
      if(plus==-1){
        fHz = fHz - 0.01; 
      }
      //Serial.println(fHz);
      nDisplayFlag = 1;
      prtHz();
      lastTm=millis();
    }
    if(nMode==2){
      if(plus==1){
        radio.seekUp(true);
        Serial.println("radio.seekUp()");
      }
      if(plus==-1){
        radio.seekDown(true);
        Serial.println("radio.seekDown()");
      }
      nSeekFlag = 1;
      nDisplayFlag = 1;
      //prtHz();
      lastTm=millis();
    }
    if(nMode==3){
      nVolume = nVolume + plus;
      if(nVolume>15){
        nVolume = 15;
      }
      if(nVolume<0){
        nVolume = 0;
      }
      radio.setVolume(nVolume);
      //Serial.println(nVolume);
      nDisplayFlag = 1;
      VolumeSaveFlag = 1;
      lastTm=millis();
    }
    if(nMode==4){
      if(modeMONO==false){
        modeMONO=true;
        Serial.println("modeMONO=true"); 
        nDisplayFlag = 1;
      }
      else{
        modeMONO=false;
        Serial.println("modeMONO=false"); 
        nDisplayFlag = 1;
      }
      radio.setMono(modeMONO);
      nDisplayFlag = 1;
    }
  }
  
  long now = millis();
  if((now-lastTm)>700){
    if(oldHz!=fHz){
      Serial.print("set:");
      Serial.print(fHz);
      Serial.println("MHz");
      radio.setMute(true);
      //radio.init();
      radio.setBandFrequency(FIX_BAND, fHz*100);
      //radio.setVolume(nVolume);
      //radio.setMono(false);
      radio.setMute(false);

      save_EEPROM(0, fHz*100);
      oldHz = fHz;
    }
    if(VolumeSaveFlag==1){
      save_EEPROM(1, nVolume);
      VolumeSaveFlag = 0;
      Serial.print("SaveVolume=");
      Serial.println(nVolume);
    }
    if(nSeekFlag==1){
      nSeekFlag = 0;
      nDisplayFlag = 1;
      int local_hz = radio.getFrequency();
      Serial.print("local_hz=");
      Serial.println(local_hz);
      fHz = (float)local_hz/100.0;
      prtHz();
    }

  }
  //
  if(nDisplayFlag == 1){
    
    displaySet();
    
    nDisplayFlag = 0;
  }
}

 

ESP32のMicroPythonではフラッシュメモリーをディスクとして扱えて
pythonのファイル読み書き命令でデータの保存ができる。


この、ファイルへ書き込める残りバイト数が知りたいと思ったんだけど。
なかなか情報がなくそれで正しいのわからない。

 

いろいろ探して見つけたos.statvfs()ですが、
 Python3では廃止されたとか
  不穏なこと言ってるし。

 

わからないなら実験ですよね。

 

micropythonのシステムを書き込んだ後に
 main.pyが5Kバイト、boot.pyが1Kバイトだけを残して
 他を全部消した時以下の表示になる。

 

 >>> import os
 >>> os.statvfs("/")
 (4096, 4096, 512505, 505, 0, 0, 0, 0, 255)

 

多分・・・4096が1ブロックの大きさ単位はバイト。
  512が全部のブロック、505が残りブロックと仮説を立てた。

 

そうすると、4096✕512が2Mバイトが最大書き込めるサイズとして
 小さいファイルは512個書き込めると仮説を立てる。

 

ギリギリ2メガ弱を書き込んだ状態

 >>> import os
 >>> os.statvfs("/")
 (4096, 4096, 512, 1, 1, 0, 0, 0, 0, 255)

 

この状態でMicroPyhonで数ファイル書き込みするとエラーになる。

Traceback (most recent call last):
  File "main.py", line 172, in <module>
OSError: 28

 

書き込み時のソースは
 f = open(file_name, "a")
 f.write(buf)
 f.close()


ちなみにエラーの後は残りのブロック数は0になる。
 >>> import os
 >>> os.statvfs("/")
 (4096, 4096, 512, 0, 0, 0, 0, 0, 0, 255)

 

1ブロックが4096バイトで、全部で512ブロック使える
ってことみたいですが。

 

小さいファイルを一つ書き込んで1ブロック全部使うってことでもないみたいです。
試してみたところだと、78バイトのデータを1235個書き込んだ状態で以下になる。
 >>> import os
 >>> os.statvfs("/")
 (4096, 4096, 512, 331, 331, 0, 0, 0, 0, 255)

 

書き込みできたバイト数
 78バイト✕1235ファイル=96330=約96Kバイト

 

消費したバイト数
 331ブロック✕4096バイト=1,355,776=1.3Mバイト


1ファイルあたり
 1355776バイト÷1235ファイル=1097=約1Kバイト

 

計算に誤差があると思うのですが、
 1ファイルあたり少なくとも1Kバイト使う計算になりそうです。

 

で、ここで、気づいたんですが、
 ファイルが沢山書かれた状態ですが、
  外部コマンドのampyが効かなくなってしまいました。

 

まずいなーと思い
 初期化したいと
  esptool.py --chip esp32 --port com6 erase_flash
 を打っても
  コネクションエラーになる。

 

ログに残していたファイル名を
 os.remove("filename")を使って一つ一つ削除するために、
  コマンドを羅列したテキストファイルをテラタームから流し込んで
  なんとか、元の状態まで戻して、
  元通りmicropythonが動くところまで戻りましたが、
   esptool.py --chip esp32 --port com6 erase_flashは駄目な状況です。

 

やっぱ、ESP32でそんな膨大なファイル数を書き込んではならないみたいですね。
 無理してそんな事しなくても他に方法あると思いますので。
  ファイルを分けないで処理する方法が良さそうです。

普通のボタン電池に充電すると危険ですので絶対にやめましょう

 

今日は雨ですね。
全国的に大気が不安定で雷注意報が広範囲で出ています。

さきほど、すっごい大きな音で雷が落ちましたね。


調べたら
  https://s.n-kishou.co.jp/w/charge/hires/radar.html?&type=thunder
約4.5Km先の山の方に落ちた模様でした。

 

雷といえば電気です。
電気といえばエネルギーですね。
このエネルギーを蓄えることができれば、とても良いのに。

このまま温暖化が進んで日本に雷がたくさん落ちるようになれば
 雷蓄電みたいな研究も進むんでしょうか?

 

というわけで、
ちょうど、ボタン電池が無くなったので、
充電池を作成して充電してみました。

 

 

 

充電式のボタン電池も売ってたりしますが

 普通の電池に充電してみるのは前々から興味があったんですよね。

 

何度か試していて、今回少し高めの1.7V寄りの1.6Vで充電した所、
 数時間経過後に「バッチーン」という音がして、爆発しそうでした。
 内部が膨れて外装に穴が空いたようです。
 燃えたりはしませんでしたが、危険です。

 

 

 

良い子はまねしないようにしましょう。悪い大人は自己責任でどうぞ(笑)。

 

そうは言っても上手く行くときは大丈夫で、
 電圧低めにして、具体的には1.5Vちょうどにして、
 数時間つないで充電後、普通に使えてたりします。
 当たり外れが有るみたいで、上のように
 1.7V寄りの1.6Vでも大丈夫なのは大丈夫みたいです。


 

 

ST32ボックス

 

前段の話。

 秋月のアンプキットをいくつか持ってたりしますが、
  https://akizukidenshi.com/catalog/g/g110240/
   とか
  https://akizukidenshi.com/catalog/g/g102419/
   とかなんですけど、どちらもBTLアンプです。
 
 スピーカーに接続する時は何も考えなく、
  RIGHTプラス、RIGHTマイナス、LEFTプラス、LEFTマイナスで合計4本の線が出てますので
   それぞれ間違えずにスピーカーの+と-に接続すれば良いんですけど。
 
 ヘッドホンに接続する場合に考え込んでしまった。
  ヘッドホンは3.5ステレオミニプラグで接続するので、
   端子が3つしか無いんですよね。
    RIGHT、LEFT、GND
 
 プリアンプの場合はGNDが共通しているので問題ないんですけど。
 
 BTL出力のRIGHT、LEFTのマイナスをまとめてしまっても良いのか?
 それは気持ち悪い。アンプを痛めるのでは?
  みたいな議論もある中、
   こんな記事
    https://oldmakers.blog.jp/archives/8943098.html
   とか
    http://cat0048.my.coocan.jp/BTL-HEAD/BTL-HED.htm
   の様にトランスを間にかまして接続すれば、
   交流成分のみ取り出して、出力側のGNDを共通化することができる。
   
  BTL出力をヘッドホンで聞く回路はこんな感じ。
  
  
  
  
  
前段の話その2

 色々調べていって、インピーダンスを合わせる的な考え方とか、学びつつ。
 秋月製品で「ST-32使用ヘッドホン出力⇔ライン入力昇圧トランスキット」
  https://akizukidenshi.com/catalog/g/g112341/
 というのを発見。
 ヘッドホン出力をラインのレベルまで上げてくれるというスグレモノ。
 確かyoutubeで見たことある。音がおっきくなるみたいです。
 
 ヘッドホン出力をLineレベルに上げる回路はこんな感じ
 
 
 
 
 

今回作るもの。
 前段の話を2つ書きましたけど。
 
 音の流れる方向が逆だったり、
  GNDを共通にしたかったり、そうでなかったりするので、   
   スイッチを付ける回路とか考えてみたんだけど
    複雑になるし、そんなに多くは使わない気もするので
     外付けのケーブルを工夫することで上記の2つの両方に対応する
     事にします。

 

買い足したもの

 RCAと3.5ステレオミニプラグ変換ケーブル
 
 
 
 
 RCA延長ケーブル
  
  
  
 ST32
 
  
 
 あと、箱と、接続用のRCAジャックですね。
 
 汎用的に使いたいのでRCAジャックであることが重要です。

 

回路図
 
 
 
使い方

 

名前を「ST32ボックス」としました。
で、これのつなぎ方を変える事で前段で書いた2つの事例に対応していきます。


「ST32ボックス」には4つのコネクタがあり以下のとおりです。
  1200Ω側RIGHT
  1200Ω側LEFT
  8Ω側RIGHT
  8Ω側LEFT

これと、買い足した「RCA-3.5ステレオ変換ケーブル」や「RCA延長ケーブル」を
 組み合わせて使います。

 

「BTL出力からヘッドホンへ接続」のつなぎ方
 
  
 
「ヘッドホン出力からLINE入力」のつなぎ方
 

  
 
 
上記のように接続することで、「RCA-3.5ステレオ変換ケーブル」の内部でGNDが接続されて
色々な使い方への応用が効くことになります。


ST32の周波数特性

 

  
 
 低音が伸びない、高音は伸びる?という特性があるみたい。

 
 
しかし、実際に聞いてみるとそんなに違和感無いというか
 聞こえればいいというか、数dbぐらいなんで。そんな感じですね。

 

常用するものでもないですし、
 これがあれば、BTL出力からヘッドホンに接続できるので安心です。

 

ヘッドホン出力からライン入力の方は、
 自分はあんまり使わないかなーと思いつつ、
  入力が少し足りないかなーという時に役立つかなーとか考えています。

 

 

 

 

ダイナミックマイク+オペアンプ-HDU14+NJM2737D

 

以前の記事の続きになります。
 https://miha.jugem.cc/?eid=380
 
以前の記事ではNJM4580を使用した2電源方式の定番で落ち着いた感じでしたが、
単電源方式の方がなにかと使いやすいので・・・
今回は、NJM4580と同等かも?な説明記事がついていたNJM2737Dと、
本当のダイナミックマイクとして売っているマイク部品(HDU14)で試していきます。

 

ダイナミックマイク(HDU14)の方はこんな特性で、

 

 

 低音はあんまり拾わないですね。
  実際に聞いてみてもわからんぐらいとは思います。
  オーディオにコダワリを持つ人はグライコなどで補正してもらうのが
  良いですよね。
  (こんなパーツレベルで使わない気もしますけどね。。。)

 

つなぎ方はこんな感じです。

 

 

 プラスとマイナスあります。極性に注意です。
 緑がマイナスで赤がプラス。


オペアンプIC(NJM2737D)は単電源方式の2回路入りです。

 


 電源はMAX7.0Vですね。推奨は1.8~6.0です。
 単電源方式を選んでます。LM358の差し替えで試します。

 

NJM2730Dの秋月の説明
 「NJM2737は1.8Vから動作する二回路入り単電源入出力フルスイングオペアンプです。
 入力換算雑音電圧はオーディオで定評のあるNJM4580やNJM5532と
 同等になるよう設計しており、低電圧、単電源動作のオーディオ用途に最適です。」
 となっております。期待感MAXですね。
 でもしかし、「HiFiオペアンプ」とは書いてないんですよね。
 何が違うんでしょう?
 Goole先生によると・・・
  『「Hi-Fi(ハイファイ)とは、
   英語の「High Fidelity(高忠実度、高再現性)」の略で、
   音響機器などにおいて「原音や原画に忠実な再現」という意味を
   持ちます。
   録音や録画し再生する場合に発生するノイズやひずみが
   最小限に抑えられていることを指し、音の歪みを最小限に抑え、
   完全かつ正確な可聴周波数の範囲で元の音源のサウンドを再現する
   オーディオのことを指します。
   生の演奏とその演奏をオーディオで再現したものとの違いが
   人間の耳で識別できない場合は、一般的にそのオーディオは
   HiFiオーディオであると言えます』
 なるほど。。
 
 生音とスピーカーからの音って明確に違う気もしますけど、
   聴き比べた事はないですね。
  部屋の中で映画とかyoutubeとか聞いてて、
   外で鳥が囁いていると外を確認しても鳥はいなかったり、
  逆に画像を停止するとその音も止まってしまったりするので、
   その時点でHiFi認定ですね。
 しかし、結局人が耳で聞いてどうなのっていう話でもあり、
  HiFiっていうのは人の主観である事が判明しました。
 注意 しかししかし、自分の耳は11000Hzぐらいまでしか認識できなく、
    あとはお察しください。m(_ _)m

 
前にブレッドボードで組んだ状態で保管しておきましたので、
 LM358からNJM2737に差し替えていきます。
 マイクも同じようにHDU14に差し替えます。

 

 

さて実際に聞いてみると、LM358よりは確実に音が良いです。
そして謎のノイズが・・・ノイズの原因を探っていくんですが、
HDU14に触っていると、謎のラジオらしき音声が入ってきます。

その音を頼りにAMラジオを起動してどの局か探っていくと、
地元のNHK第1放送が入っていました。

なんか、AMの電波を拾ってしまう様ですね。
その為のノイズのようです。

HDU14を元の普通のスピーカーに戻すと、
 AM波は入らなく普通にNJM4580と同等に聞こえるようになりました。


回路図 NJM2737D版

 

 

 LM358と同じです。

 

NJM2737Dの評価としては、現時点では単電源方式のオペアンプとして
 十分な性能を持っている事が確認できました。

 自分の所ではこれを定番のオペアンプとして使って行こうかなという所です。
 LM358はセンサー用でNJM2737Dは音声用という使い分けですね。
 前の記事の後日談で書いてたNJM2268Dとの違いは正直言ってわからないですね。

 

HDU14に関しては、外部からのノイズが乗りやすい事が判明しました。
 マイクの周辺を何らかの電磁波シールドで囲むなどの対策をしないと難しいのかな?
 という感想です。

 

ラジオ受信について

 HDU14のインダクタンスを測定すると、10mHぐらいになり、

 これに3μFのコンデンサーを組み合わせると、ラジオのAMの周波数になりますので、

 この為にラジオを受信してしまい、はからずもAMラジオになってしまっていたかもしれません。

 参考 

  LC共振周波数の計算 https://keisan.casio.jp/exec/user/1320287966

 

 

VUメーターの作成 LM358+DE1434

 

秋月で買い物するついでにVUメーターを買ってきて、例によってしばらく
放ったらかしにしておりましたが、ついに手を付けることに!!


写真

 

 

仕様

 

 

つなぎ方

 

 

デスクトップPCの音声出力端子に接続してPC側の音量を50%にして、
 VUメーターを最大にすると、時々赤部分まで触れる感じになります。
音楽をかけると振れすぎになるので、ボリュームを絞る感じになります。


■回路図

 

 

最後の整流?する部分に小さなコンデンサーをいれると、メーターの触れが緩やかになります。

 

■外観

 

 

箱はDAISOで購入したものです。
UVメーターはそのままだとつまらないと思い、
ロウソクLEDを仕込んでみました。

 https://miha.jugem.cc/?eid=350

5Vそのまま入れると光りすぎるので、2KΩの抵抗を挟んでいます。

 

 

 

 

JUGEMテーマ:電子工作

DELL-inspironにWindows11をクリーンインストールする方法2

 

前に同じマシンでWindows11をクリーンインストールに成功して記事にしていたので
 https://miha.jugem.jp/?eid=375

この記事通りに進めればあっという間に終わるはず・・・だったんですけどね。

 

DELLさんから提供されているOS Recovery Toolが途中で何のメッセージもなく消える。
 たぶん何かの条件で停止するようになっているんでしょうけど、
  操作者には何がなんだかわからず。の状況になりました。

 

コンピューターの世界では何故かトラブルが無くならない。

『思えば、複雑で変動する社会の中で何度もやり方を変えながら
 何度も試験を繰り返して一筋の手順を確立したんだけど
  時間の経過で環境が変わってしまって、いざ使うときに使えないと言った事はよく有ることだ。』

と思いつつも、またかーという思いですが。

 

ま、DELLさん自分からの申告によりツールを直してくれるとは思いますけど。


今回サポートチャットにて以下の手順を示してくれました。

 

--ここから--------------------------
かしこまりました。
お伺いしました状況から、本メディア作成ツールが正常に稼働できない可能性がございますため、
こちらの手順でWindowsOSを入れ直していただくことは可能でしょうか。

【1】メディア作成

 ■windows11のメディア作成LINK
 
  https://dell.to/4bF0ep2
 
 ■マイクロソフトのサイトにてWindows10メディアを作成する手順
 
 https://dell.to/3yA4Zzq
 
 ※Windows11用の手順がなく申し訳ございません。
 手順は同じでございますため、こちらのご参照をお願いいたします。

 

【2】IRSTドライバダウンロード、導入方法

 ■NVMe SSDにOSを再インストールする場合/IRSTドライバの導入手順
 
  https://dell.to/3VrPva3

 ※IRSTドライバを【1】【2】で使用したUSBメモリと同じUSBメモリに置きます際は、
 すでにダウンロードされているファイル以外の場所に置いていただけますと幸いでございます。
 例:USBメモリ内に「boot」などのファイルが置かれている状況となりますが、
 これらのファイル内にIRSTドライバを置かないようにお願いいたします

 

【3】初期化方法
 ■作成したディスクからの再インストール手順
 https://dell.to/4e6KqwY
 
 お手数をおかけしますが何卒よろしくお願いいたします。


--ここまで--------------------------

 

これに書いてあるとおりに実施っと。
少しわかりにくい場面もあったので少し補足して記録しておきます。

 

■Windows11のメディアの作成ですが、

 

現時点ではこんなページが表示されます。
https://www.microsoft.com/ja-jp/software-download/windows11?linkId=454074331

 

 


で、
クリックするのは赤枠ですが、
「Windows 11 のインストール メディアを作成する」の今すぐダウンロードをクリックします。


すると、「MediaCreationTool_Win11_23H2.exe」がダウンロードされますので、
起動すると良いです。そうしてUSBをセットして書き込みしてもらいます。


自分はKioxiaの32Gbを使いました。

 

■IRSTドライバダウンロード、導入方法の所ですが、
 最初の手順でDELLのサイトからダウンロードして、
 USBに保存しろと書いてますよね。
 
 まずダウンロードに関しては必要なものを指定して検索してってなるんですが、
 https://dell.to/3VrPva3 これを開いて。
 まず、自分のマシンの番号を入力して進む→ドライバーを探す→として
  OSをWindws11を指定してカテゴリにストレージを選択すると良いです。
   そうすると、インテル・ラピッド・ストレージ・テクノロジー用ドライバー
    が見つかるので、それです。
  Intel-Rapid-Storage-Technology-Driver_Y6R9T_WIN64_19.5.1.1040_A02_03.EXE
   が ダウンロードできるので、起動して「EXTRACT」しておきます。
  出力先を指定できるので、なるべく短いパスで指定します。自分の場合はc:¥tmpとか
  指定して開くと以下の感じになるので、
  C:¥TMP
  └─production
    └─Windows10-x64
      └─15063
        ├─Drivers
        │ ├─HsaComponent
        │ ├─HsaExtension
        │ └─VMD
        └─F6
          ├─HsaComponent
          ├─HsaExtension
          └─VMD
            └─f6vmdflpy-x64
  実際にWindowsインストール時にドライバ指定するのはVMDだったと思う。


  なので、上で作成したWindows11のインストールUSBにtmp等といった
  ディレクトリを作成してその中に入れておきます。
    C:¥Users¥nexus>dir e:¥
    ドライブ E のボリューム ラベルは ESD-USB です
    ボリューム シリアル番号は 569A-6A3B です
   
    e:¥ のディレクトリ
   
   23/12/04 (月) 16:34        128 autorun.inf
   24/06/02 (日) 12:40  <DIR>     boot
   23/12/04 (月) 16:34      442,062 bootmgr
   23/12/04 (月) 16:34     1,675,736 bootmgr.efi
   24/06/02 (日) 12:40  <DIR>     efi
   23/12/04 (月) 16:34      95,712 setup.exe
   24/06/02 (日) 12:40  <DIR>     sources
   24/06/02 (日) 12:42  <DIR>     support
   24/06/02 (日) 13:33  <DIR>     tmp     ←ここ


■初期化方法の所ですが、

 

 Windowsのインストール場所を選択の画面でshift+F10を押してdiskpartコマンドを
 使っていますが、自分の場合はm.2のSSDなので、
 ドライバーを認識させる必要がありました。
 
 手順は
  https://dell.to/3VrPva3
  ですが、少し違うかもなので、補足しておきます。
  
 このドライバーは上記のe:¥に格納したものですので、

 このドライバーを指定する必要があります。

 

 


 
 ドライバーの読み込み→フォルダー指定で
  上記例でいうとc:¥tmp→production→Windows10-x64→15063→Drivers→VMDを指定。

 
 
 
 
 
 そしてIntel RST VMD Controller A77F を指定してみました。

 


 すると、Windowsのインストール場所にM.2のSSDディスクが現れますので、
 それを指定して続行させます。

 

 

■Windows11セットアップの途中で「ネットワークに接続しましょう」で先に進めなくなる

 

 WindowsのインストールUSBから起動してディスクが認識して安心していると、
 確か、国とか言語の選択、キーボードの選択の後ぐらいの段階で
  ネットワークの接続がある。
   ここで、普通なら、近隣のWIFIのSSIDの一覧から選べるんだけど。
 この手順だと一覧が出てこない。

 しかも、中止する手段も無い。
 しばらく色々いじってみたけど、わからず。
 
 google先生に聞いてみると以下の操作でネットワークに接続しないで進めるとの事。

 SHIFT+F10(ノートのPCの場合SHIFT+Fn+F10とか)を押す。

 コマンドプロンプトが出るので
   oobe¥bypassnro
   上記コマンド入力後自動的に再起動されて、
  「インターネット接続しない」が選べるようになる。
  
 oobeってなに?って思ってgoogle先生に聞いてみると
 「OOBE 【Out-Of-Box Experience】
  概要 OOBE(Out-Of-Box Experience)とは、製品の購入後、
  箱から出して使用可能にするまでの一連の手順。
  また、その際に表示・操作する初期設定のための画面。」
 との事で、「ウービー」って読むみたいです。
 
 これを応用することでWindows11のアカウント設定をローカルアカウントで
 進めることが出来るそうです。
 →「https://atmarkit.itmedia.co.jp/ait/articles/2210/21/news023.html」
 

 

 なんとWindows10で上記コマンド使えず。2025/10/27

  次のコマンドで行けます。

  

  reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE /v BypassNRO /t REG_DWORD /d 1 /f

  shutdown /r /t 0

 

 
 このまま進めていったんWindows11のインストール完了。
 
 
■ドライバーが入っていないですね。
 
さてと、Windowsが入ったのでいつものツールをインストールしようと・・・ネットに繋がらない。
 
Windowsのセットアップの途中でWIFIに接続しなかった所から
 気になっていたのですが、
 Windows11標準の必要最小限のドライバーしか入っていないですね。
Microsoftから持ってきたインストーラーですからね当然といえば当然。
 
そういう所はDELL社はさすがです。
 機種ごとにドライバー一式ダウンロードできますので便利ですね。
  https://www.dell.com/support/home/ja-jp?app=drivers


そうは言うてもNWのドライバーだけダウンロードしてあと残りはWindowsUpdateで
 良いんじゃねーと思い、NW関連だけ入れてみたけど、なんか動かず。
  えいやーと片っ端から入れていってしまったけど。最後に入れたのがそれたっだ。
 
 
そもそも
 OS Recovery Toolさえ動けば全部自動だったんですけどね。

 自分なりには勉強になったので良しとします。元通り動くようになりました。満足です。
 色々参考になる部分有ると思いますので活用いただければと思います。

ダイナミックマイクとオペアンプ

 

昔、中学校のなんかの工作で「インターホン」なるものを
 作成した記憶があり。
 
その前にインターホンって何?
 という人も沢山いると思うので、
  wikiで調べてみたけど、なんか解説難しいので、
   テレビドアホンのテレビのないバージョン(声だけ)と考えてください。
 
それで、その構成ですが、
 スピーカー→アンプ→スピーカー
  って感じになっていたと記憶していて、
 
親機側のスイッチを押しながら、
 なにか話すと子機側から声が聞こえて、
 
親機側のスイッチを離すと、
 回路が入れ替わって、
  子機側の音が親機側から聞こえるという
   簡単な回路になっていた気がする。
   
子機側にもスイッチが付いていて、
 押すと親機側からブザー音が聞こえて、親機側の人が気づいて、
 
親機側の人がボタンを押しながら「はい〇〇です。」とか会話を開始して、
   最後に「どうぞ」と言いつつ、ボタンを離して
    子機側の人が話すって事になっていた。と思う。
 
上記のように同時には話せず、片方が送信中は片方が受信専用になる
  半2重通信ですね。

 

こんなの見つけました。

 https://www.marutsu.co.jp/contents/shop/marutsu/mame/145.html

  これの、片側通話方式その2ですね。
 
話している方のスピーカーがマイクの代わりになるってことですね。

 

ダイナミックマイク
 
 googleで聞くとAIが以下のように回答してくれました。
 

  空気の振動をコイルと磁石を使って電気信号に変換する方式をダイナミックマイクと言う。
  ダイナミックマイクとは、電磁誘導を利用して音声信号を得るマイクのことです。 構造は非常にシンプル。 
  ダイヤフラム、コイル、磁石がひとつのカプセルに納められ、空気の振動を受けたダイヤフラムが動くと、
  ダイヤフラムに取り付けられた金属のコイルが磁石の磁界の中で振動して、
  電気信号を得る仕組みになっています。
 
 つまり、スピーカーの構造と同じです。
  スピーカーの振動板が声の影響で振動して、
    中のコイルが一緒に振動、
     近くにくっついている磁石とコイルによって、
      微弱な電流が発生する。
      この微弱な電流をアンプで増幅することで声を大きくしたり、
       遠くまで運んだり出来るってことですね。
 
回路図(LM358版)
  

 


 
 前にオペアンプの記事はいくつか書いてます。
  https://miha.jugem.cc/?eid=309
   そちらとの変更点を書きますね。
 
 発信防止の為に以下の3点変更を加えております。
  RaとRbを10KΩに変更これは気分
  R1とR2をそれぞれ1KΩと200KΩに変更 R2が1メガ超えると発信しやすい
  Cf1を追加
  Rpを追加
  
 参考に秋月のコンデンサーマイクアンプキットの場合
  https://akizukidenshi.com/goodsaffix/ae-micamp_20200626.pdf
  たぶん、これと同じ定数でもうまくいく。
  
 参考 オペアンプの発振に関して
  マルツさん
   https://www.marutsu.co.jp/contents/shop/marutsu/mame/106.html
   こちらを参考にして、上記の発振防止の回路を入れています。
 
動作


 シャーっていうホワイトノイズみたいな音が聞こえるのはそういうものなんですかね?
 すごい気になる感じではないんですけど、
  昔カセットテープを再生した時に後ろで鳴っている音に似ている感じの音です。
 
 上で書いた秋月のコンデンサーマイクキットでは気にならないので、
  比較するとなんだろう?って気になります。
   秋月のコンデンサーマイクキット
    https://akizukidenshi.com/goodsaffix/ae-micamp_20200626.pdf
 
 以前記事にした、NJM4580でマイクアンプを作ったときも気にならなかった。
   https://miha.jugem.cc/?eid=88
  ですので、NJM4580で作り直してみました。
 
NJM4580回路図
 

 
 
 
 こちらは両電源方式のアンプになりますので、
 電源回路を追加しています。
 
 当初、マイナスの電圧を作り出すICを使ってみたのですが、
  https://miha.jugem.cc/?eid=247
 オーディオで使うには不向きで、ビーっていうノイズが乗ることが判明しました。
 なので、使えず。
 
 電圧を分圧するしてプラスとマイナスとGNDを作り出す回路とました。

 

電源
 電池は006P型の充電式を使いたいと思い。
  amazonから
    https://www.amazon.co.jp/gp/product/B08Z7979WM
   を購入してみたのですが、こちらもノイズがビーってなったので、即返品。
   
   
   
   充電用のUSB端子が電池の下についているタイプだったので、
    充電用の回路と、もしかしたら放電時に昇圧するような
     回路が入っているんだと思います。
  
  その代わりとして、
   https://www.amazon.co.jp/gp/product/B08BJ1YPY6
   
   
   
   
  同じメーカーの充電器が分離しているやつを購入しました所、
  快適に使えるようになりました。こっちはノイズ入らないです。

 

使用感
 
 コンデンサーマイクと比較して、近くの音しか拾わないです。
 ダイナミックマイクの特徴ですね。
 ですので、屋外で環境音を録音するなどには向かないけど、
 朗読とか音声系の近くの音だけを録音したいときには向いているのではないでしょうか?

 

完成図
 
 
 
 
 中身

 

  

 

 


■後日談

 LM358にてシャーっていう音がする件で、気になっていたので、先日マルツに寄った時にオペアンプを探して

  ピン配置の同じもので良さそうなのを、探して来ました。

   NJM2268Dです。低雑音と書いてたので差し替えてみた所、

   シャーっていう音は消えました。

    実験環境でNJM2268Dはブレッドボードで組んでいせいか、

     NJM4580と比較するとHiFi感に欠けた感じがします。何が違うんですかね?

 今回はすぐに手に入る物で試しましたけど

 NJM2737Dを試してみたいですね。

  秋月のNJM2737説明

   NJM2737は1.8Vから動作する二回路入り単電源入出力フルスイングオペアンプです。

   入力換算雑音電圧はオーディオで定評のあるNJM4580やNJM5532と同等になるよう設計しており、

   低電圧、単電源動作のオーディオ用途に最適です。

 

 興味は尽きません。

  通販でいくつか手に入れて試して見れると良いですね。

  単電源で使えるオペアンプとしてもう少し候補を探していきたいと思います。

   オペアンプ沼ですね。ほどほどにハマっていきたいと思います。