goo blog サービス終了のお知らせ 

酒と薔薇の日々(その2)

好きなことだけ求めて生きるアスペ気味のINTJ人

MX1508 モータドライバ基盤の動作テスト

2024年04月24日 12時11分10秒 | マイコン(ESP32・Arduino等)
4/22、注文から約1週間で到着
基盤6枚で674円 AliExサイトはこちら
今見るとこれの半額ショップもあるようだ。
接続は販売サイトから引用
丁寧な日本語説明サイトがありました。こちら こちら こちら


これだけならちゃんと動くんだが(IRつなぐとペケは相変わらず)
できれば電源電圧は5Vをモータに繋ぎましょう。


/*
MX1508 モータドライバ基盤
自作です 2024/4/24
*/

void setup() {
pinMode(8, OUTPUT); //IN2
pinMode(9, OUTPUT); //IN1
pinMode(13, OUTPUT); //IN1
standby();
}
void loop() {
back();
delay(3000);
digitalWrite(13,HIGH);
back_a(900);
delay(3000);
digitalWrite(13,LOW);
}

void forw(){
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
}

void forw_a(int speed){
digitalWrite(8, HIGH);
analogWrite(9, speed);
}

void back(){
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
}
void back_a(int speed){
digitalWrite(8, LOW);
analogWrite(9, speed);
}

void standby(){
digitalWrite(8, LOW);
digitalWrite(9, LOW);
}
void brake(){
digitalWrite(13, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(13, LOW);
}

Arduinoで赤外線リモコン・モーター制御の習作

2024年04月16日 15時26分01秒 | マイコン(ESP32・Arduino等)


ATtiny85へ書き込む前に、Arduino上でプログラムを作ってみた。
・電源は2.4Vのニッケル水素2本
 これ1本ではモタードライブ基盤が動かない。
 プチ電組み込み時はリポ電池にする予定
・2.4->5Vへ昇圧しArduinoのVinへ供給
・2.4Vはモーター制御基板のVinへ
・Arduinoと昇圧装置ともオーター制御基板のGNDは共通とする
・LED点滅はArduinoの基盤上LEDでPin番号は13
・モーター基盤はポートAしか使わない
・モータ制御信号はPWMアナログ値で出力し速度制御する
 PinはA0,A1を使った。
・赤外リモコンはTiny:bitのものを使った
 00h:電源ボタン 02h:ライトボタン
・赤外線検知は "TinyIRReceiver.hpp"を使用する
・「PinDefinitionsAndMore.h」が見つからない場合はライブラリから探し
 ソースと同じ同一フォルダに入れること。
・赤外信号が0なら正転、2なら逆転、それ以外で停止
 運転中はLED(Pin13)を点灯する



これをATtiny85で「目標サイズ」までサイズダウンする。
画面下にある白紙が、プチ電車内に収まる基板サイズ85*28*H:11mm

======================
/*
ArduinoUnoで1モーター制御 Attiny85へ移行する前準備

*/
//#include "Arduino.h"
#include "PinDefinitionsAndMore.h"
#include "TinyIRReceiver.hpp"

#define LED_pin 13

const int A1A = A0; // PB0; // Pin5(PWM)
const int A1B = A1; // PB1; // Pin6(PWM)

int m_speed = 150; // モータパワー

void setup() {
//------ Motor -----------
pinMode(A1A, OUTPUT);
pinMode(A1B, OUTPUT);

//------ Serial -----------
Serial.begin(115200);
Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_TINYIR));
if (!initPCIInterruptForTinyReceiver()) {
Serial.println(F("No interrupt available for pin " STR(IR_RECEIVE_PIN)));
}
Serial.println(F("Ready to receive NEC IR signals at pin " STR(IR_RECEIVE_PIN)));
}

int cmd = 255;

void loop() {
if (TinyIRReceiverData.justWritten) {
TinyIRReceiverData.justWritten = false;
Serial.print(F("Address=0x"));
Serial.print(TinyIRReceiverData.Address, HEX);
Serial.print(' ');
Serial.print(F("Command=0x"));
cmd = TinyIRReceiverData.Command;
Serial.print(cmd, HEX);
if (TinyIRReceiverData.Flags == IRDATA_FLAGS_IS_REPEAT) {
Serial.print(F(" Repeat"));
}
if (TinyIRReceiverData.Flags == IRDATA_FLAGS_PARITY_FAILED) {
Serial.print(F(" Parity failed"));
}
Serial.println();
}
//------- my code ---------
if (cmd == 00) {
digitalWrite(LED_pin, HIGH);
forward();
} else if (cmd == 02) {
digitalWrite(LED_pin, HIGH);
back();
} else {
digitalWrite(LED_pin, LOW);
stop();
}
}

void handleReceivedTinyIRData() {
printTinyReceiverResultMinimal(&Serial);
}

//--------停止----------
void stop() {
analogWrite(A1A, 0);
analogWrite(A1B, 0);
}
//--------後退----------
void back() {
analogWrite(A1A, m_speed);
analogWrite(A1B, 0);
}
//--------前進-----------
void forward() {
analogWrite(A1A, 0);
analogWrite(A1B, m_speed);
}




書き込み機[ HW-260 ]壊れた・・

2024年04月16日 02時43分56秒 | マイコン(ESP32・Arduino等)
悲しみは突然に・・・
全然原因がわからない。
外部電源テストを終えて、さて今度はモータドライバをと思ってた。
じゃが、ちょっとリモコンテストをしようとしたら、反応するLEDが点きっぱなしになる。

(゚Д゚)ハァ?
 
開発基盤からATTiny85のプログラムを書き込もうとしてもUSBを認識しない。
へ?ブートローダが壊れた??
ブートローダを再度書き込んでもダメ
あれこれ一から全部やり直すもダメ
そもそも同じプログラムを書き込んでいたはずの2個のマイコンが同時に壊れるはずもない。1個は使わずとっていたのだから。



ここまで来たら疑うべきは書き込み基盤HW-260しかない。
やむを得ずArduinoをもう一個持ち出して、ISPでプログラムを直接書き込んでみた。


書き込み設定はArduinoをISPにしてATtiny85へブートローダを書き込む際の設定と同じ。(最下部の「ブートローダを書き込む」は使わんよ)
プログラムを書くには以下の書き込み手順です。

ArduinoIDEには「書き込み装置を使って書き込む」というメニューがあるのだな。「Ctrl+Shift+U」

Lチカプログラムを書き込みHW-260に差し込むと・・・ちゃんとLチカしてる。
結局、基盤がメゲた。としか思えんが、簡単な構造のくせしてどこが壊れるんだ???
意味わからん。
午前3時だ。もう寝る。

USB経由で書かないのならブートローダも要らんのかな?
この件AIに聞いてみた。あったほうが良さげですね。
【回答】
ブートローダを省略してプログラムだけを書き込む場合、いくつかの問題が生じる可能性があります。以下はその一部です:
  1. 起動の問題: ブートローダがない場合、マイコンは電源投入時に直接プログラムの実行を試みます。しかし、ブートローダがないため、正しいアドレスからプログラムが実行されない可能性があります。
  2. シリアル通信の欠如: ブートローダはシリアル通信を介してプログラムを受信します。ブートローダがない場合、プログラムをアップロードする方法がなくなります。
  3. フラッシュメモリの初期化: ブートローダはプログラムをフラッシュメモリに書き込む前に、メモリを適切に初期化します。ブートローダがない場合、フラッシュメモリが適切に設定されていない可能性があります。
  4. ブートローダの機能の喪失: ブートローダはリセットボタンを押すことで再起動することができます。ブートローダがない場合、この機能が失われます。
したがって、ブートローダを省略する場合、これらの問題に注意する必要があります。
===============


おいおい、ブログがついに2800番台に突入
調べるとヘンテナ記事、メダカビオ、そしてATtiny85のLチカ記事がベスト3
旬な話題でもないのだが・・
これもわからんな。


超小型DCDCコンバータ使ってみた

2024年04月15日 22時53分36秒 | マイコン(ESP32・Arduino等)


AliExで買っていた超小型DCDCコンバータ、5個で220円
大容量電流は期待できないがマイコン程度なら動くはず、と勝手に思って。
【規格】
入力電圧0.9〜5v、出力5v
最大出力電流: 480 ma
開始電圧0.8v、出力電流7ma
入力1-1.5v、出力5v 40-100ma
入力1.5-2v,出力5v 100-150ma
入力2-3v、出力5v 150-380ma
入力3v,出力5v 380-480ma
DC-DCブーストモジュール動作周波数150KHz。 効率 <85% ( 推奨される高効率バージョン ) .
重量: 約1g
3端子あるが、真ん中は共通GND、左右が入力(VI)と出力(VO)
ーーーーーー
1.2Vのニッケル水素で動くかどうかをテスト



Arduino動きました。赤外受信モジュールでLEDのを光らせてます。
規格通り5Vが出てます。



ATtiny85も動きました。同じプログラムです。

だけど、当然だけどDCモーターは動かせなかった。
まあ、これで5Vのマイコンが動けば、モータドライバ基盤への信号は出せるので、モーター部分は3.7V小型リポ駆動とすればいいかな。

小型のモータドライバ基盤を買うか、あるいは今持ってる奴の端子台を外すか・・・

このままでも動いてるけどコンデンサを付けたほうが良いだろうな。




TD4を回路シミュレータで(メモ)

2024年04月15日 00時59分42秒 | マイコン(ESP32・Arduino等)


あちこちで基盤+部品を売っているけど
もうはんだ付けは、目が見えないので辛過ぎる。
絶対一発では動かないだろうし、それをチェックする能力もない。

でも死ぬまで一回はTD4のLEDのチカチカはやってみたいよねぇ・・・

そんな私に朗報
探したらありました。

シミュレータは「CircuitMaker」
使い方の紹介
しかし古いソフトだなぁ

回路図は
データがDLできます。



ATtiny85で赤外線リモコン信号を受けてLチカ

2024年04月13日 23時30分12秒 | マイコン(ESP32・Arduino等)


苦節数日、やっとTiny:bit付属の赤外線リモコンでATtiny85に接続したLEDの点灯制御ができるようになった!
「TinyIRReceiver.hpp」ではPB2がデフォルトの受信端子らしいので、すなおにここに繋いだ。(良くはわかっていないのだが・・)
LEDはPB4番にした。
一発で稼働。(嬉し泣き)

【参考】
ライブラリを使わず直接パルスを読む動画はこちら
ソースコードはこちら

=========================
/*
ATtiny85 にIRセンサーを付けて、Tiny:bitリモコンの
 電源が押されたら(0x00):点灯
 点灯が押されたら(0x02):消灯
  LEDはPB4に接続
  IRはPB2に接続
*/
#include "TinyIRReceiver.hpp" // include the code

#define IR_RECEIVE_PIN PB2
int LED_pin = PB4;

void setup() {
pinMode(LED_pin, OUTPUT);
digitalWrite(LED_pin, LOW);
if (!initPCIInterruptForTinyReceiver()) {
for (int i=0; i<=30; i++){ // ERROR Blink
digitalWrite(LED_pin, HIGH);
delay(200);
digitalWrite(LED_pin, LOW);
delay(200);
digitalWrite(LED_pin, HIGH);
}
}
}

int cmd = 0xFF;

void loop() {
if (TinyIRReceiverData.justWritten) {
TinyIRReceiverData.justWritten = false;
cmd = TinyIRReceiverData.Command;
if (cmd == 00){
digitalWrite( LED_pin, HIGH );
}
if (cmd == 02){
digitalWrite( LED_pin, LOW);
}
}
}



各種赤外リモコンのボタン:値

2024年04月13日 19時32分13秒 | マイコン(ESP32・Arduino等)
先に作った受信プログラムを使って、100均のリモコン、Tiny:bitリモコンなどの発する信号を一覧にまとめてみた。


左から
1 Tiny:bitに付属
2 ダイソーのカラーLEDのライト(330円)
3 ダイソーの単色LEDライト(330円)
4 NEC製シーリングライト(CH1/CH2の2種類がある)
  このリモコンは今回のライブラリではすべてパリティエラーとなっている。

以下は16進です。(C系の「0x」って嫌い。00h系です)

 Tiny:bit付属のリモコン

 ダイソーの単色リモコン

 ダイソーのフルカラーリモコン

  NECリモコン(CH1)

  NECリモコン(CH2)

でした。





ArduinoUnoで赤外線送受信(IRrecv TinyReceiver使用)

2024年04月13日 18時37分52秒 | マイコン(ESP32・Arduino等)
ATtiny85を赤外線コントロールしたいのだが、その前に各リモコンがどんな信号を出しているかを調べた。
今回は「IRrecv」ライブラリをインスコ時に付いてくる「TinyReceiver」サンプルを使ってみた。



赤外ユニット、向かって左からGND、5V、信号線
信号線はデジタル2Pinへ接続した。
「PinDefinitionsAndMore.h」を見ると各チップごとのPinアサインが記述されてるが・・良くわからん。
一般的には、受信はD2Pin、送信はD3Pinのようです。


今回はArduinoで動くことを確認するためなので、マクロを外した以下のソースで動かした。

========= ArduinoUnoで動いたソース ====================
#include "Arduino.h"
#include "PinDefinitionsAndMore.h" 
#include "TinyIRReceiver.hpp" // include the code

void setup() {
Serial.begin(115200);
Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_TINYIR));
if (!initPCIInterruptForTinyReceiver()) {
Serial.println(F("No interrupt available for pin " STR(IR_RECEIVE_PIN)));
}
Serial.println(F("Ready to receive NEC IR signals at pin " STR(IR_RECEIVE_PIN)));
}

void loop() {
if (TinyIRReceiverData.justWritten) {
TinyIRReceiverData.justWritten = false;
Serial.print(F("Address=0x"));
Serial.print(TinyIRReceiverData.Address, HEX);
Serial.print(' ');
Serial.print(F("Command=0x"));
Serial.print(TinyIRReceiverData.Command, HEX);
if (TinyIRReceiverData.Flags == IRDATA_FLAGS_IS_REPEAT) {
Serial.print(F(" Repeat"));
}
if (TinyIRReceiverData.Flags == IRDATA_FLAGS_PARITY_FAILED) {
Serial.print(F(" Parity failed"));
}
Serial.println();
}
/*
* Put your code here
*/
}
void handleReceivedTinyIRData() {
printTinyReceiverResultMinimal(&Serial);
}

========================
  Tiny:bitリモコンでLEDを点灯させるソース
========================
/*
ArduinoUno用 IR受信プログラム 2024/4/13
   Tiny:bit付属のリモコンは、電源ボタンが00、点灯ボタンが02を送ってくる
   00を受けたら Pin3に繋いだLEDが点灯
   01を受けたら Pin3に繋いだLEDが消灯
   ※注意点
   作成時に「TinyIRReceiverData.Command」が初期化で00が入っていることから、cmd変数を作成し
   初期値にFFを入れておき、起動時には点灯しないようにするため。
   「TinyIRReceiverData.Command」から受け取った値を入れることにした。

*/
#include <Arduino.h>
#include "PinDefinitionsAndMore.h" // Set IR_RECEIVE_PIN for different CPU's
#include "TinyIRReceiver.hpp" // include the code

#define LED_pin 3

void setup() {
Serial.begin(115200);
Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_TINYIR));
if (!initPCIInterruptForTinyReceiver()) {
Serial.println(F("No interrupt available for pin " STR(IR_RECEIVE_PIN)));
}
Serial.println(F("Ready to receive NEC IR signals at pin " STR(IR_RECEIVE_PIN)));
pinMode( LED_pin, OUTPUT );
}

int cmd = 255;

void loop() {
if (TinyIRReceiverData.justWritten) {
TinyIRReceiverData.justWritten = false;
Serial.print(F("Address=0x"));
Serial.print(TinyIRReceiverData.Address, HEX);
Serial.print(' ');
Serial.print(F("Command=0x"));
cmd = TinyIRReceiverData.Command;
Serial.print(cmd, HEX);
if (TinyIRReceiverData.Flags == IRDATA_FLAGS_IS_REPEAT) {
Serial.print(F(" Repeat"));
}
if (TinyIRReceiverData.Flags == IRDATA_FLAGS_PARITY_FAILED) {
Serial.print(F(" Parity failed"));
}
Serial.println();
}
/*
* Put your code here
*/
if (cmd == 00){
digitalWrite( LED_pin, HIGH );
}
if (cmd == 02){
digitalWrite( LED_pin, LOW);
}





}

void handleReceivedTinyIRData() {
printTinyReceiverResultMinimal(&Serial);
}







Arduinoから[ HW-260 ]基盤へICSPで書き込むPIN

2024年04月11日 22時25分06秒 | マイコン(ESP32・Arduino等)
==========ICSP用の記事=============
今回は関係ないです。

基盤にはICSP用の6Pinがでている。

参照サイトはこちら

Attiny85を開発ボード[ HW-260 ]で使うメモ

2024年04月11日 01時25分27秒 | マイコン(ESP32・Arduino等)
ATtiny85技術情報(日本語)
技術情報(英語・詳細)
 各Pinの説明
https://www.engineersgarage.com/attiny85-microcontroller-tutorials-part-1/
いろんなサンプル
https://www.engineersgarage.com/?s=ATtiny85

==================
IR+リレープログラム

IRリモコン

IRremoteライブラリを使ったArduinoプログラム
https://burariweb.info/electronic-work/arduino-learning/arduino-ir-module-use.html

IRリモコン(ATtiny202 よみやさん)パルス生成からすべて自作
https://www.youtube.com/watch?v=AfTPioDaBm4

OLEDの制御
https://martyworkshopdiary.blogspot.com/2020/06/attiny85oledsh1106-128x64-i2co.html

====================
  ATtiny85の基礎
====================
ATtiny85マイコン
 FLASH: 8KB
 SRAM: 512B
 EEPROM: 512B
 CLOCK: 最大 20MHz
 OPERATING VOLTAGE: 2.7~5V



※PB5はReset用途なので一般的にはI/Oでは使用しない。

====================
  開発ボード [ HW-260 ] 説明
====================


「6」は基盤上のLEDに並列接続です。
Pinの上6本は「ICSP」ポート用(基盤上で直書き込み用)でもある。
VIN/GNDで外部からの電源供給、5Vで出力可能

2024/4/13 自作Lチカ
ライブラリ上では、Pin名は変数「PB1」「PB2」・・で定義してある。
変数LED_BUILTIN は PB1と同じで、ピン番号としては6番になる。
LED_BUILTIN = PB1 です。
ーーーーーーーーーーーーー
PB4(3番足)でLチカするプログラムソースは

int LED_pin = PB4;

void setup() {
pinMode(LED_pin, OUTPUT);
digitalWrite(LED_pin, LOW);
}
void loop() {
digitalWrite(LED_pin, HIGH); // 点灯
delay(500);
digitalWrite(LED_pin, LOW); // 消灯
delay(500);
}