วันศุกร์ที่ 28 กุมภาพันธ์ พ.ศ. 2557

mirror ในไทย

คุณ @trestest ได้ทำ mirror สำหรับ raspbian เรียบร้อยแล้ว ในไทย 2 ที่

ได้แก่
มหาวิยาลัยเกษตรศาสตร์ mirror1.ku.ac.th/raspbian
มหาวิยาลัยสงขลานครินทร์ mirrors.psu.ac.th/raspbian

ทำได้โดย
nano /etc/apt/source.list

แล้วแก้ไขบรรทัดต่างๆให้อยู่ใน format ดังนี้


deb http://MIRROR.LOCATION/raspbian wheezy main blah blah blah

เสร็จแล้ว apt-get update ครับ

วันอาทิตย์ที่ 16 กุมภาพันธ์ พ.ศ. 2557

วงจร input/output ที่ใช้ได้กับ gpio ของ rpi

สำหรับวงจรง่ายๆที่สามารถใช้ร่วมกับบอร์ด rpi ได้ สามารถดูได้ที่ http://elinux.org/RPi_GPIO_Interface_Circuits โดยได้อธิบายไว้ดังนี้


วงจรสำหรับรับค่า input (Input circuit)

วงจรปุ่มกด switch input (push button)
วงจร switch ง่ายๆ ที่เอาไว้ใช้ต่อกับ gpio ของ rpi
เมื่อกด switch (วงจรปิด) ค่าที่ rpi ได้รับก็คือ "0"
และเมื่อปล่อย switch (วงจรเปิด) ค่าที่ rpi ได้รับก็คือ "1"
จากรูป R1 เราเรียกว่า pull-up resistor ซึ่งมีไว้ "ดึง" gpio ให้มีค่าเป็น 3.3 โวลต์ในขณะที่ปล่อย switch

วงจร voltage divider
ใช้สำหรับรับสัญญาณ digital 5V ของอุปกรณ์หนึ่งๆ ต่อเข้ากับ gpio port ของบอร์ด rpi ซึ่งต้องการ สัญญาณเพียง 3.3 โวลต์ ส่วน 0 โวลต์ในรูป ให้ต่อเข้ากับ ground จุดใดจุดหนึ่งของบอร์ด rpi และต่อเข้ากับ ground ของอุปกรณ์ที่ปล่อยสัญญาณเข้ามาที่บอร์ด rpi
และสิ่งที่สำคัญที่สุด สำหรับวงจรนี้ก็คือ ค่า resistor R1 และ R2 โดยที่ R1 จะต้องมีค่ามากกว่าครึ่งหนึ่งของ R2 เล็กน้อย ซึ่งจะทำให้สัญญาณ 5 โวลต์ลดลงเหลือ 3.3 โวลต์ ซึ่งผู้อ่านสามารถใช้ค่าที่แสดงในรูปได้ทันที เหมาะสำหรับการใช้งานทุกกรณี


วงจร output (output circuit)
gpio port ของบอร์ด rpi ได้ต่อโดยตรงกับ ic BCM2835 ซึ่งเป็น ic ที่ทำงานที่ 3.3 โวลต์เท่านั้น ทำให้มีพลังในการจ่ายไฟค่อนข้างน้อย และที่สำคัญ ถ้าหากใช้ไม่ถูกวิธี ก็จะสร้างความเสียหายให้ port ได้ (ไม่สามารถเปลี่ยน หรือ ซ่อมแซมได้)
ดังนั้น ถ้าหากผู้อ่านจะต่อใช้งานที่นอกเหนือจาก LED ท่านควรจะใช้วงจรเพิ่มเติมเพื่อเพิ่ม โวลต์/กระแส

ใช้ npn transistor
วงจรถูกๆ ที่ใช้ NPN transistor เพื่อ เปิด/ปิด อุปกรณ์ที่มาต่อ (Load)
เมื่อ gpio มีค่าเป็น "1" อุปกรณ์ที่มาต่อ ก็จะทำงาน
เมื่อ gpio มีค่าเป็น "0" อุปกรณ์ที่ต่อ ก็จะปิด
จากรูปภาพ ใช้ transistor เบอร์ 2N3904 ซึ่งสามารถทนแรงดันได้ถึง 40โวลต์ (Vce)/ 100mA
 สำหรับอุปกรณ์ที่ต้องการใช้กระแสที่มากกว่า ก็ต้องใช้ transistor ที่ให้โวลต์(Vce)/กระแส ที่มากกว่านี้ โดยสังเกตได้ที่ค่า hfe ใน datasheet
note : ในวงจรที่ต้องการใช้กำลังไฟมากๆ ควรใช้ heat sink เพื่อระบายความร้อนด้วย

ใช้ FET
Field-effect transistor (FET) ก็เป็นอีกทางเลือกหนึ่งนอกเหนือจาก bipolar transistor
จากรูป ถ้า gpio มีค่าเป็น "1"  อุปกรณ์ทำงาน
แต่ถ้า gpio มีค่าเป็น "0" อุปกรณ์ไม่ทำงาน
การเลือกใช้ R1 100K เนื่องจากต้องการความปลอดภัย ถ้าหากเราเผลอกำหนดค่า gpio เป็น input
transistor 2N7000 สามารถใช้ได้กับแหล่งจ่ายไฟ 60โวลต์/100mA
ถ้า หากต้องการใช้กับ Load ที่ใช้พลังงานมากกว่านี้ วิธีดู datasheet จะไม่เหมือนกับ transistor ให้ดูที่ "threshold" voltage. ที่เริ่มต้นที่ 3โวลต์

ใช้ Relay

วงจร Level shifter
MOSFET level shifter
วงจรนี้นิยมใช้กับ I2C

วงจร simple diode circuit
 เป็นวงจรที่ง่ายและใช้ได้ผลเสมอ ไว้ใช้ต่อกับ serial port 5Volt ATMega328 processor


IC SN7407
เป็น IC oprn-collector ซึ่งสามารถนำไปใช้ได้หลากหลาย


ถ้า gpio มีค่าเป็น "0"output ก็จะเป็น "0" ด้วย

แต่ถ้า gpio มีค่าเป็น "1"IC จะไม่ทำงาน ส่งผลให้ R1 ดึงให้วงจรที่ต่อพ่วงอยู่มีค่าเป็น high.
ซึ่งวงจรนี้สามารถรองรับได้ถึง 30โวลต์/30mA

สรุป
วงจร input มี 2 วงจร ได้แก่ push button และ voltage divider
วงจร output มีให้เลือกหลากหลาย ได้แก่ npn transistor, FET, Relay, Level shifter มี 3 วงจร
1. Mosfet level shifter
2. simple diode
3. IC 7407

วันเสาร์ที่ 15 กุมภาพันธ์ พ.ศ. 2557

gpio raspberry pi python

สวัสดีครับ ชาว raspberry pi

วันนี้เป็นวันมาฆบูชา และ วันวาเลนไทน์ ในวันเดียวกัน ก็รู้สึกแปลกๆนะครับ อย่างไรก็แล้วแต่ คนที่เข้าวัดทำบุญ ก็ขอให้บุญนั้นส่งผลในทางที่ดีแก่ท่านต่อไปครับ

ตอนที่แล้ว แนะนำเรื่อง gpio ไป ดังนั้นเนื้อหาในตอนนี้ก็คงต้องเป็นเรื่อง การควบคุม gpio
การควบคุม gpio ทำได้หลายรูปแบบ ไม่ว่าจะเป็น shell script, c programming, python เป็นต้น

แต่วิธีที่ดูเหมือนว่าจะสะดวกที่สุดในการพัฒนาต่อยอดอุปกรณ์ ในความเห็นของผมเอง น่าจะเป็นการใช้ภาษา python
เรามาเริ่มกันเลยดีกว่า ว่าควบคุม gpio ผ่าน python กันยังไง

ก่อนอื่น เราต้องต่อวงจร LED รอไว้ก่อน ดังภาพ



เราสามารถเขียนออกมาเป็นวงจรอิเล็คทรอนิกส์ได้ดังนี้


โดยเราจะกำหนดให้ gpio17(ตอนที่แล้ว) เป็นขา output (เส้นสีเหลือง) ไว้ควบคุม LED

กลับมาที่เครื่อง linux pc ของเรา เปิด terminal ขึ้นมา ให้ ssh root@192.168.0.7 (ip address ของ rpi)
เริ่มต้นที่ สร้าง folder gpio ที่ /home/pi/ ด้วยคำสั่ง
cd /home/pi (enter)
mkdir gpio
แล้วเข้าไปใน folder gpio ด้วยคำสั่ง cd gpio
จากนั้นที่เครื่อง pc ของเรา ให้ไป download control module RPi.GPIO จาก web https://pypi.python.org/pypi/RPi.GPIO (ปัจจุบันเวอร์ชัน 0.5.4)


เมื่อได้ file มาแล้ว ให้เรา sftp เพื่อย้ายไฟล์ไปที่บอร์ด rpi
ในขั้นตอนนี้ให้เราเปิด terminal ขึ้นมาใหม่อีกหน้านึง แล้วย้ายตัวเองไปที่ directory ที่ download มา
cd /home/pi1/Downloads แล้วพิมพ์
sftp root@192.168.0.7
จากนั้นทำการวางไฟล์ ด้วยคำสั่ง put ไปไว้ที่ /home/pi/gpio
put RPi.GPIO-0.5.4.tar.gz /home/pi/gpio/RPi.GPIO-0.5.4.tar.gz
file ก็จะมาอยู่ใน folder gpio ที่เราสร้างไว้ก่อนหน้านี้
ให้เราแตกไฟล์ ด้วยคำสั่ง tar -zxvf RPi.GPIO-0.5.4.tar.gz

ในตอนแรกผมได้พยายามลองลง python ตามวิธีที่อยู่ใน install.txt ที่ติดมากับ RPi.GPIO-0.5.4.tar.gz
แต่ไม่สำเร็จ
พอสำเร็จแล้ว ก็สรุปได้ดังนี้
ให้เราพิมพ์ตามนี้
sudo apt-get update (enter แล้วรอจนเสร็จ จะนานหน่อย) ทำบรรทัดนี้เพื่อ update system
sudo apt-get dist-upgrade (enter แล้วรอจนเสร็จ จะนานหน่อย) ทำบรรทัดนี้เพื่อ upgrade system
sudo apt-get install python-dev python3-dev (enter) เพื่อ install python-dev
sudo apt-get install python-rpi.gpio python3-rpi.gpio เพื่อลง library gpio
sudo python setup.py install (enter) เพื่อ setup python
reboot 1 ครั้ง

จากนั้นเราก็สร้างโปรแกรมไฟล์ของเรา ให้ตั้งชื่อว่า gpio.py ด้วยคำสั่ง nano gpio.py
แล้วให้พิมพ์ตามนี้


** ให้แก้ไขตรง GPIO.setmode(GPIO.BOARD) เป็น GPIO.setmode(GPIO.BCM)
เสร็จแล้ว กด ctrl+x เพิ่อออก กด y กด enter เพื่อ save
จากนั้นให้เปลี่ยนโหมดของ gpio.py ให้สามารถ execute ได้ โดยพิมพ์ chmod +x gpio.py

ใน code จะเห็นได้ว่าใช้ gpio11 ทั้งๆที่ในตอนต้นบอกว่าใช้ gpio17
สาเหตุเนื่องมาจากไลบราลี่ของ RPi.gpio นั้นได้ map pin ใหม่ ซึ่งแสดงให้เห็นได้ดังต่อไปนี้


จากภาพ ที่เห็นเป็นสีๆ นั่นคือ original ส่วนที่อยู่ตรงกลาง(สีขาว) เป็น pin ที่ map ใหม่
GPIO17 ตรงกับ 11เราจึงต้องเขียน code เป็น 11

เรามาทดสอบโปรแกรมของเราด้วยการพิมพ์ ./gpio.py ถ้าไม่มีอะไรผิดพลาด จะเห็น LED กระพริบตลอดเวลา
ถ้าต้องการหยุดโปรแกรม ให้กด ctrl+c

ถึงตอนนี้เพื่อนๆก็จะสามารถควบคุม gpio โดยใช้ python ได้แล้ว

ตอนต่อไปเราจะมาขับ LED แผงใหญ่กันครับ

ที่มา
http://www.raspberrypi.org/archives/1417
http://raspberry-pi-th.blogspot.com/2012/10/rpigpio-python-control-gpo-of-raspberry.html

นอกเหนือจากนี้ ยังมีวิธีอื่นๆอีก ลองศึกษาเพิ่มเติมกันดูนะครับ
เพิ่มเติม
https://projects.drogon.net/raspberry-pi/gpio-examples/tux-crossing/gpio-examples-1-a-single-led/


วันอังคารที่ 11 กุมภาพันธ์ พ.ศ. 2557

รู้จัก GPIO raspberry pi


สวัสดีครับ ชาว rpi

วันนี้จะแนะนำเรื่อง gpio ของ rpi กัน
gpio ย่อมาจาก general purpose input/output เรียกเป็นภาษาไทยง่ายๆว่า พอร์ตเอนกประสงค์
คือเราสามารถควบคุม คอนโทรลให้เป็น "1" หรือ "0" ได้ ตามใจชอบ โดยที่จะสามารถควบคุมได้แต่ละ pin เหมือนไมโครคอนโทรลเลอร์
สำหรับคนที่เล่นไมโครคอนโทรลเลอร์อยู่แล้ว จะต้องสนใจเรื่องนี้แน่นอน เนื่องจากสามารถนำไปต่อยอดได้หลายอย่าง เช่น นำ rpi ไปต่อกับจอ LCD หรือนำไปใช้เป็นตัวเปิด/ปิด สัญญาณต่างๆ

rpi มี gpio pin ทั้งหมด 26 pin(2x13) โดยใน pin เหล่านี้จะมีฟังก์ชันต่างๆ ติดมาด้วยได้แก่ SPI, I2C, serial UART, 3V3 และ 5V power.

ในการเล่นกับ gpio มีสิ่งที่ต้องพึงระมัดระวังให้มากเป็นพิเศษก็คือเรื่อง "การต่อสายสัญญาณ" เนื่องจาก gpio เหล่านี้ ใช้ไฟ 3.3 โวลต์ และทนแรงดันไฟฟ้าได้แค่ 3.3V เท่านั้น ดังนั้นถ้าหากใช้ไฟ 5 โวลต์ มาต่อเข้ากับ port นี้ก็จะพังทันที ไม่สามารถใช้งานได้อีกต่อไป และไม่สามารถเปลี่ยน หรือ ซ่อมแซมได้

เราสามารถกำหนด gpio เหล่านี้ให้เป็น input หรือ output ก็ได้ กำหนดในแต่ละบิตได้เลย ซึ่งถือว่าเป็นจุดเด่นของเจ้า rpi ที่ทำให้เป็นที่นิยมเล่นกันอย่างแพร่หลาย
และยังมีส่วนต่อขยาย (gertboard) ที่ติดต่อกับ cpu ได้โดยตรง ทำให้การเขียนโปรแกรมสะดวกสบายยิ่งขึ้น

เรามาดู pin กันดีกว่า ว่ามีขาอะไรกันบ้าง


นอกเหนือจากนี้ ยังมี gpio อื่นให้ใช้กันอีก คือ p2, p3 และ p5


ก็รู้จักกันแค่เล็กน้อยกันก่อนนะครับ ถ้าอยากรู้มากกว่านี้ ก็หาอ่านกันได้ ที่นี่ ครับ



ที่มา
http://elinux.org/RPi_Low-level_peripherals