วันศุกร์ที่ 20 มกราคม พ.ศ. 2560

Eight digital tube module LED display Eight serial 595 drivers พร้อมสายไฟ

Eight digital tube module LED display Eight serial 595 drivers พร้อมสายไฟ
LED แสดงผลดิจิตอลขนาด 8 หลักสีแดง
รายละเอียด Eight digital tube module LED display Eight serial 595 drivers
1. Driven by 2 595 digital tube, need microcontroller IO port 3 road, according to the principle of digital tube dynamic scanning display;
2. Wide working voltage of 3.3 V to 5 V.
3. PCB size: 71 mm * 22 mm
4. Digital tube type: 0.36 four of Yang
ตัวอย่างโคดพร้อมใช้งานใน 1 นาที (ก็อปไปวางแล้วออกเลย)
/*
    written by Jason Berger , พ.ไพศาล , arduinoall
 reedited by Phaisarn Te. @060614
 
 8-Digit 7-Segment display driver.
 2x 74HC595 wired to 2x 4-digit 7-segment displays
 bits 0-7 select a digit
 bits 8-14 A-G
 
 */

//กำหนด ขา pin
const int SCLK_pin=4;
const int RCLK_pin=5;
const int DIO_pin =6;


// 0-9   --> ใช้ค่า 0-9
// 0.-9. --> ใช้ค่า 10-19
// space --> ' '
// A-Z, a-z --> 'A' 'B' ... 'a' 'b'

// กำหนดค่าที่ต้องการแสดงเริ่มต้น เช่น
char disp_c[]= {
  ' ','O','N','I','U','D','R','A'}; //   = แสดงคำว่า ARDUINO
//char disp_c[]= {' ','N','O',' '}; //   = แสดงคำว่า ON
//char disp_c[]= {'F','F','O',' '}; //   = แสดงคำว่า OFF
//char disp_c[] = {2,4,16,' '};        //  = แสดงค่า   6.42   (ei 16 --> 6.)


int  disp[8];

//time values for delay workaround
unsigned long prev =0;
unsigned long waitMS=20;




void setup()
{

  pinMode(RCLK_pin,OUTPUT);
  pinMode(DIO_pin,OUTPUT);
  pinMode(SCLK_pin,OUTPUT);

  showDisplay();
}  

int n;
unsigned long start=millis();
byte b = 0;
void loop()
{
  showDisplay();
  if(b==0){

    b++;
    wait(3000);     // หน่วงเวลาแสดงข้อความต้อนรับ
  }
  else{
    if ( millis() > (prev + waitMS))
    {
      //code to loop in here


      // ระหว่าง loop แก้ไขแสดงค่าอื่นๆได้

      /*
      // ตัวอย่างแสดงคำว่า Ardu
       disp_c[0] = 'u';
       disp_c[1] = 'd';
       disp_c[2] = 'r';
       disp_c[3] = 'A';
       */

      // ตัวอย่างแสดงค่า 95.42
      /*disp_c[0] = 2;
       disp_c[1] = 4;
       disp_c[2] = '-'; //15;  // --> แสดงเลข 5.
       disp_c[3] = 9;*/


      // ตัวอย่าง การ run เลข
      // แก้ไขตรงนี้      disp_c[0] = n%10;                           // แสดงผลหลัก 1
      disp_c[1] = (n/10)%10;                   // แสดงผลหลัก 2
      disp_c[2] = (n/100)%10+10;          // แสดงผลหลัก 3
      disp_c[3] = (n/1000)%10;              // แสดงผลหลัก 4

     // แก้ไขตรงนี้
      disp_c[4] = 'd';
      disp_c[5] = 'c';
      disp_c[6] = 'b';
      disp_c[7] = 'a';
      n++;
      if(n>=10000) {
        n=0;
      }

      // หน่วงเวลา
      wait(200);
    }
  }
}


void showDisplay()
{
  setDisp();
  for(int i=0; i<8; i++)
  {
    setDigit(i,disp[i]);
  }
}

void setDigit(int dig, int character)
{
  int digits[]= {
    128,64,32,16,8,4,2,1      };

  //character set (0-9)0-9
  //            (10-19)0.-9.
  //            (20-45)A-Z
  //            (46-71)a-z
  //            (72)- (73) space
  int characters[]= {
    3,159,37,13,153,73,65,31,1,9,
    2,158,36,12,152,72,64,30,0,8,
    17,1,99,3,97,113,67,145,243,135,145,227,85,19,3,49,25,115,73,31,129,129,169,145,137,37,
    5,193,229,133,33,113,9,209,247,143,81,227,85,213,197,49,25,245,73,225,199,199,169,145,137,37,
    253,255      };

  digitalWrite(RCLK_pin, LOW);
  shiftOut(DIO_pin, SCLK_pin, LSBFIRST, characters[character]);
  shiftOut(DIO_pin, SCLK_pin, LSBFIRST, digits[dig]);
  digitalWrite(RCLK_pin, HIGH);
}

void setDisp()
{
  for (int i=0; i<8;i++)
  {
    int val = disp_c[i];
    if((val >= 32)&&(val <= 47)){ // ! ถึง / ไม่ให้แสดง
      switch (val){
      case 45 :
        val = 72;
        break;  // เครื่องหมาย -
      default :
        val = 73;
        break;  // ค่าอื่นระหว่างนี้ ไม่ให้แสดง
      }
    }
    else if((val >= 48)&&(val <= 57)) //0-9
    {
      val -= 48;
    }
    else if((val >= 65)&&(val <= 90)) //A-Z
    {
      val -= 45;
    }
    else if((val >= 97)&&(val <= 122)) //a-z
    {
      val -= 51;
    }

    disp[i] = val;

  }
}   
void wait( unsigned long milsec)
{
  prev = millis();
  waitMS = milsec;
}
ถ้าต้องการปรับเปลียนโคดแสดงตัวเลขเอง หรือต้องการสร้างวงจรเอง 
ลองดูได้ที่เว็บนี้ครับ http://portfolio.girshwin.com/led_shift.php

อ้างอิง


https://www.arduinoall.com/product/128/eight-digital-tube-module-led-display-eight-serial-595-drivers-พร้อมสายไฟ

วันพฤหัสบดีที่ 12 มกราคม พ.ศ. 2560

LCD 16x2 Keypad Shield for Arduino

LCD 16x2 Keypad Shield for Arduino
จอแสดงผล LCD ขนาด 16 ตัวอักษร 2 บรรทัด พร้อมปุ่มกด สามารถใช้ป้อนค่าปุ่มที่กดให้กับ Arduino เอาไปควบคุมข้อมูลต่าง ๆ ที่ต้องการได้อย่างสะดวก ไม่ต้องต่อสายเพิ่ม แค่เสียบก็พร้อมใช้งาน เหมาะสำหรับงานแสดงผลข้อมูลออกจอ LCD ที่ต้องการรับค่าปุ่มจากผู้ใช้ไปประมวลผล
ตัวอย่างโคด Arduino LCD Keypad 
// อัพโหลดเสร็จ ปรับความสว่างของจอ LCD โดยหมุนตามเข็มนาฬิกาเพื่อให้ตัวอักษรเข้มขึ้น
//Sample using LiquidCrystal library
#include <LiquidCrystal.h>

/*******************************************************

This program will test the LCD panel and the buttons
Mark Bramwell, July 2010

********************************************************/

// select the pins used on the LCD panel
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// define some values used by the panel and buttons
int lcd_key     = 0;
int adc_key_in  = 0;
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

// read the buttons
int read_LCD_buttons()
{
 adc_key_in = analogRead(0);      // read the value from the sensor 
 // my buttons when read are centered at these valies: 0, 144, 329, 504, 741
 // we add approx 50 to those values and check to see if we are close
 if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result
 // For V1.1 us this threshold
 if (adc_key_in < 50)   return btnRIGHT;  
 if (adc_key_in < 250)  return btnUP; 
 if (adc_key_in < 450)  return btnDOWN; 
 if (adc_key_in < 650)  return btnLEFT; 
 if (adc_key_in < 850)  return btnSELECT;  

 // For V1.0 comment the other threshold and use the one below:
/*
 if (adc_key_in < 50)   return btnRIGHT;  
 if (adc_key_in < 195)  return btnUP; 
 if (adc_key_in < 380)  return btnDOWN; 
 if (adc_key_in < 555)  return btnLEFT; 
 if (adc_key_in < 790)  return btnSELECT;   
*/


 return btnNONE;  // when all others fail, return this...
}

void setup()
{
 lcd.begin(16, 2);              // start the library
 lcd.setCursor(0,0);
 lcd.print("Push the buttons"); // print a simple message
 Serial.begin(9600);
}

void loop()
{
 lcd.setCursor(9,1);            // move cursor to second line "1" and 9 spaces over
 lcd.print(millis()/1000);      // display seconds elapsed since power-up


 lcd.setCursor(0,1);            // move to the begining of the second line
 lcd_key = read_LCD_buttons();  // read the buttons

 switch (lcd_key)               // depending on which button was pushed, we perform an action
 {
   case btnRIGHT:
     {
     lcd.print("RIGHT ");
     break;
     }
   case btnLEFT:
     {
     lcd.print("LEFT   ");
     break;
     }
   case btnUP:
     {
     lcd.print("UP    ");
     break;
     }
   case btnDOWN:
     {
     lcd.print("DOWN  ");
     break;
     }
   case btnSELECT:
     {
     lcd.print("SELECT");
     break;
     }
     case btnNONE:
     {
     lcd.print("NONE  ");
     break;
     }
 }


}
1602 LCD 16x2 Keypad Shield for Arduino

วันพุธที่ 4 มกราคม พ.ศ. 2560

Arduino วัดอุณหภูมิและความชื้น ด้วยเซนเซอร์ DHT22 / DTH21 / DHT11

วิธี ใช้งาน Arduino วัดอุณหภูมิและความชื้น ด้วยเซนเซอร์ DHT22 / DTH21 / DHT11 ใช้ได้ภายใน 3 นาที



Arduino สามารถใช้งานเป็นอุปกรณ์เซนเซอร์ ความชื้นและอุณหภูมิ สำหรับประยุกต์ใช้กับงานตามต้องการได้ เช่น ระบบควบคุมอุณหภูมิความชื้นในโรงเพาะเห็น ระบบควบคุมอัตโนมัติ หรือจะใช้ทำเป็นเซนเซอร์เล็ก ๆ สำหรับมอนิเตอร์อุณหภูมิความชื้นในสถานที่ต่าง ๆ การใช้งานเซนเซอร์อุณหภูมิและความชื้นร่วมกับ Arduino สามารถทำได้โดยง่าย เพราะมีไลบารีมาให้พร้อมใช้งาน เพียงแค่ก็อปไปวางก็สามารถดึงค่าอุณหภูมิและความชื้นออกมาได้แล้ว

ในตัวอย่างนี้ ใช้เซนเซอร์่วัดความชื้นและอุณหภูมิ DHT22 ร่วมกับ Arduino 



การต่อวงจร DHT11 / DHT22 กับ Arduino ต่อตามรูปนี้
สำหรับการต่อวงจร DHT21 กับ Arduino ต่อตามนี้


การเขียนโคด Arduino เพื่ออ่านค่าความชื้นและอุณหภูมิจากเซนเซอร์ DHT22
  • สายสีดำ -> Gnd
  • สายสีแดง -> 5 Vcc
  • สายสีเหลือง -> 2 (สาย ข้อมูล)
  • ต่อ R 4.7K คร่อมสายสีแดงกับสายสีเหลือง
2.เขียนโคดโปรแกรมตามนี้ (ก็อปวาง)
#include "DHT.h"
DHT dht;
void setup()
{
Serial.begin(9600);
Serial.println();
Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)");
dht.setup(2); // data pin 2
}
void loop()
{
delay(dht.getMinimumSamplingPeriod());
float humidity = dht.getHumidity(); // ดึงค่าความชื้น
float temperature = dht.getTemperature(); // ดึงค่าอุณหภูมิ
Serial.print(dht.getStatusString());
Serial.print("\t");
Serial.print(humidity, 1);
Serial.print("\t\t");
Serial.print(temperature, 1);
Serial.print("\t\t");
Serial.println(dht.toFahrenheit(temperature), 1);
}

3. เปิดดูผลลัพธ์ที่หน้าจอ Serial Monitor ก็จะพบว่าเราสามารถดึงค่าอุณหภูมิ ความชื้น
จากเซนเซอร์ DHT22 / DHT21 / DHT11 โดยใช้ Arduino ออกมาใช้งานได้แล้ว



ข้อมูลอุปกรณ์เซนเซอร์ ความชื้นและอุณหภูมิ
อ้างอิง

https://www.arduinoall.com/article/18/%E0%B8%AA%E0%B8%AD%E0%B8%99-%E0%B8%A7%E0%B8%B4%E0%B8%98%E0%B8%B5-%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B8%87%E0%B8%B2%E0%B8%99-arduino-%E0%B8%A7%E0%B8%B1%E0%B8%94%E0%B8%AD%E0%B8%B8%E0%B8%93%E0%B8%AB%E0%B8%A0%E0%B8%B9%E0%B8%A1%E0%B8%B4%E0%B9%81%E0%B8%A5%E0%B8%B0%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B8%8A%E0%B8%B7%E0%B9%89%E0%B8%99-%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2%E0%B9%80%E0%B8%8B%E0%B8%99%E0%B9%80%E0%B8%8B%E0%B8%AD%E0%B8%A3%E0%B9%8C-dht22-dth21-dht11-%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B9%84%E0%B8%94%E0%B9%89%E0%B8%A0%E0%B8%B2%E0%B8%A2%E0%B9%83%E0%B8%99-3-%E0%B8%99%E0%B8%B2%E0%B8%97%E0%B8%B5