วันพฤหัสบดีที่ 28 สิงหาคม พ.ศ. 2557

RGB LED / PWM-based Dimming

โจทย์ Warm-up ทบทวน Arduino และการเขียนโปรแกรมภาษา C/C++

1) จงเขียนโค้ดสำหรับ Arduino และวงจรที่ทำงานได้ตามข้อกำหนดต่อไปนี้ [RGB LED / PWM-based Dimming]

  • วงจรทำงานโดยใช้ระดับแรงดันสำหรับ I/O ที่ 5V เท่านั้น
  • มีปุ่มกด 3 ปุ่ม (ให้ชื่อว่า R, G, B) ทำงานแบบ Pull-up (active-low) ให้ต่อวงจรปุ่มกดเอง เพื่อใช้งานกับบอร์ด Arduino
  • มีเอาต์พุต 3 ขา ต่อกับวงจร RGB LED (จะใช้แบบ Common-Anode หรือ Common-Cathode ก็ได้) พร้อมตัวต้านทานจำกัดกระแส 3 ตัว
  • เขียนโค้ดด้วยภาษา C++ สำหรับ Arduino เพื่อสร้าง Class ที่มีชื่อว่า "RGB_LED"
  • กำหนดให้ constructor สำหรับคลาส RGB_LED เป็นดังนี้                                          RGB_LED( int red_pin, int_green_pin, int blue_pin );                                                        โดยรับค่ามาเป็นหมายเลขของ I/O pins สำหรับ 3 ขาของ Arduino ที่จะถูกใช้งานเป็นเอาต์พุตแบบ PWM
  • มีเมธอดอย่างเช่น                                                                                                                      void setRed( int duty_cycle ), void setGreen( int duty_cycle ),                                           void setBlue( int duty_cycle ) เพื่อใช้กำหนดค่า duty cycle ของขาเอาต์พุต PWM และใช้ในการกำหนดความสว่างของแต่ละสี ใช้คำสั่ง analogWrite() ในการกำหนดค่า
  • กำหนดสมาชิก instance members ตามความจำเป็น เช่น ค่า duty cycles สำหรับแต่ละสี
  • ใช้คลาสดังกล่าวในการเขียนโค้ด (สร้าง object จากคลาสดังกล่าวและเรียกใช้เมธอด) เพื่อสาธิตการทำงานร่วมกับฮาร์ดแวร์จริง
  • เมื่อกดปุ่ม R, G หรือ B แล้วปล่อยแต่ละครั้ง จะทำให้ค่า duty cycle ของสีดังกล่าวเพิ่มขึ้นทีละ 8 ถ้าค่า duty cycle เกิน 255 ให้วนกลับมาเริ่มที่ 0 ใหม่ (ค่าเริ่มต้นสำหรับ duty cycles เป็น 0)
รูปที่ 1.1 แสดงภาพของวงจร LED จากโปรแกรมeagleโดยต่อแบบ active-low
หมายเหตุ ขาpinที่ต่อวงจรจากโปรแกรมeagle อาจไม่เหมือนกับที่ต่อในวงจรจริง

รูปที่ 1.2 แสดงภาพของวงจร LED โดยต่อแบบ active-low


ส่วนของโค้ด

#include "RGB_LED.h"


RGB_LED led(2,3,4,true);   // สร้าง RGB จาก Class

int IN_IN[] = {7,8,10} ;            // input ข้อมูลที่ pin 7,8 และ 10

int count[] ={0,0,0};                // Light

int ch[] = {1,1,1} ;                   // check status

int val[] = {0,0,0} ;                  // check bottom

void setup() {

  Serial.begin(9600);

  pinMode(IN_IN[0],INPUT);

  pinMode(IN_IN[1],INPUT);

  pinMode(IN_IN[2],INPUT);

}



void loop() {

  

  for(int i = 0 ; i < 3 ; i++){                              // check bottom +light

    val[i] = digitalRead(IN_IN[i]);

    if(val[i] == 0 && ch[i] == 1){ch[i] = 0;}

    if(val[i] == 1 && ch[i] == 0){count[i] = count[i]+8;
    ch[i] = 1;
    if(count[i] > 255) {count[i] = 0;}
   }
 }
    led.setColorR( 254 - count[0] );                    // lightRED
    led.setColorG( 254 - count[1] );                    // lightGreen
    led.setColorB( 254 - count[2] );                    // lightBule
  
  for(int j = 0 ; j < 3 ; j++){
   Serial.println((int) count[j]);  
   Serial.println((int) val[j]); }
  delay(100);


2) เหมือนข้อ 1 แต่เปลี่ยนพฤติกรรมการกดปุ่ม: ถ้ากดปุ่ม R, G หรือ B ค้างไว้อย่างน้อย 100 msec จะเพิ่มค่าขึ้นทีละ 8 (แล้วเริ่มนับเวลาใหม่) ถ้าค่า duty cycle เกิน 255 ให้วนกลับมาเริ่มที่ 0 ใหม่

ส่วนของโค้ด

#include "RGB_LED.h"

RGB_LED led(2,3,4,true);           // สร้าง RGB จาก Class
int IN_IN[] = {7,8,10} ;                    // input ข้อมูลที่ pin 7,8 และ 10
int count[] ={0,0,0};                        // Light
int ch[] = {1,1,1} ;                           // check status
int t[] = {0,0,0} ;                              // check time
int val[] = {0,0,0} ;                          // check bottom
void setup() {
  Serial.begin(9600);
  pinMode(IN_IN[0],INPUT); 
  pinMode(IN_IN[1],INPUT);
  pinMode(IN_IN[2],INPUT);
}

void loop() {
  
  for(int i = 0 ; i < 3 ; i++){               // check bottom +light
    val[i] = digitalRead(IN_IN[i]);
    if(val[i] == 0 && ch[i] == 1){
      t[i] = t[i] + 1;
    if(t[i] > 50){
    count[i] = count[i]+8;
    if(count[i] > 255) {count[i] = 0;}
    ch[i] = 0;
  }
}
    if(val[i] == 1 && ch[i] == 0){
      t[i] = 0;
    ch[i] = 1;
    
  }
}

    led.setColorR( 254 - count[0] );                  // lightRED
    led.setColorG( 254 - count[1] );                  // lightGreen
    led.setColorB( 254 - count[2] );                  // lightBule
  
  for(int j = 0 ; j < 3 ; j++){
   Serial.println((int) count[j]);  
   Serial.println((int) val[j]); }
  delay(100);







 PWM = 0%




LED RGB ดับ




PWM = 100%



LED RGB สว่าง



LED RGB สว่างทุกดวง




Downloadcode


วันอาทิตย์ที่ 17 สิงหาคม พ.ศ. 2557

Raspberry Pi Model B and B+ with BeagleBone Black Rev.B and Rev.C

BeagleBone Black vs Raspberry Pi – The Features


Raspberry Pi Model B  BeagleBone Black Rev.B
Processor Broadcom BCM2835 ARM11 @ 700 MHz
(Overclockable to 1GHz)
TI Sitara AM3359AZCZ100 Cortex A8 @ 1GHz(will be changed to AM3358BZCZ100 in future versions)
GPU VideoCore IV PowerVR SGX530
Video decoder VideoCore IV
1080p video decoding for H.264, MPEG2* and VC1*
1080p video encoding (H.264)* Extra license quired
N/A
RAM 512 MB SDRAM @ 400 Mhz 512 MB SDRAM @ 400 Mhz
StorageSD card slot 2GB eMMC & micro SD card slot
Ethernet 10/100M (USB to Ethernet chipset)  10/100M (Supported by SoC
USBhost 1 client / 1 host port
Video HDMI (1080p), Composite micro HDMI (1280×1024 max)
Audio Via HDMI 
Audio Jack
Via HDMI
Peripherals 12 –GPIO, USART, SPI, I2C (P1 and P5), CSI (camera serial interface) and DSI (display serial interface.)
SPI, I2C, SPI, CAN, Timers, LCD, MMC, Analog, 65 GPIO
Power USB 5V
322ma @ idle. Rated at 700mA
USB 5V
DC Jack
210 to 460mA @ 5V
Linux Support ARM Linux distributions supporting ARMv6.Two main OS supported: Debian and Arch Linux ARM
Any ARM Linux distribution.2 main OS supported: Ubuntu and Angstrom
Android Support Android 4.0.3 (work in progress, and no download available)
Some CyanoGenMod builds are also available but just too slow to be usable.
Android Jelly Bean (Stable version)

BeagleBone Black Rev.C ต่างจาก Rev.B คือ 


BeagleBone Black โดยออกบอร์ด Revision C หรือที่เราเรียกว่า Rev. C ซึ่งมีการปรับปรุงและเพิ่มเติมคุณสมบัติของบอร์ดเพิ่มขึ้นจาก Rev. B
           เพิ่มขนาดหน่วยความจำแฟลชแบบ eMMC บนบอร์ดจาก 2GB เป็น 4GB เพื่อตอบสนองความต้องการของกลุ่มลูกค้าและ Community ให้มีพื้นที่ใช้สอยหลังจากติดตั้ง OS แล้วมากขึ้น ซึ่งขนาดที่เพิ่มขึ้นนี้ยังส่งผลต่อการทำงานที่รวดเร็วขึ้นด้วยอีกเล็กน้อย (แม้ว่าตามสเปคไม่ได้ระบุไว้ แต่เท่าที่ลองใช้ดูเร็วขึ้นกว่าตัว 2GB เดิมพอสมควรเหมือนกันครับ)           เปลี่ยนระบบ Linux OS ติดตั้งบนบอร์ดมาจากโรงงาน เดิมบอร์ดที่แกะกล่องออกมาติดตั้ง Angstrom แต่ในรุ่นนี้จะเปลี่ยนเป็น Debian แทน ซึ่งตรงนี้ช่วยให้การใช้งานหรือการเรียนรู้ตัวบอร์ดสะดวกรวดเร็วและง่ายดายขึ้น เนื่องจาก Debian นั้น User-Friendly เหมาะกับการใช้งานทั่วไปมากกว่า Angstrom

Technical Specifications
  • Processor
    • 720 MHz super-scalar ARM Cortex-A8 (armv7a)
    • 3D graphics accelerator
    • ARM Cortex-M3 for power management
    • 2x Programmable Realtime Unit 32-bit RISC CPUs
  • RAM: 256 MB
  • Connectivity
    • USB client: power, debug and device
    • USB host
    • Ethernet
    • 2x 46 pin headers
      • 2x I2C, 5x UART, I2S, SPI, CAN, 66x 3.3V GPIO, 7x ADC           
ระบบปฏิบัติการที่รองรับการใช้งาน BeagleBone Black
  • Debian
  • Android
  • Ubuntu
  • Cloud9 IDE on Node.js w/ BoneScript library
  • plus much more
ที่มา : http://beagleboard.org/black
          http://www.electoday.com/index.php?topic=11675.0
          http://www.geeky-gadgets.com/beaglebone-black-rev-c-development-board-now-shipping-for-55-14-05-2014/
          http://elinux.org/Beagleboard:BeagleBoneBlack#BeagleBone_Black_Features 

raspberry pi model B+ มีอะไรที่ต่างจาก model B บ้าง    

  • USB Ports    จากเดิมที่ raspberry pi model B มี USB Ports ทั้งหมด 2 ช่อง มาคราวนี้ใน Model B+ เพิ่มเป็น 4 ช่องเลยทีเดียว แบบนี้เรียกได้ว่า บอกลา USB hub ไปได้เลย
  • GPIO pins   จากเดิมที่มี GPIO pins ทั้งหมด 26 pins ซึ่งอาจจะไม่เพียงพอกับความต้องการใช้งานของผู้ใช้หลายๆราย ใน Model B+ ได้เพิ่ม GPIO pins เข้าไปเป็น 40 pins
  • SD card Raspberry pi model B+   ได้เปลี่ยนจาก SD card ที่มีขนาดใหญ่และยื่นออกมานอกบอร์ด เป็น micro SD card เพื่อลดพื่นที่ลงและแก้ไขปัญหา SD card ยื่นออกมานอกบอร์ด
  • Audio Output    B+ เปลี่ยนจาก Audio Output แบบ 2 ขั้วให้เป็นแบบ 4 ขั้ว ทำให้สามารถส่งสัญญาณเสียง และ composite video ออกมาได้จากช่อง output เดียว
  • Display Output    จาก HDMI DSI Display Port Composite RCA เปลี่ยนเป็น HDMI DSI Display Port 4 pole 3.5 mm
  • Power Consumption    กระแสไฟฟ้าที่ใช้งานลดลงจาก 750 mA เหลือ 600 mA
  • Mounting    จาก 2 รู เป็น 4 รู




raspberry pi model B  raspberry pi model B+ 
USB Ports 2 4
GPIO pins 26 40
SD card SD card Micro SD
Audio Output 2 pole 3.5 mm 4 pole 3.5 mm
Display Output  HDMI 
DSI Display Port 
Composite RCA
HDMI 
DSI Display Port 
4 pole 3.5 mm
Power Consumption 750 mA 600 mA
Mounting 2 holes 4 holes

Technical Specifications

  • CPU:  ARM1176JZF-S 700 MHz processor
  • GPU: VideoCore IV, capable of smooth BluRay quality playback, with OpenGL ES 2.0
  • RAM: 256 MB (model A) or 512 MB (model B)
  • Connectors: USB, HDMI, Composite RCA, 3.5 mm audio jack, 10/100 Ethernet, micro USB power cord
  • Storage: SD/MMC/SDIO card
GPIO Header and PINS

         
ระบบปฏิบัติการที่รองรับการใช้งาน Respberry Pi 
  • RASPBIAN
  • PIDORA
  • OPENELEC
  • RASPBMC
  • RISC OS
  • ARCH LINUX

สามารถดาวน์โหลดได้ที่ : http://www.raspberrypi.org/downloads/