با آردینو و نمایشگر OLED، یک گردنبند هوشمند بسازید

فهرست مطالب

مقدمه

اگر میخواهید هدیه ای به دوست یا خانواده خود بدهید، بهتر است از دانش و تجربیات خود استفاده کرده و آنها را با هدیه دست ساز خودتان خوشحال کنید.

همانطور که می دانید آردینو گزینه های فراوانی برای ساخت گجت ها و ابزارهای جذاب فراهم کرده است. ایده ما ساخت یک گردنبند با استفاده از برد آردوینو Pro mini و نمایشگر OLED برای نمایش انیمیشن است.

آنچه در این آموزش یاد می‌گیرید

لوازمی که به آن احتیاج دارید

قطعات مورد نیاز

آردوینو Pro Mini × 1
ماژول نمایشگر 0.9 اینچ OLED × 1
سوئیچ زاویه سنج جیوه ای × 1
Battery 80mAh 3.7 V lipo Polymer × 1

نرم افزار های مورد نیاز

Arduino IDE

سیم بندی

کد

ابتدا می بایست کتابخانه OLED را نصب کنید و سپس کد را روی برد آپلود کنید. به بخش Manage Library رفته و Adafruit SSD1306 را سرچ کنید. اگر برایاولین بار است که روی آردینو برنامه می ریزید، اصلا نگران نباشید و طبق مراحل زیر پیش بروید:
  1. به آدرس www.arduino.cc/en/Main/Software رفته و نرم افزار IDE را متناسب با سیستم عامل خود دانلود و نصب کنید.
  2. نرم افزار Arduino IDE را اجرا کنید. تمام کد های پیش فرض را پاک کرده و کد زیر را به جای آن کپی کنید.
  3. نوع آردوینو خود را از پنجره ی Tools و قسمت Board انتخاب کنید.
  4. پورتی که (COM) آردوینو به آن متصل است را در پنجره ی Tools انتخاب کنید.
  5. دکمه ی Upload (شکلی که شبیه فلش است) را بزنید تا کد شما روی آردوینو آپلود شود.
  6. شما با موفقیت کد خود را روی آردوینو ریختید.
#include "SPI.h"
#include "Wire.h"
#include "Adafruit_GFX.h"
#include "Adafruit_SSD1306.h"
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for SSD1306 display connected using software SPI (default case):
#define OLED_MOSI 2
#define OLED_CLK 3
#define OLED_DC 4
#define OLED_CS 5
#define OLED_RESET 6
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

/* Comment out above, uncomment this block to use hardware SPI
#define OLED_DC 6
#define OLED_CS 7
#define OLED_RESET 8
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
&SPI, OLED_DC, OLED_RESET, OLED_CS);
*/

#define NUMFLAKES 15 // Number of snowflakes in the animation example

#define LOGO_HEIGHT 4
#define LOGO_WIDTH 4

static const unsigned char PROGMEM logo_tree[] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xe0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf3, 0x30, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc3, 0x30, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x07, 0x83, 0x38, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x0f, 0x03, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x1c, 0x03, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x78, 0x03, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xb7, 0xf0, 0x03, 0x0e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x33, 0xe0, 0x03, 0x0e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x33, 0x80, 0x03, 0x06, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3c, 0x33, 0x80, 0x07, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0xf0, 0x31, 0x80, 0x07, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf1, 0xe0, 0x31, 0xc1, 0xc7, 0x03, 0x00, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf3, 0xc0, 0x31, 0xc1, 0xc6, 0x03, 0x00, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x00, 0x30, 0xc0, 0x86, 0x03, 0x80, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0xde, 0x0c, 0x70, 0xc0, 0x06, 0x03, 0x80, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x9c, 0x1c, 0x70, 0xe0, 0x06, 0x01, 0x80, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe1, 0x9c, 0x0c, 0x60, 0xe0, 0x0e, 0x01, 0x80, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x81, 0x9c, 0x00, 0x60, 0x60, 0x0e, 0x01, 0x80, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x8c, 0x00, 0x60, 0x60, 0x0c, 0x21, 0x80, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x03, 0x8c, 0x00, 0xe0, 0x60, 0x0c, 0x71, 0xc0, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x08, 0x00, 0x3c, 0x03, 0x0c, 0x00, 0xc0, 0x60, 0x1c, 0x71, 0xff, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x0c, 0x00, 0xf0, 0xc3, 0x0c, 0x00, 0xc0, 0x70, 0x1c, 0x01, 0xff, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x0e, 0x31, 0xe1, 0xc7, 0x0c, 0x01, 0xc0, 0x70, 0x18, 0x01, 0xff, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x0f, 0xe3, 0xc0, 0xc6, 0x0e, 0x01, 0x80, 0x70, 0x18, 0x00, 0xc0, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xe7, 0x00, 0x0e, 0x0e, 0x03, 0x80, 0x70, 0x38, 0x00, 0xc0, 0xc0, 0x00,
0x00, 0x00, 0x00, 0xff, 0xce, 0x00, 0x0c, 0x0e, 0x03, 0x80, 0x70, 0x30, 0x00, 0xc0, 0xc0, 0x00,
0x00, 0x00, 0x00, 0xff, 0xce, 0x00, 0x1c, 0x0e, 0x03, 0x0c, 0x70, 0x30, 0x00, 0xc0, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xe7, 0x00, 0x38, 0x0e, 0x07, 0x0e, 0x70, 0x70, 0x00, 0xff, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x0f, 0xe3, 0xc0, 0x70, 0x0e, 0x06, 0x0c, 0x70, 0x60, 0x00, 0xff, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x0e, 0x71, 0xe0, 0xf0, 0x0e, 0x0e, 0x00, 0x70, 0xe0, 0x01, 0xff, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x0c, 0x00, 0xf1, 0xe0, 0x0c, 0x1c, 0x00, 0x70, 0xe0, 0x01, 0xc0, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x08, 0x00, 0x7b, 0xc3, 0x8c, 0x18, 0x00, 0x61, 0xc0, 0x01, 0xc0, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x03, 0x8c, 0x38, 0x00, 0x61, 0xc2, 0x01, 0xc0, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x03, 0x8c, 0x70, 0x00, 0x61, 0x87, 0x01, 0x80, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x1c, 0xe0, 0x00, 0x63, 0x87, 0x01, 0x80, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x19, 0xc0, 0x00, 0xe7, 0x02, 0x01, 0x80, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0xc0, 0x00, 0xe7, 0x00, 0x01, 0x80, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x1f, 0x81, 0xc0, 0xce, 0x00, 0x03, 0x80, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3f, 0x01, 0xc0, 0xcc, 0x00, 0x03, 0x80, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x33, 0xc0, 0x81, 0xdc, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xb1, 0xe0, 0x01, 0xb8, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0xf0, 0x01, 0xf0, 0x00, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x78, 0x03, 0xf0, 0x00, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x03, 0xe0, 0x00, 0x06, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x03, 0xe0, 0xe0, 0x0e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x87, 0xf0, 0xe0, 0x0e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe6, 0x78, 0x40, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x3c, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x0f, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x07, 0x80, 0x38, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x38, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x70, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x70, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xe0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

static const unsigned char PROGMEM logo_bmp[] =
{ 0x60,
0xf0,
0xf0,
0x60
};

bool merc;

void setup() {
Serial.begin(9600);

// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if(!display.begin(SSD1306_SWITCHCAPVCC)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}

// Show initial display buffer contents on the screen --
// the library initializes this with an Adafruit splash screen.
display.display();
delay(2000); // Pause for 2 seconds

merc=digitalRead(7);
testdrawbitmap(); // Draw a small bitmap image
testanimate(logo_bmp, LOGO_WIDTH, LOGO_HEIGHT); // Animate bitmaps
}

void loop() {
}

void testdrawbitmap(void) {
display.clearDisplay();
if (merc==true){
display.drawBitmap(0,0,logo_tree, 128, 64, 1);
display.display();
delay(1000);}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define XPOS 0 // Indexes into the 'icons' array in function below
#define YPOS 1
#define DELTAY 2

void testanimate(const uint8_t *bitmap, uint8_t w, uint8_t h) {
int8_t f, icons[NUMFLAKES][3];

// Initialize 'snowflake' positions
for(f=0; f< NUMFLAKES; f++) {
icons[f][XPOS] = random(1 - LOGO_WIDTH, display.width());
icons[f][YPOS] = -LOGO_HEIGHT;
icons[f][DELTAY] = random(1, 6);
Serial.print(F("x: "));
Serial.print(icons[f][XPOS], DEC);
Serial.print(F(" y: "));
Serial.print(icons[f][YPOS], DEC);
Serial.print(F(" dy: "));
Serial.println(icons[f][DELTAY], DEC);
}

for(int i=0;i<10;i++) {
display.clearDisplay(); // Clear the display buffer
display.drawBitmap(0,0,logo_tree, 128, 64, 1);
display.display();
// Draw each snowflake:
for(f=0; f< NUMFLAKES; f++) {
display.drawBitmap( icons[f][YPOS],icons[f][XPOS], bitmap, 4, 4, WHITE);
}

display.display(); // Show the display buffer on the screen
delay(50); // Pause for 1/10 second

// Then update coordinates of each flake...
for(f=0; f< NUMFLAKES; f++) { icons[f][YPOS] += icons[f][DELTAY]; // If snowflake is off the bottom of the screen... if (icons[f][XPOS] >= display.height()) {
// Reinitialize to a random position, just off the top
icons[f][XPOS] = random(1 - LOGO_WIDTH, display.width());
icons[f][YPOS] = -LOGO_HEIGHT;
icons[f][DELTAY] = random(1, 6);
}
}
}

ساخت یک گردنبند هوشمند!

اولین گام برای ساخت گردنبند هوشمند، بریدن برد آردینو تا حد امکان برای جاشدن آن در قالب گردنبند است. دقت داشته باشید به هیچ وجه قسمت های اصلی برد و Track ها را جدا نکنید.

گام بعدی اتصال نمایشگر طبق عکس مدار به اردوینو است. مرحله بعد اتصال سوئچ جیوه ای به پایه شماره 7 آردوینو و قراردادن یک کلید روشن و خاموش بین باتری و آردوینو می باشد.

حال مدارها را در یک قالب پلکسی گلس(یا هر جنس دیگری که به آن دسترسی دارید) گذاشته و به آن زنجیر متصل کنید و لذت ببرید!

یک گام جلوتر

  • سعی کنید اینمیشن دیگری روی OLED نمایش دهید.
  • سعی کنید، سیستم را به پارامترهای دیگری نظیر دما، حساس کنید.

آموزش های مشابه

Comments (2)

  • مصطفی Reply

    سلام.خسته نباشید.آیا میتوان زمان انیمیشن را بیشتر و به ۲ ساعت و ۲۰ ساعت ارتقا داد؟چطوری؟و این گردنبند را طوری کرد که دما طرف هدیه گیرنده را اندازه بگیرد؟چطوری؟ممنونم

    آگوست 3, 2023 at 5:38 ق.ظ
    • محمد دمیرچی Reply

      با سلام
      نمایش انیمیشن به صورت لوپ می باشد وتا ابد ادامه دارد و محدودیت شما باتری می باشد چون باتری کوچکی می باشد و شارژ آن تمام می شود.
      برای اندازه گیری دما کاقی است یک سنسور دما نیز قراربدهید که دما را اندازه گیری کنید.

      آگوست 5, 2023 at 12:10 ب.ظ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.