工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

シンプルなArduinoクロノメーター

コンポーネントと消耗品

>
Arduino UNO
任意のarduino ..そして時にはそれだけではない
× 1
ボタン(ラッチなし)
プルダウン抵抗付き(私は1kΩを使用)
× 1
抵抗10kオーム
× 1

アプリとオンラインサービス

>
Arduino IDE

このプロジェクトについて

私は楽しいプロジェクトを進めているところですが、ボタンを押すたびに機能するArduinoクロノメーターが必要でした。複雑なことではありませんが、このコードは他の人のプロジェクトに役立つと思いました。

私はおそらくあなたの人生のコーディングの1時間を節約しました。

EEPROM:

<図>

電源を切ったりボードをリセットしたりしても情報が失われないArduinoのメモリ(情報)。 #include を使用しています 基本的にすべてを実行するライブラリであり、デフォルトですでにインストールされています。

割り込み:

<図>

Arduinoの内部で何かが起こっていますが、たとえば、ピンがHIGHに引っ張られた場合は、Arduinoが何をしているのかを停止し、ISR機能に対応する必要があります。ここに追加のライブラリは必要ありません:

<図> <図>

プロジェクトのコード:

  • 定義と内容:
  #include  #define InterruptPin 2 #define eeAddress 0 // ARDUINOのEEPROM(内部不揮発性メモリ)のアドレスfloat starttime =0; //数学を実行する変数floatendtime =0; float resulttime =0、oldresulttime =0;  

ここでは、EEPROMライブラリを含めて新しいものは何もありません。ボタンをどこに取り付けるかを決定します(ピン2)。

次に、EEPROMメモリのアドレス0を使用して時間を保存することにしました(float =4bytes)。 Arduino UNOには1024バイト(チップATmega328)がありますが、人生で一度だけ整理しようとしていたので、アドレス0を選択しました。

  • setup()
  void setup(){Serial.begin(9600); while(!Serial){; //シリアルポートが接続するのを待ちます。ネイティブUSBポートにのみ必要} Serial.println( "シリアル通信の準備ができています!:.. bip bip"); attachInterrupt(digitalPinToInterrupt(interruptPin)、refreshTime、CHANGE);}  

通常は、ArduinoとPCの間でシリアル通信を開始します(9600ボー):

  attachInterrupt(digitalPinToInterrupt(interruptPin)、refreshTime、CHANGE);  

Attachinterruptは、interruptPinのロジックレベルが変更されたときに関数をアクティブにします。(____________- HERE ------------------_ HERE ____________)。

このようにして、プレスの開始時と終了時に2回トリガーされます。何も起こらない場合は、プルダウン抵抗が「強制的に」ローのままになるため、interruptPin値はローのままになります。

  • loop()
  void loop(){}  

何もない。そこにあなたのものを入れてください!

  • その他の機能:
  void refreshTime(){if(digitalRead(interruptPin)){starttime =millis(); Serial.print( "開始時間:"); Serial.println(starttime); } else if(digitalRead(interruptPin)==LOW){endtime =millis(); resulttime =endtime-starttime; Serial.print( "終了時間:"); Serial.println(endtime); Serial.print( "結果時間:"); Serial.println(resulttime); WhatsNewEeprom(); // eepromを格納します}  

これは、ピンの中断(interruptPin)が発生したときに実行される関数です。

割り込みは、interruptPinのステータスが変化するたびにトリガーされます(HIGHからLOWまたはLOWからHIGH)。if(...)は、HIGH-> LOWまたはLOW-> highの変化を検出するためのものです。

Arduinommillis()の内部クロックによって記録された時間を保存し、結果時間を準備するための違いを実行します。最後に、新しい情報をeepromに保存します:

  void WhatsNewEeprom(){Serial.println( "----------- checking eeprom"); EEPROM.get(eeAddress、oldresulttime); Serial.print( "oldresulttime"); Serial.println(oldresulttime); Serial.print( "resulttime"); Serial.println(resulttime); if(resulttime!=oldresulttime){EEPROM.put(eeAddress、resulttime); Serial.print( "----- Ding!eepromに記録された新しい時刻:"); Serial.println(resulttime); } else {Serial.println( "新しい時刻は見つかりませんでした。EEPROMは妨害されませんでした"); }  

これは、eepromに格納されている時間値が、変数「resulttime」に格納されている時間値と同じであるかどうかをチェックします。同じである場合は、変更しなかったため、何もしません。

追加!ボタンのデバウンス:

<図>

私たち人間はArduinoの処理時間は非常に遅く、ボタンを1回押すだけでは速いように見えますが、Arduinoの場合は非常に遅いため、真のステータスを確定する前に、信号が「バウンス」します。>>

必要に応じて(私はしませんでした)、ハードウェアまたはソフトウェアを介して修正できます:

  • ソフトウェアによるデバウンス
  • ハードウェアを介してデバウンスし、コンデンサを使用してください!!! :D

<図> <図>

並列に220nFを追加します(センスピンからGNDまで)

コンデンサは、電圧の急激な変化を「食い尽くします」。

コード

  • arduinoクロノメーター
arduinoクロノメーター Arduino
eepromと割り込みを使用し、簡単にハッキング可能
 //ハビエルムニョスによってコード化23/10/2017 //質問と歌われた電報を[email protected]#include  #define InterruptPin 2#define eeAddress 0 // ARDUINOのEEPROM(内部不揮発性メモリ)のアドレスfloat starttime =0; //数学を実行する変数floatendtime =0; float resulttime =0、oldresulttime =0; void setup(){Serial.begin(9600); while(!Serial){; //シリアルポートが接続するのを待ちます。ネイティブUSBポートにのみ必要} Serial.println( "シリアル通信の準備ができています!:.. bip bip"); attachInterrupt(digitalPinToInterrupt(interruptPin)、refreshTime、CHANGE); // interruptPinのロジックレベルが変更されたときに関数をアクティブ化する:(__- HERE ------------------_ HERE ____)このようにして、指がボタンを押していた時間を保存します} void loop(){//ここにあるもの//(eepromが保存されます)最後にミリ秒単位で測定された時間 "float resulttime"} void refreshTime(){if(digitalRead(interruptPin) ){starttime =millis(); Serial.print( "開始時間:"); Serial.println(starttime); } else if(digitalRead(interruptPin)==LOW){endtime =millis(); resulttime =endtime-starttime; Serial.print( "終了時間:"); Serial.println(endtime); Serial.print( "結果時間:"); Serial.println(resulttime); WhatsNewEeprom(); }} void WhatsNewEeprom(){Serial.println( "----------- eepromのチェック"); EEPROM.get(eeAddress、oldresulttime); Serial.print( "oldresulttime"); Serial.println(oldresulttime); Serial.print( "resulttime"); Serial.println(resulttime); if(resulttime!=oldresulttime){EEPROM.put(eeAddress、resulttime); Serial.print( "----- Ding!eepromに記録された新しい時刻:"); Serial.println(resulttime); } else {Serial.println( "新しい時刻は見つかりませんでした。EEPROMは妨害されませんでした"); }} 

回路図

プルダウン抵抗を備えたボタンの単純な接続 クロノメーター_APM32Y9FoM.fzz

製造プロセス

  1. Adafruit 1/460リングネオピクセルを使用したシンプルな掛け時計
  2. Simple Word Clock(Arduino)
  3. Nokia 5110LCDのDIYシンプル20kHzArduinoオシロスコープ
  4. Arduino Spybot
  5. FlickMote
  6. 自家製テレビB-Gone
  7. マスタークロック
  8. Arduinoを搭載したシンプルな障害物センサー
  9. Find Me
  10. Arduino Power
  11. DS1302RTCを備えたシンプルな目覚まし時計