3DLoyiha qo‘llanmalari
Raqamli ruletka
Ultratovush sensori masofani o‘lchaydi, OLED ekran uni santimetrlarda ko‘rsatadi. Bir kechada yig‘iladi va uyda haqiqatan ham asqotadi.
- Murakkablik
- Oson
- Vaqt
- ~60 min
- Detallar
- 5 ta detal
- Qadamma-qadam
- 4 qadam
- I²C displey bilan ishlash
- Ultratovush bilan masofani o‘lchash va natijani tekislash
- Breadboardda yig‘ish
Detallar
Yana kerak bo‘ladi
- — Kompyuter va Arduino IDE (arduino.cc dan bepul)
- — UNO uchun USB kabel (UNO SMD ning «+ USB kabel» varianti)
- — Kichik krestli otvertka
Qadamma-qadam
- 01
Breadboardda yig‘ing
HC-SR04 va OLED ni breadboardga qo‘ying. UNO ning 5V va GND ini breadboard quvvat qatorlariga torting — ikkala modul shulardan quvvat oladi.
- 02
Ulang
OLED: SDA → A4, SCL → A5. HC-SR04: TRIG → D12, ECHO → D11.
- 03
Kutubxonalarni o‘rnating
Arduino IDE da «Library Manager» ni oching va «Adafruit SSD1306» ni o‘rnating (u «Adafruit GFX» ni ham o‘rnatishni taklif qiladi — rozilik bering).
- 04
Yuklang va olib yuring
Kodni yuklang — ekranda masofa paydo bo‘ladi. Ruletka UNO ning USB porti orqali ishlaydi: kompyuterdan uzib, USB kabelni istalgan powerbankka ulasangiz, uni qayerga bo‘lsa ham olib borasiz.
Ulanish
- Quvvat (+)
- Yer (−)
- Signal pini
- I²C / SPI shinasi
- OLEDVCC→UNO5V
- OLEDGND→UNOGND
- OLEDSDA→UNOA4
- OLEDSCL→UNOA5
- HC-SR04VCC→UNO5V
- HC-SR04GND→UNOGND
- HC-SR04TRIG→UNOD12
- HC-SR04ECHO→UNOD11
- USB kabel→Kompyuter yoki powerbank
Kod
sketch.ino
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 oled(128, 64, &Wire, -1);
const int TRIG = 12, ECHO = 11;
long readCm() {
digitalWrite(TRIG, LOW); delayMicroseconds(2);
digitalWrite(TRIG, HIGH); delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long us = pulseIn(ECHO, HIGH, 25000);
return us ? us / 58 : -1;
}
// beshta o‘lchovning o‘rtancha qiymati: bitta adashgan aks-sado natijani buzmaydi
long measure() {
long r[5];
for (int i = 0; i < 5; i++) { r[i] = readCm(); delay(15); }
for (int i = 0; i < 4; i++)
for (int j = i + 1; j < 5; j++)
if (r[j] < r[i]) { long t = r[i]; r[i] = r[j]; r[j] = t; }
return r[2];
}
void setup() {
pinMode(TRIG, OUTPUT); pinMode(ECHO, INPUT);
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C); // ekran yonmasa, 0x3D ni sinab ko‘ring
oled.setTextColor(SSD1306_WHITE);
}
void loop() {
long cm = measure();
oled.clearDisplay();
oled.setTextSize(1); oled.setCursor(0, 0);
oled.print("Constell tape");
oled.setTextSize(3); oled.setCursor(0, 22);
if (cm < 2 || cm > 400) oled.print("---");
else { oled.print(cm); oled.setTextSize(2); oled.print(" cm"); }
oled.display();
delay(150);
}Agar biror narsa ishlamasa
- Ekran qorong‘i: kodda 0x3C o‘rniga 0x3D yozib ko‘ring; SDA/SCL A4/A5 ga ulanganini tekshiring.
- Natija sakraydi: sensorni o‘lchanayotgan yuzaga tik qarating; 2 sm dan yaqin va 4 m dan uzoq masofani u o‘lchay olmaydi.
- Powerbankdan ishlamaydi: ba’zi powerbanklar kichik tokda o‘zini o‘chiradi — boshqasini sinab ko‘ring yoki ekran yorqinligini oshiring.
Keyingi qadamlar
- Tugma qo‘shib, o‘lchovni «muzlatib» qo‘ying
- Ikki o‘lchovdan xona maydonini hisoblang

