Friday, December 11, 2015

การเปลี่ยน i2c address

การเปลี่ยน address ของอุปกรณ์เซนเซอร์ ที่ใช้การสื่อสารบัส i2c ที่ศึกษามา 2 วิธี
ได้แก่
1. เปลี่ยนโดยการเขียน code python
2. เปลี่ยนโดยใช้โปรแกรม explorer ของ OpenElectrons

เปลี่ยน Address โดยการเขียน code python

  วิธีการนี้เป็นวิธีการของผู้ที่ใช้นามแฝงว่า dannyoneill จาก forums ของ https://www.raspberrypi.org ในหัวข้อ i2c addressing - set device to unaddressable by RPi address! ซึ่งเป็นเพียงแนวทางในการเปลี่ยน address ในการสื่อสารบัส i2c เท่านั้น เพราะใน forums เองยังหาข้อมสรุปถึงขั้นตอนการทำให้สำเร็จอยู่ โดยในบางความเห็นก็แนะนำให้เปลี่ยนโดย ใช้ serial

  ขั้นตอนการเปลี่ยน Address โดยใช้ code python

  1. เชื่อมต่ออุปกรณ์ เข้ากับบอร์ด RPi
  2. ใช้ code ต่อไปนี้ในการเปลี่ยน address


  สำหรับการแก้ปัญหาโดยใช้ serial ตามที่มีความเห็นแนะนำมาใน forum มีขั้นตอนดังนี้
  1. เชื่อมต่ออุปกรณ์เข้ากับบอร์ด RPi      
    Pi 5V  --- device 5V
    Pi ground --- device ground
    Pi ground --- device mode
    Pi TX --- device RX
  2. Configue RPi serial ที่ baud rate 9600
    stty -F /dev/ttyAMA0 9600
  3. ใช้ echo เพื่อส่งคำสั่งไปยังอุปกรณ์สำหรับเปลี่ยน address ของอุปกรณ์ 0 ถึง 5   
    echo -ne "\x00\xA0\x00\xAA\x00\xA5\x00\x05" >/dev/ttyAMA0
  4.  การเปลี่ยน address ของอุปกรณ์ 5 ถึง 0
    echo -ne "\x05\xA0\x05\xAA\x05\xA5\x05\x00" >/dev/ttyAMA0

เปลี่ยนโดยใช้โปรแกรม explorer ของ OpenElectrons

  สำหรับการเปลี่ยน Address โดยใช้โปรแกรม explorer นั้น จะใช้ภาษา python เช่นเดียวกับวิธีข้างต้น แต่จะต้องมีการติดตั้ง module OpenElectrons_i2c ของบริษัท OpenElectrons โดยมีขั้นตอนการใช้งานดังนี้
  1. ดาวน์โหลด module OpenElectrons_i2c จาก http://pypi.akbild.ac.at/OpenElectrons_i2c/ และทำการแตกไฟล์ที่ได้มา
  2. ติดตั้ง module ตามขัั้นตอนดังต่อไปนี้
    cd OpenElectrons_i2c
    sudo  python setup.py install
  3. เชื่อมต่ออุปกรณ์เข้ากับบอร์ด RPi
  4. หา address ของอุปกรณ์
    sudo i2cdetect -y 1
  5. ดาวน์โหลดโปรแกรม explorer และทำการแตกไฟล์
  6. ใช้งานโปรแกรม explorer ตามขั้นตอนดังนี้
    cd explorer
    sudo python explore.py
    โปรแกรมจะแสดงข้อมูลของอุปกรณ์เซนเซอร์ที่ต่ออยู่กับบอร์ด RPi
  7. ดาวน์โหลดโปรแกรมเปลี่ยน Address และแตกไฟล์
  8. เปลี่ยน Address โดยใช้คำสั่ง
   ./addresschange (i2c address) (new i2c address)




   
    

Thursday, June 25, 2015

การทดสอบและสังเกตสัญญาณที่ได้จากเซนเซอร์ Hall Effect

วัตถุประสงค์

    เพื่อทดสอบและสังเกตเอาต์พุตที่ได้จากการเซนเซอร์ Hall Effect A1302 ซึ่งในส่วนนี้แรงดันเอาต์พุตสูงสุดของ Hall Effect Sensor คือ 5V และเป็น analog แต่ GPIO ของบอร์ดราสเบอร์รี่พายสามารถรับได้สูงสุดเพียง 3.3V และเป็นดิจิตอลดังนั้นจึงต้องมี วงจร comparator  มาเปรียบเทียบ หากเซนเซอร์ตรวจพบแม่เหล็กจะได้เอาต์พุตที่่ผ่าน comparator เป็น 1 คือแรงดันจากเซนเซอร์มากกว่า 2.5 แต่ถ้าไม่พบแรงดันจะเป็น 0 แล้วทำการลดแรงดันที่ได้จาก comparator ให้ไม่เกิน 3.3 V จึงแบ่งการออกแบบวงจรและการทดสอบออกเป็น 3 ส่วนคือ
   1.วงจร Hall Effect Sensor
   2. วงจร Comparator และ วงจรแบ่งแรงดัน
   3. การทดสอบวงจรโดยรวม

1. วงจร Hall Effect Sensor


การต่อวงจร Hall Effect Sensor

    การทดสอบเบื้องต้น

    1. ทดสอบป้อนแรงดัน Vcc เป็น 5V แล้วทำการวัดแรงดัน Vout ก่อนนำแม่เหล็กมาเข้าใกล้
        - วัดแรงดัน Vout ได้ 2.56 V

    2. ป้อนแรงดันเช่นเดียวกับในขั้นตอนที่ 1 แล้วทำการลดแรงดัน Vcc ทีละ 0.5 V จนเหลือ 0 V และสังเกตแรงดัน Vout ได้ผลการทดสอบดังนี้ 
แรงดัน Vcc และ Vout ของ Hall Effect Sensor

    3.นำแม่เหล็กมาวางห่างจากเซนเซอร์ 1 cm และทำการวัดแรงดัน Vout เช่นเดียวกันขั้นตอนที่ 2 ดังรูป

การวางแม่เหล็กและเซนเซอร์




      ได้ผลการวัดแรงดัน Vout ดังนี้





    สรุปการทดสอบ Hall Effect Sensor

    จากการทดสอบพบว่า เมื่อแรงดัน Vcc ลดลง แรงดัน Vout จะลดลงด้วย ซึ่งจะส่งผลกระทบต่อการใช้งานจริง เพราะในวงจร comparator มีการกำหนดแรงดันที่ใช้เปรียบเทียบไว้ ที่ 2.5 แต่ถ้าหากแรงดันจาก Hall Effect ลดลงจะทำให้ค่าที่ได้เกิดความผิดพลาด ซึ่งอาจจะแก้ไขโดยใช้วงจรรักษาระดับแรงดันไฟเลี้ยงที่ป้อนให้กลับเซนเซอร์และวงจร comparator

2.วงจร comparator และวงจรแบ่งแรงดัน


แสดงการต่อวงจร Comparator

    การทดสอบเบื้องต้น

    1. กำหนด  Vin ขาลบ(ขา 2)ของไอซี LM393 เป็น 2.5 และป้อนสัญญาณเข้าที่ Vin ขาบวก(ขา 3) จากฟังก์ชัน generator ที่ความถี่ f = 1kHz ,Amplitude = 5Vpp และ offset = 2.5 V


วงจร Comparator 


    2. สังเกตสัญญาณเอาต์พุตที่ได้เทียบกับ Vin ขาบวก โดยที่ Vin มากกว่า 2.5 V สัญญาณเอาต์พุตที่ได้จะมี logic เป็น 1 แต่ถ้าหากแรงดัน Vin น้อยกว่า 2.5 V  สัญญาณเอาต์พุตที่ออกมาจะมี logic 0

สัญญาณอินพุต และเอาต์พุต ที่ป้อนให้กับวงจร Comparator



3. การทดสอบวงจรโดยรวม

     นำวงจร Hall Effect และวงจร Comparator มาทดสอบร่วมกัน เพื่อสังเกตลักษณะของเอาต์พุตที่ได้ ว่ามีลักษณะเป็นอย่างไร ซึ่งในที่นี้จะใช้อุปกรณ์ในการขับมอร์เตอร์มาช่วยในการทดสอบ


อุปกรณ์ที่ใช้

    1. วงจร comparator และวงจร Hall Effect
    2. Brushless Control Box 36V
    3. Power Supply จำนวน 2 เครื่อง
    4. แม่เหล็ก
    5. สายไฟสำหรับต่อวงจร
    6. ออสซิลโลสโคป จำนวน 1 เครื่อง
    7. มัลติมิเตอร์
    8. มอเตอร์
    9. อุปกรณ์วัดความเร็วจักรยาน


ขั้นตอนการทดสอบ

    1. นำเอาต์พุตของวงจร Hall Effect มาต่อเข้ากับขา Vin (ขาบวก) ของวงจร Comparator และติดตั้งวงจร Hall Effect ไว้ใกล้กับส่วนที่เป็นดุมล้อของมอเตอร์และติดแม่เหล็กให้มีระดับตรงกันกับ Hall Effect Sensor และป้อนแรงดันไฟเลี้ยง 5 V ให้กับทั้งสองวงจร 




    2. ต่ออุปกรณ์ Brushless เข้ากับมอเตอร์ ชุดคันเร่งและเบรค จากนั้นป้อนแรงดัน 30 V ให้กับอุปกรณ์ Brushless
    3. ติดอุปกรณ์วัดความเร็วของจักรยานไว้ในระดับเดียวกันกับ Hall Effect Sensor เพื่อวัดความเร็วการหมุนของมอเตอร์


    4. นำออสซิลโลสโคปมาวัดสัญญาณเอาต์พุตของวงจร Hall Effect และวงจร Comparator โดยให้ช่องสัญญาณที่ CH1 เป็นสัญญาณจากวงจร Hall Effect และ ช่องสัญญาณที่ CH2 เป็นสัญญาณจากวงจร Comparator
    5. ทดสอบเร่งความเร็วของมอเตอร์ และบันทึกภาพสัญญาณที่ได้
        โดยก่อนทำการเร่งความเร็วของมอเตอร์ ได้วัดแรงดันจากคันเร่งที่เป็น analog voltage ได้ 0.867 V และความเร็วของล้อเป็น 0 km/h
        5.1 เร่งความเร็วมอเตอร์โดยป้อนแรงดันจากคันเร่ง 1.588 V และวัดความเร็วได้ 8.6 km/h ได้สัญญาณดังรูป


        สัญญาณที่ได้มานั้นมีความกว้าง 31.0 ms และมีความถี่ 1.078 Hz โดยที่ CH1(สีเหลือง) เป็นเอาต์พุตของวงจร Hall Effect วัดแรงดันสูงสุดได้ 4.88 V ส่วน CH2(สีฟ้า) เป็นเอาต์พุตของวงจร Comparator ที่ผ่านการแบ่งแรงดันมาแล้ว วัดแรงดันสูงสุดได้ 2.48 V
        
        5.2 เร่งความเร็วมอเตอร์โดยป้อนแรงดันจากคันเร่ง 1.772 V และวัดความเร็วได้ 12.7 km/h วัดความกว้างของสัญญาณได้ 21.4 ms และมีความถี่ 1.667 Hz ดังรูป

        5.3 เร่งความเร็วมอเตอร์โดยป้อนแรงดันจากคันเร่ง 1.900 V และวัดความเร็วได้ 15.3 km/h ได้สัญญาณที่มีความกว้าง 17.0 ms และมีความถี่ 2.016 Hz ดังรูป




        5.4 เร่งความเร็วมอเตอร์โดยป้อนแรงดันจากคันเร่ง 2.50 V (สูงสุด)และวัดความเร็วได้ 26.9 km/h ได้สัญญาณที่มีความกว้าง 9.80 ms และมีความถี่ 3.57 Hzดังรูป





         5.5 เร่งความเร็วมอเตอร์โดยป้อนแรงดันจากคันเร่ง 3.48 V (สูงสุด)และวัดความเร็วได้ 38.2 km/h ได้สัญญาณที่มีความกว้าง 17.0 ms และมีความถี่ 2.016 Hz ดังรูป





สรุปการทดสอบ

    จากลักษณะของสัญญาณที่ได้ พบว่าเมื่อเร่งความเร็วของมอเตอร์ให้เพิ่มขึ้น ความกว้างของสัญญาณจะแคบลงเรื่อยๆ และความกว้างของคาบเวลาจะลดลงเช่นกัน 























Friday, April 17, 2015

Multiprogramming, Multiprocessing, Multitasking and Multithreading


Multiprogramming

    ระบบมัลติโปรแกรมมิ่ง(Multiprogramming System) จะมีหนึ่งโปรแกรมหรือมากกว่า ในหน่วยความจำหลัก(main memory) ที่พร้อมจะดำเนินการ(execute) แต่จะมีเพียงหนึ่งโปรแกรมที่จะได้รับ CPU สำหรับการทำคำสั่ง ในขณะที่โปรแกรมอื่นๆ ต้องรอให้ถึงลำดับของตัวเอง โดยแนวคิดหลักของมัลติโปรแกรมมิ่ง คือลดการใช้ของ CPU time เช่น ถ้าหากในขณะนี้มีกระบวนการที่กำลังทำงานเกี่ยวกับ I/O (ไม่ต้องใช้ CPU ในการทำให้เสร็จ) แล้วระบบปฏิบัติการ (OS) มีการขัดจังหวะ(interrupt) การทำงานในกระบวนการดังกล่าว และกำหนดให้โปรแกรมที่เป็นหนึ่งในหน่วยความจำหลักเตรียมพร้อมที่จะดำเนินการ ซึ่งวิธีนี้จะไม่มีการสูญเสีย CPU time ที่ระบบะบบปฏิบัติการรอการทำงาน I/O ให้เสร็จ อีกทั้งกระบวนการที่กำลังทำงานอยู่จะยังคงดำเนินการไปจนกว่าจะมีกระบวนการหนึ่งเลิกใช้ CPU หรือยุติการใช้ I/O
    อย่างไรก็ตามเป้าหมายสูงสุดของมัลติโปรแกรมมิ่ง คือการทำให้ CPU ยุ่งมากที่สุดจนกว่าจะมีกระบวนการหนึ่งพร้อมสำหรับการดำเนินการ
    ข้อควรจำ หากในคำสั่งอย่างเช่น ระบบที่มีการทำงานอย่างถูกต้อง ระบบปฏิบัติการควรจะโหลดโปรแกรมต่างๆ ไปยังหน่วยความจำหลักที่มีการแบ่งพิื้นที่ไว้ และให้มีการป้องกันการร้องขอ เพื่อหลีกเลี่ยงการเกิดโอกาสที่กระบวนการหนึ่ง อาจเปลี่ยนแปลงกระบวนการอื่นๆได้ ส่วนปัญหาอื่นคือระบบควรมีการระบุ address ถ้ามีโปรแกรมเกิด fragmentation ในขณะที่เข้าหรือออกจากหน่วยความจำหลัก และอีกหนึ่งปัญหาที่ต้องมีการจัดการคือโปรแกรมขนาดใหญ่มักจะไม่พอดีกับหน่วยความจำ ซึ่งจะต้องแก้ปัญหาโดยการใช้ pagination และ virtual memory
     สุดท้ายนี้ ถ้ามี N กระบวนการที่พร้อมสำหรับ CPU ในกรณีที่เกิดข้อผิดพลาดอาจจะมีหนึ่งโปรแกรมที่จะรอ N-1 โปรแกรมในการทำให้สำเร็จก่อนจะเริ่มดำเนินการ



Multiprocessing

   มัลติโปรเซสซิ่ง(Multiprocessing) คือการใช้งานตั้งแต่ 2 CPU ขึ้นไปภายในระบบคอมพิวเตอร์เพียงระบบเดียว ซึ่งอาจรวมไปถึงความสามารถของระบบที่สนับสนุนมากกว่าหนึ่งโปรเซสเซอร์ (processor) และความสามารถในการจัดการงาน(task)ระหว่างโปรเซสเซอร์
   ในบางครั้งหรือบางพจนานุกรม มัลติโปรเซสซิ่ง หมายถึงกระบวนการ(process)หลายๆกระบวนการ ที่ดำเนินการอยู่ในเวลาเดียวกัน แต่ถ้าอธิบายในเชิงฮาร์ดแวร์(hardware) มัลติโปรเซสซิ่งจะสื่อถึง ระบบคอมพิวเตอร์ที่มีหน่วยประมวลผลหลายๆหน่วย โดยใช้หน่วยความจำหลักและอุปกรณ์ต่อพ่วงร่วมกัน เพื่อการดำเนินการไปพร้อมกับโปรแกรม ส่วนในระดับของระบบปฏิบัติการนั้นมัลติโปรเซสซิ่ง หมายถึง กระบวนการที่มีการดำเนินการไปพร้อมๆกัน หรือ กระบวนการแบบขนาน(parallel processing)



Multitasking

    ในระบบคอมพิวเตอร์ มัลติทาร์กกิ้ง(multitasking) คือ กระบวนการที่งาน(task)หลายๆงาน หรือเรียกกันว่าโปรเซส(process) ดำเนินการไปในระยะเวลาเดียวกัน ซึ่งงานแต่ละงานจะทำงานไปพร้อมกันแทนการทำงานแบบเรียงตามลำดับ โดยงานจะแชร์ CPU และหน่วยความจำหลัก แต่ก็ไม่ได้หมายถึงกระบวนการทำงานแบบขนาน
    กรณีที่คอมพิวเตอร์มีหน่วยประมวลผลเดียว มีเพียงหนึ่งงานที่ได้ทำงาน ณ เวลาใดๆ ซึ่งหมายความว่า CPU ถูกกระตุ้นให้ทำคำสั่งสำหรับงานดังกล่าว แต่มัลติทาร์กกิ้งสามารถแก้ปัญหาได้โดย กำหนดให้งานหนึ่งงาน ดำเนินการที่เวลาใดๆ และเมื่อมีงานที่รออยู่ จะกำหนด CPU ให้ดำเนินการจากงานหนึ่งไปยังอีกงานหนึ่ง เรียกว่า context switch ถ้าเกิด context switch บ่อยๆ พอ จะทำให้กระบวนการทำงานแบบขนานเสมือนเกิดขึ้นสำเร็จ
    ส่วนในกรณีที่มีมัลติโปรเซสเซอร์(multiprocessor) หรือ มัลติคอร์(multicore) จะช่วยให้งานมากกว่าหนึ่งงานดำเนินการไปได้ในครั้งเดียว(หนึ่งงาน ต่อหนึ่ง CPU หรือ core)


Multithreading

   มัลติเธรดดิง คือ รูปแบบการดำเนินการที่ยอมให้หนึ่งกระบวนการหรือโปรแกรมมี code segment (threads) มากกว่าหนึ่งดำเนินการไปพร้อมกัน โดยการสลับ(context) กันของงานภายในโปรแกรมดังกล่าว ซึ่งจะทำงานได้ดีในกรณีที่ใช้ CPU ที่มีมากกว่า 2 core ขึ้นไป ด้วยการแบ่งงานให้กับแต่ละ core ของ CPU ไปดำเนินการ แต่สำหรับกรณีที่ CPU มีเพียง 1 core การทำงานของโปรแกรมจะทำงานแบบเรียงตามลำดับก่อน-หลัง ทำให้ประสิทธิภาพการทำงานยังคงเท่าเดิม

ที่มา:

Multiprogramming, Multiprocessing, Multitasking, and Multithreading 

Multiprocessing 

Computer multitasking    

มัลติเธรดดิง (Multithreading) 


Saturday, August 30, 2014

Work Process-การทดลองใช้ Linear Hall Effect Sensor-KY024

ระบบปฏิบัติการที่ใช้


  • Ubuntu 12.10

อุปกรณ์ฮาร์ดแวร์มีดังนี้

  • บอร์ด Raspberry Pi 512 MB model B
  • SD card ขนาด 8+ GB
  • Wireless USB Adapter
  • micro USB Cable  + 5V. AC/DC Adapter
  • Linear Hall Effect Sensor-KY024
  • magnetic 



ขั้นตอนการดำเนินงาน

1.) เตรียมบอร์ด raspberry pi ให้พร้อมสำหรับการใช้งาน ผ่าน SSH โดยการเชื่อมต่อด้วย Wi-Fi

2.) เชื่อมต่อ pin ของ Linear Hall Effect Sensor-KY024 เข้ากับบอร์ด raspberry pi โดยต่อเข้ากับ GPIO Pin ดังนี้
     VIN     ต่อเข้ากับ    5V  Voltage pin
     GND     ต่อเข้ากับ    ground
     D0      ต่อเข้ากับ    GPIO 24

3.) ทดสอบการใช้งานด้วยการนำเซนเซอร์เข้าใกล้กับแม่เหล็ก

       - ก่อนนำเซนเซอร์เข้าใกล้กับแม่เหล็กจะเห็นได้ว่า หลอด LED ติดแค่ดวงเดียว


      - เมื่อนำเซนเซอร์เข้าใกล้กับแม่เหล็ก หลอด LED จะติดทั้ง 2 ดวง



4.) ทดสอบในส่วนของ Analog pin โดยการนำ Oscilloscope เข้ามาวัดแรงดันเอาต์พุตของเซนเซอร์ โดยแบ่งเป็นสองช่วงคือ ช่วงที่เซนเซอร์อยู่ห่างจากแม่เหล็ก LED ดับ 1 ดวง และช่วงที่เซนเซอร์อยู่ติดกับแม่เหล็ก LED ติดสองดวง

     - ช่วงแรก คือ ช่วงที่เซนเซอร์อยู่ห่างจากแม่เหล็ก วัดค่าแรงดันได้ที่ 2.20 V โดยเอาต์พุตของแรงดันที่ได้มีลักษณะเป็น linear




เซนเซอร์อยู่ห่างกับแม่เหล็ก วัดแรงดันได้ 2.20 V

- ช่วงที่สอง คือ ช่วงที่นำเซนเซอร์เข้ามาใกล้(ติด) กับแม่เหล็ก จะเห็นได้ว่าแรงดันเอาต์พุตที่ได้มีค่าลดลงจาก 2.20 V เป็น 1.64 V และยังมีลักษณะเป็น linear 



     
เซนเซอร์อยู่ใกล้(ติด) กับแม่เหล็ก วัดแรงดันได้ 1.64 V

     - จากการทดลองวัดแรงดันเอาต์พุตพบว่าค่าแรงดันที่ได้ขึ้นอยู่กับระยะห่างระหว่างเซนเซอร์กับแม่เหล็ก เมื่อแม่เหล็กเข้าใกล้กับเซนเซอร์แรงดันที่ได้จะต่ำลง แต่เมื่อแม่เหล็กออกห่างจากเซนเซอร์แรงดันที่ได้จะเพิ่มขึ้น

5.) ทดสอบการทำงานของเซนเซอร์โดยการเขียนโปรแกรมให้แสดงสถานะเมื่อเข้าใกล้แม่เหล็ก โดยเมื่อมีแม่เหล็กเข้ามาใกล้กับเซนเซอร์ จะได้เอาต์พุตเป็น Switch state active, rising edge detected - LED ON
แต่เมื่อ นำแม่เหล็กออกห่างจากเซนเซอร์จะได้เอาต์พุตเป็น switch state off,falling edge detected - LED OFF





ที่มา :










Work Process-การทดลองใช้ Barometric Pressure Sensor

ระบบปฏิบัติการที่ใช้

  • Ubuntu 12.10 

 

อุปกรณ์ฮาร์ดแวร์มีดังนี้

  • บอร์ด Raspberry Pi 512 MB model B
  • SD card ขนาด 8+ GB
  • Wireless USB Adapter
  • micro USB Cable  + 5V. AC/DC Adapter
  • Barometric Pressure Sensor(BMP180)


ขั้นตอนการดำเนินงาน

1.) เตรียมบอร์ด Raspberry Pi ให้พร้อมสำหรับการใช้งานผ่าน Wi-Fi และ log in เข้าสู่ระบบด้วยโปรแกรม Putty

2.) เชื่อมต่อ pin ของ  Barometric Pressure Sensor-BMP180 เข้ากับบอร์ด Raspberry Pi  โดยต่อเข้ากับ GPIO Pin ดังนี้
     VIN   ต่อเข้ากับ 3.3V Voltage pin
     GND   ต่อเข้ากับ ground
     SCL   ต่อเข้ากับ I2C Clock
     SDA   ต่อเข้ากับ I2C Data
   
อ้างอิ่ง ref: http://2014.makerland.org/event/tutorials/raspberrypi/



3.) ตั้งค่าการใช้งาน I2C บนบอร์ด Raspberry Pi (เนื่องจาก Barometric Pressure Sensor-BMP180 มีการสื่อสารด้วย I2C bus) โดยมีขั้นตอนดังนี้
  • ให้แก้ไขไฟล์ /etc/modules โดยคำสั่งต่อไปนี้
     sudo nano /etc/modules

  • เพิ่มบรรทัดดังต่อไปนี้ลงไปในส่วนล่างสุดของไฟล์       
     i2c-bcm2835
     i2c-dev
    
  • ติดตั้งเครื่องมือ i2c บน raspberry pi
     sudo apt-get install python-smbus
     sudo apt-get install i2c-tools

  • เปิดไฟล์ /etc/modprobe.d/raspi-blacklist.conf ด้วยคำสั่ง

     sudo nano /etc/modprobe.d/raspi-blacklist.conf

  • แก้ไขบรรทัดดังต่อไปนี้ด้วยการเพิ่ม # ไปข้างหน้า เพื่อเอา blacklist ออก  

     blacklist spi-bcm2708
     blacklist i2c-bcm2708

  • ทำการ reboot Raspberry Pi

     sudo reboot

  • log in เข้าไปยัง Raspberry pi และใช้คำสั่งดังต่อไปนี้เพื่อตรวจสอบ i2c address

     sudo i2cdetect -y 1



     จะเห็นได้ว่า i2c address ที่ปรากฏขึ้น คือ 77 เมื่อนำไปตรวจสอบกับ datasheet ของ BMP180 แล้วจะพบว่า i2c address นั้นตรงกัน



4.) ทดสอบการทำงานของ BMP180 โดยใช้ Adafruit BMP085 Python Library(สามารถใช้ได้กับ BMP180) ซึ่งสามารถ Download ได้จาก https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code
หรือ Download ด้วยคำสั่ง
     git clone https://github.con/adafruit/Adafruit-Raspberry-Pi-Python-Code.git

  • เข้าไปภายใน directory Adafruit-Raspberry-Pi-Python-Code  

    cd Adafruit-Raspberry-Pi-Python-Code


  • เนื่องจากบอร์ด Raspberry Pi ที่ใช้ เป็น version 2 (512 MB) จึงต้องแก้ไขไฟล์ Adafruit_I2C.py จาก

     def __int__(self,address,bus=smbus.SMBus(0),debug = Faulse):
   เป็น

     def __int__(self,address,bus=smbus.SMBus(1),debug = Faulse):
     

  • ทดสอบการทำงาน ด้วยคำสั่ง

     sudo python example/simple.py 


ผลการทำงาน


ทดสอบการนำค่าจาก Barometric Pressure Sensor(BMP180) มา Plot Graph

ผลการทำงาน



ปัญหาที่เกิด

    - ในการนำค่าที่ได้จาก barometric pressure sensor มา plot graph มีการแสดงเอาต์พุตหรือจุดที่พล็อต ค่อนข้างช้ามาก
    - เกิดปัญหา raspberry pi มีอุณหภูมิที่ค่อนข้างสูงกว่าปกติ


ที่มา :

https://learn.adafruit.com/using-the-bmp085-with-raspberry-pi/using-the-adafruit-bmp085-python-library

https://learn.adafruit.com/adafruits-raspberry-pi-lesson-4-gpio-setup/configuring-i2c

http://elinux.org/RPi_Low-level_peripherals

Saturday, August 16, 2014

แหล่งข้อมูลและความรู้ที่เกี่ยวข้องในการทำ

Raspberry Pi Hall Effect switchแหล่งข้อมูลและความรู้ที่เกี่ยวข้องในการทำ

Android กับการใช้งาน AsyncTask เบื้องต้น :
http://devahoy.com/2014/05/android-asynctask-tutorial/

Link : การใช้งาน GPS Module กับ Raspberry Pi
Link : Low-pass filter Wikipedia
Link : SensorEvent : TYPE.ACCELEROMETER

บทความ

RestFul vs SOAP อันไหนดี
- Google App Engine
เครื่องวัดสนามแม่เหล็ก
Hall Effect Sensor( Magnetic Sensor) คืออะไร

Raspberry Pi

- Model B IO PIN
GPIO Electrical Specifications

Sensor

   
 Hall Effect Sensor  

   - Tutorial: How to use the hall effect sensor with Arduino
   - Using Hall Effect Switches and Sensors 
   - Raspberry Pi Hall Effect switch
   - Low Cost Hall Effect Sensor
   - A Strange Attraction. Various Hall Effect Sensors 
   - How do I measure the RPM of a wheel?
   - Reading Fan RPM
   - Hall effect and GPIO
   - Raspberry Pi Hall Effect switch

Other Devices 

- Interfacing an SPI ADC (MCP3008) chip to the Raspberry Pi using C++ (spidev)

Cloud Service

Google Cloud SQL
- Google App Engine
- Google Cloud Storage
Rackspace
- Cloud data
- xively
- APEX Fusion
- Cloud Platform


DIY

- Home automation with Remoht.us
- RPi Android HTML5 Realtime Servo Control
- Start Using HTML5 WebSockets Today
- Google Cloud Platforrm
- Raspberry Pi Temperature Logger With Xively
- *First test with EVRYTHNG cloud, Raspberry PI and Python
Live Web Bicycle Dashboard using ControlMyPi
***********Live Web Bicycle Dashboard - the code
Raspberry Pi + TMP36 Temperature Sensor
Movable Parts
Rest of You: Bike Forces
ReadingRPM

Books

- Beginning Sensor Networks with Arduino and Raspberry Pi




Sunday, June 29, 2014

การตั้งค่า Internert sharing บน Ubuntu และการตั้งค่า Wi-Fi บน Raspberry pi

การตั้งค่า Internet sharing

     เนื่องจากการเชื่อมต่อ RPi  ผ่าน SSH โดยการต่อสาย LAN เข้ากับ router อาจไม่สะดวกในการใช้งาน จึงใช้อีกวิธีในการเชื่อมต่อ RPi แต่ยังคงใช้งานผ่าน PuTTY ซึ่งวิธีการใช้งานโดย Internet sharing มีข้อดีคือ อาจช่วยประหยัดพื้นที่ และลดการใช้อุปกรณ์ลงได้



อุปกรณ์ที่ใช้

1. บอร์ด Raspberry Pi Model B
2. SD card ที่ติดตั้ง Raspbian แล้ว
3. Ethernet connection LAN(RJ-45)
4. Micro USB

ขั้นตอนการตั้งค่า Internet sharing 

1. ต่ออุปกรณ์บอร์ด RPi รวมทั้งสาย LAN เข้ากับคอมพิวเตอร์
2. ไปยัง network และเลือก edit connections
3. เลือก wire connection และ edit
4. ไปยัง IPv4 setting เลือก method เป็น Shared to other computers กด save
5. เปิด terminal และ run command line ดังต่อไปนี้เพื่อดูหมายเลข IP ใหม่ ของ บอร์ด RPi
    cat /var/lib/misc/dnsmasq.leases





การตั้งค่า Wi-Fi บน Raspberry Pi


อุปกรณ์ที่ใช้

1. บอร์ด Raspberry Pi
2. SD card ที่ติดตั้ง Raspbian (Wheezy) แล้ว
3. Ethernet connection LAN(RJ-45)
4. Micro USB
5. wireless usb

ขั้นตอนการตั้งค่า Wi-Fi

1. log in เข้า RPi ผ่าน putty โดยการเชื่อมต่อด้วยสาย LAN
2. ต่อ Wi-Fi USB เข้ากับบอร์ด Raspberry Pi และตรวจสอบการเชื่อมต่อด้วยคำสั่ง
    ifconfig

    สังเกต wlan0 หมายถึง wireless adapter
3. list รายชื่อ USB device ที่ได้ติดตั้งเข้ามาใน บอร์ด RPi ด้วยคำสั่ง
    sudo lsusb


4. ติดตั้ง wireless-tools 
    sudo apt-get install wpasupplicant wireless-tools
5. อัพเดทไฟล์ /etc/network/interfaces
    sudo nano /etc/network/interfaces
    - ถ้าเป็นการเชื่อมต่อระบบความปลอดภัยแบบ WPA ให้อัพเดทดังนี้

      auto lo
      
      iface lo inet loopback
      iface eth0 inet dhcp

      auto wlan0
      allow-hotplug wlan0
      iface wlan0 inet dhcp
      wpa-ssid "your network"
      wpa-psk "password-here"

   - ถ้าเป็นการเชื่อมต่อระบบความปลอดภัยแบบ WEP ให้อัพเดทดังนี้

      auto lo
      
      iface lo inet loopback
      iface eth0 inet dhcp

      auto wlan0
      allow-hotplug wlan0
      iface wlan0 inet dhcp
      wireless-essid your network
      wireless-key your key

6. รีบูทบอร์ด Raspberry pi
      sudo reboot

7.login เข้า Raspberry pi และตรวจสอบการเชื่อมต่อกับ Wi-Fi สังเกตหมายเลข IP สำหรับใช้ใน  การเชื่อมต่อแบบ SSH โดยใช้ Wi-Fi
   หรือ
เปิด terminal และสแกนหา หมายเลข IP ด้วยคำสั่ง
      sudo nmap -sP 192.168.1.0/24  # computer จะต้องเชื่อมต่อ network เดียวกับบอร์ด RPi

นำหมายเลข IP ที่ได้เปิดใช้งานด้วย PuTTy

ที่มา :

How to set up Wi-Fi on a Raspberry Pi 

WiFi (with WEP security) on Raspberry Pi