Proses manufaktur
| × | 1 | ||||
| × | 1 |
|
Pendahuluan
Saya membeli sepasang modul laser KY008 dan sensor yang cocok, dan saya tahu saya harus membuat beberapa proyek keren dengannya. Jadi, ambil pasangannya, dan buat gerbang pengatur waktu elektrik untuk jalur mobil slot yang sudah ada di atas meja untuk proyek mobil slot yang bisa menyetir sendiri.
Perangkat Keras
3 komponen utama adalah modul laser, sensor penerima laser, dan layar GLCD.
Saya sangat suka menggunakan GLCD, Anda dapat menemukan info tentang pin-out di sini:https://playground.arduino.cc/Code/GLCDks0108/
Dan Anda dapat mengunduh perpustakaan dari sini:
https://bitbucket.org/bperrybap/openglcd
Saya membuat konektor yang bagus dan mudah untuk itu, seperti yang ditunjukkan pada gambar di bawah.
Modul laser KY008 memiliki 3 pin, -, + dan S, saya hanya mempersingkat S dan + menjadi 5V. Jika Anda tidak ingin laser selalu menyala, sambungkan pin S ke pin digital di Arduino. kapan pun Anda menyetelnya tinggi, laser akan menyala.
Sensor memiliki 3 pin juga, GND, VCC dan SIGNALE. sambungkan ke daya dan pin input pada Arduino.
Tantangan terberat dalam build ini adalah menyelaraskan semuanya.
Anda dapat menonton hasil akhirnya di klip ini.
/** Waktu menjaga gerbang digital* Kode oleh:Tal Ofer* [email protected]*/#include "openGLCD.h"// info putaranunsigned long currentRunStartMillis;unsigned long lastRunInMillis;unsigned long bestRunInMillis;int currentLap;unsigned lama disimpanMillis;gText t1; // akan menentukan waktu proses latergText t2; // akan menentukan waktu proses latergText t3; // akan menentukan runtime nanti// global untuk displayint sec_val, milli_val;// laser gate const int gateSensorPin =2; // nomor pinint sensor gerbang gateSensorState; // pembacaan saat ini dari sensorint lastgateSensorState =LOW; // pembacaan sebelumnya dari sensorunsigned long lastDebounceTime =0; // terakhir kali pin sensor di-toggledint debounceDelay =50; // waktu debounce; meningkat jika output flickersvoid setup() { // mode pin pinMode(gateSensorPin, INPUT); penundaan (50); // untuk memperlambat kerja sensor dan laser, jadi kita tidak akan memicu putaran. // mulai GLCD GLCD.Init(NON_INVERTED); // tentukan area t1.DefineArea(textAreaTOP, lcdnums14x24); t2.DefineArea(0, GLCD.CenterY, 8, 2, fixednums7x15); t3.DefineArea(GLCD.CenterX, GLCD.CenterY, 8, 2, fixednums7x15); t3.SetFontColor(PUTIH); // mengatur warna font t3.ClearArea(); // cetak teks GLCD.SelectFont(System5x7); GLCD.CursorTo(1, 4); GLCD.print("TERAKHIR"); GLCD.CursorTo(11, 4); GLCD.print("TERBAIK"); // reset params currentRunStartMillis =0; lastRunInMillis =0; bestRunInMillis =0; currentLap =0;}void loop(){ // membaca status sensor laser:int reading =digitalRead(gateSensorPin); // Jika sakelar berubah, karena suara atau penekanan:if (membaca !=lastgateSensorState) { // reset timer debouncing lastDebounceTime =milis(); } //end if // if melewati waktu debounce if ((millis() - lastDebounceTime)> debounceDelay) { if (membaca !=gateSensorState) { gateSensorState =membaca; // Jika kita menjadi rendah, ini berarti baloknya rusak if (gateSensorState ==LOW) { // simpan mili sehingga semua perhitungan akan dilakukan dengan nilai yang sama. saveMillis =milis(); // jika ini bukan putaran pertama if (currentLap> 0) { // simpan putaran terakhir lastRunInMillis =saveMillis - currentRunStartMillis; // jika run terakhir lebih cepat maka run terbaik if (lastRunInMillis0) { calcResultFromMillis(savedMillis - currentRunStartMillis, &sec_val, &milli_val); } else { calcResultFromMillis(0, &sec_val, &milli_val); } //end if // JALAN LANCAR t1.CursorTo(3, 0); // kolom &baris relatif terhadap area teks t1.Printf(F("%02d.%03d"), sec_val, milli_val); // LAST RUN calcResultFromMillis(lastRunInMillis, &sec_val, &milli_val); t2.CursorTo(1, 1); // kolom &baris relatif terhadap area teks t2.Printf(F("%02d.%03d"), sec_val, milli_val); // BEST RUN calcResultFromMillis(bestRunInMillis, &sec_val, &milli_val); t3.CursorTo(1, 1); t3.Printf(F("%02d.%03d"), sec_val, milli_val);} //wnd loop// hitung mili menjadi 2 nilai, detik dan mili untuk displayvoid calcResultFromMillis(nilai panjang yang tidak ditandatangani, int *sec_val, int * milli_val) { *sec_val =int(nilai / 1000); *milli_val =nilai - *sec_val * 1000;}
Proses manufaktur
Komponen dan persediaan Arduino UNO Atau Papan Arduino Uno yang kompatibel × 1 Ukuran Setengah Papan Tempat Memotong Roti Tanpa Solder × 1 Resistor 10k ohm × 3 Kabel jumper (generik) × 1 Resistor foto × 2 Dioda Laser × 1 Sakelar Tom
Komponen dan persediaan Arduino UNO × 1 Kabel jumper (generik) × 1 Tampilan 7 Segmen × 1 Resistor 221 ohm × 1 Keypad Matriks 3x4 Membran Adafruit × 1 Aplikasi dan layanan online Arduino IDE Tentang proyek ini Ini adalah
Komponen dan persediaan Arduino UNO × 1 Sensor Ultrasonik - HC-SR04 (Generik) × 1 Adafruit 128X64 LED LCD OLED × 1 Aplikasi dan layanan online Arduino IDE Tentang proyek ini Cara menggunakan layar OLED Di sini Anda memiliki tutorial
Komponen dan persediaan Arduino Mega 2560 Semua arduino dapat berfungsi × 1 Tampilan 7-segmen 4 digit × 1 Tekan tombol × 4 Buzzer × 1 Kabel jumper (generik) × 21 Ukuran Penuh Papan Tempat Memotong Roti Tanpa Solder × 1 Tentang pro