Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Kronometer Arduino Sederhana

Komponen dan persediaan

Arduino UNO
arduino apa saja.. dan terkadang tidak hanya
× 1
tombol (tidak menempel)
dengan resistor pull-down (saya menggunakan 1kohm)
× 1
Resistor 10k ohm
× 1

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

Saya sedang dalam perjalanan melakukan proyek yang menyenangkan dan saya membutuhkan kronometer Arduino yang berfungsi setiap kali saya menekan tombol. Ini bukan hal yang rumit, tetapi saya pikir potongan kode ini akan berguna untuk proyek orang lain.

Saya mungkin menyelamatkan Anda 1 jam dari pengkodean hidup Anda.

EEPROM:

Memori Arduino yang tidak kehilangan informasinya saat Anda memutuskan daya atau mengatur ulang papan. (info). Saya menggunakan #include library yang pada dasarnya melakukan segalanya dan sudah terinstal secara default.

GANGGUAN:

Hal-hal terjadi di dalam Arduino kami, tetapi kami ingin itu berhenti melakukan apa pun yang terjadi dan memperhatikan fungsi ISR ​​kami ketika beberapa pin ditarik TINGGI misalnya. Tidak diperlukan perpustakaan tambahan di sini:

Kode proyek:

  • Mendefinisikan dan mencakup:
#include  #define interruptPin 2 #define eeAddress 0 //ALAMAT UNTUK ARDUINO EEPROM (internal non volatile memory) float starttime =0; //Variabel untuk melakukan matematika float endtime=0; waktu hasil float=0, waktu hasil lama=0;  

Tidak ada yang baru di sini kami menyertakan perpustakaan EEPROM, kami memutuskan di mana tombol akan dipasang (pin2).

Kemudian saya memutuskan saya akan menggunakan alamat 0 dari memori EEPROM kami untuk menyimpan waktu kami (float=4bytes). Arduino UNO memiliki 1024 byte (chip ATmega328) tetapi saya memilih alamat 0 karena saya mencoba untuk mengatur sekali dalam hidup saya.

  • penyiapan()
pengaturan batal() { Serial.begin(9600); while (!Serial) {; // tunggu port serial terhubung. Diperlukan untuk port USB asli saja } Serial.println("Serial comms sudah siap pak!:.. bip bip"); attachInterrupt(digitalPinToInterrupt(interruptPin), refreshTime, CHANGE);}  

Hal-hal biasa, kami memulai komunikasi serial antara Arduino dan PC kami (9600 baud):

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

Attachinterrupt mengaktifkan fungsi tersebut ketika tingkat logika interruptPin berubah menjadi:(____________-HERE-------------------HERE____________).

Dengan cara ini memicu dua kali di awal kami menekan dan di akhir. Jika tidak terjadi apa-apa, nilai interruptPin kami tetap RENDAH karena resistor pull-down kami "memaksanya" untuk tetap rendah.

  • loop()
void loop() { }  

Tidak. Letakkan barang-barang Anda di sana!

  • Fungsi lainnya:
void refreshTime(){ if(digitalRead(interruptPin))){ starttime=millis(); Serial.print("Waktu mulai:"); Serial.println(waktu mulai); }else if(digitalRead(interruptPin)==LOW){ endtime=millis(); resulttime=waktu-akhir-mulai; Serial.print("Waktu berakhir:"); Serial.println(waktu berakhir); Serial.print("Waktu hasil:"); Serial.println(waktu hasil); WhatsNewEeprom();//menyimpan eeprom }  

Ini adalah fungsi yang akan dijalankan ketika terjadi gangguan pada pin (interruptPin).

Interupsi dipicu setiap kali status dalam interruptPin berubah (TINGGI ke RENDAH atau RENDAH ke TINGGI), jika (...) adalah untuk mendeteksi apakah TINGGI->RENDAH atau RENDAH->tinggi berubah.

Menyimpan waktu yang direkam oleh jam internal Arduino milis() dan melakukan perbedaan agar waktu hasil kami siap. Pada akhirnya, ia menyimpan info baru di eeprom:

void WhatsNewEeprom(){ Serial.println("-----------memeriksa eeprom"); EEPROM.get( eeAddress, oldresulttime ); Serial.print("waktu hasil lama");Serial.println(waktu hasil lama); Serial.print("waktu hasil");Serial.println(waktu hasil); if(resulttime!=oldresulttime){ EEPROM.put( eeAddress, resulttime); Serial.print("-----Ding!Waktu baru tercatat di eeprom:");Serial.println(resulttime); }else{ Serial.println("Tidak ada waktu baru ditemukan, eeprom tidak terganggu"); }  

Yang ini memeriksa apakah nilai waktu yang disimpan di eeprom sama dengan yang kita miliki di variabel "resulttime", jika demikian, kita tidak mengubahnya, jadi jangan lakukan apa pun.

Tambahan! Melepaskan tombol kami:

Kami manusia sangat lambat untuk waktu pemrosesan Arduino, satu menekan tombol tampak cepat bagi kami tetapi untuk Arduino sangat lambat, yang membuat sinyal "memantul" seperti beralih highlowhighlowhighlow beberapa kali sebelum menetapkan status sebenarnya.

Jika kami mau (saya tidak mau), kami dapat memperbaikinya melalui perangkat keras atau perangkat lunak:

  • Debounce melalui perangkat lunak
  • Debounce melalui perangkat keras, gunakan kapasitor!!! :D

Saya hanya akan menambahkan 220nF secara paralel (dari sensepin ke GND)

Kapasitor "memakan" variasi tegangan yang cepat,.

Kode

  • kronometer arduino
kronometer arduinoArduino
menggunakan eeprom dan interupsi, mudah diretas
//dikodekan oleh Javier Muñoz 23/10/2017//pertanyaan dan telegram hangus ke [email protected]#include #define interruptPin 2#define eeAddress 0 // ALAMAT UNTUK EEPROM ARDUINO (memori internal non volatile) float starttime =0; //Variabel untuk melakukan matematika float endtime=0; waktu hasil float=0, waktu hasil lama=0; void setup() { Serial.begin(9600); while (!Serial) {; // tunggu port serial terhubung. Diperlukan untuk port USB asli saja } Serial.println("Serial comms sudah siap pak!:.. bip bip"); attachInterrupt(digitalPinToInterrupt(interruptPin), refreshTime, CHANGE);//mengaktifkan fungsi ketika tingkat logika interruptPin berubah jadi:(__-HERE------------------_HERE__) cara ini menyimpan waktu jari kita menekan tombol}void loop() {//barang-barang Anda di sini//(eeprom disimpan) terakhir kali diukur dalam milidetik "float resulttime"}void refreshTime(){ if(digitalRead(interruptPin) ){ waktu mulai=milis(); Serial.print("Waktu mulai:"); Serial.println(waktu mulai); }else if(digitalRead(interruptPin)==LOW){ endtime=millis(); resulttime=waktu-akhir-mulai; Serial.print("Waktu berakhir:"); Serial.println(waktu berakhir); Serial.print("Waktu hasil:"); Serial.println(waktu hasil);WhatsNewEeprom(); }}void WhatsNewEeprom(){ Serial.println("-----------memeriksa eeprom"); EEPROM.get( eeAddress, oldresulttime ); Serial.print("waktu hasil lama");Serial.println(waktu hasil lama); Serial.print("waktu hasil");Serial.println(waktu hasil); if(resulttime!=oldresulttime){ EEPROM.put( eeAddress, resulttime); Serial.print("-----Ding!Waktu baru tercatat di eeprom:");Serial.println(resulttime); }else{ Serial.println("Tidak ada waktu baru ditemukan, eeprom tidak terganggu"); }}

Skema

koneksi sederhana tombol dengan resistor pull-down chronometer_APM32Y9FoM.fzz

Proses manufaktur

  1. Jam dinding sederhana menggunakan Adafruit 1/4 60 Ring Neopixel
  2. Jam Kata Sederhana (Arduino)
  3. DIY Sederhana 20 kHz Arduino Oscilloscope pada LCD Nokia 5110
  4. Arduino Spybot
  5. FlickMote
  6. TV Buatan Sendiri B-Gone
  7. Jam Master
  8. Sensor Kendala Sederhana dengan Arduino
  9. Temukan Saya
  10. Jam Alarm Sederhana dengan DS1302 RTC