ACS712 คือโมดูลที่ใช้วัดกระแสไฟฟ้า ซึ่งแต่ละ Packet จะมีความสามารถในการวัดค่ากระแสไฟฟ้าได้ไม่เท่ากัน โดยมีช่วงที่วัดได้ตั้งแต่ +-5A , +-20A และ +-30A ขึ้นอยู่กับ Packet ที่ใช้ และค่าเอาท์พุตที่ได้จะเป็นค่า Voltage ซึ่งเมื่อไม่มีกระแสไฟฟ้าไหลภายในในวงจรเลยจะได้ค่าแรงดันเอาต์พุตเท่ากับ Vcc/2 ถ้ากระแสไฟฟ้าที่วัดมีค่าเป็นบวก ค่าของแรงดันเอาต์พุตจะมากกว่า Vcc/2 และในทางตรงกันข้าม ถ้ากระแสไฟฟ้ามีค่าเป็นลบ ค่าแรงดันเอาต์พุตจะน้อยกว่า Vcc/2
โดยสูตรการคำนวนหากระแสไฟฟ้าเบื้องต้นจะได้ว่า
Current = (Voutput - Vcc/2)/Output_sensitive
วันอังคารที่ 16 มิถุนายน พ.ศ. 2558
วันอาทิตย์ที่ 7 มิถุนายน พ.ศ. 2558
[STM32F3] ทดลองอ่านค่าจาก ADC และส่งค่าผ่าน UDP Protocol
การทดลองอ่านค่าจาก ADC ของบอร์ด STM32F3Discovery และส่งค่าที่อ่านได้ไปยัง ENC28J60 Ethernet Module เพื่อส่งข้อมูลผ่านเครือข่ายโดยใช้ UDP Protocol โดยจะเป็นการจำลองการทำงานของการวัดกระแส และแรงดันของวงจรไฟฟ้า ซึ่งได้ต่อวงจรต่างๆ ดังนี้
ADC1 (Pin: PF2) ----------> Vcc +3V
ADC2 (Pin: PB2) ----------> Gnd
SPI3:
SPI3_NCC (PA15) ----------> CS (ENC28J60 Module)
SPI3_SCK (PC10) ----------> SCK (ENC28J60 Module)
SPI3_MISO (PC11) ----------> SO (ENC28J60 Module)
SPI3_MOSI (PC12) ----------> SI (ENC28J60 Module)
ADC1 (Pin: PF2) ----------> Vcc +3V
ADC2 (Pin: PB2) ----------> Gnd
SPI3:
SPI3_NCC (PA15) ----------> CS (ENC28J60 Module)
SPI3_SCK (PC10) ----------> SCK (ENC28J60 Module)
SPI3_MISO (PC11) ----------> SO (ENC28J60 Module)
SPI3_MOSI (PC12) ----------> SI (ENC28J60 Module)
วันพฤหัสบดีที่ 4 มิถุนายน พ.ศ. 2558
[STM32F3] ทดลองใช้งาน ADC
ทดลองใช้งาน ADC1 ของบอร์ด STM32F3Discovery โดยจะทำการแปลงข้อมูลจาก Analog มาเป็น Digital จำนวน 10 บิต ซึ่งมีโค้ดสำหรับการทดลองการทำงานดังนี้
[STM32F3] ทดลองใช้งาน SPI
การติดต่อสื่อสารแบบ SPI (Serial Peripheral Interface) เป็นการสื่อสารแลกเปลี่ยนข้อมูลกันระหว่างชิปและอุปกรณ์อิเล็กทรอนิกส์ มีรูปแบบการรับส่งข้อมูลแบบบิตอนุกรม-ซิงโครนัส (synchronous serial data link) ซึ่งสามารถรับและส่งข้อมูลได้สองทิศทางพร้อมกัน (full-duplex) ในการติดต่อสื่อสารแบบ SPI จะประกอบด้วยอุปกรณ์สองส่วนที่เรียกว่า Master และ Slave สำหรับอุปกรณ์ Master จะทำหน้าที่เป็นตัวเริ่มต้นการรับส่งข้อมูล และอุปกรณ์ Slave จะทำหน้าในการตอบสนองเพื่อรับข้อมูลจาก Master หรือส่งข้อมูลให้ Master
การสื่อสารแบบ SPI จะใช้สายสัญญาณสำหรับระบบบัสทั้งหมด 4 เส้น คือ
1. SCLK : Serial clock เป็นสายสัญญาณนาฬิกาสำหรับการสื่อสารแบบ SPI ซึ่ง master จะเป็นฝ่ายสร้างสัญญาณและส่งไปเป็นอินพุตของ slave
2. MOSI : master output, slave input เป็นสายสัญญาณสำหรับส่งข้อมูลที่ master ต้องการส่งให้กับ slave
3. MISO : master input, slave output เป็นสายสัญญาณสำหรับส่งข้อมูลที่ slave ต้องการส่งกับ master
4. /SS: slave select เป็นสายสัญญาณที่ master จะเป็นฝ่ายสร้างสัญญาณให้กับ slave ใช้สำหรับให้ master เลือกติดต่อกับ slave ตัวใดตัวหนึ่งซึ่งจะทำงานแบบ Active Low
สำหรับการทดลองใช้งาน SPI ของบอร์ด STM32F3Discovery จะเป็นการทดลองใช้งาน SPI1 โดยใช้งานแบบ Full Duplex Master และขนาดของข้อมูล 8 บิต เริ่มต้นส่งที่บิต MSB ก่อน และใช้งานใน SPI โหมด 1
การสื่อสารแบบ SPI จะใช้สายสัญญาณสำหรับระบบบัสทั้งหมด 4 เส้น คือ
1. SCLK : Serial clock เป็นสายสัญญาณนาฬิกาสำหรับการสื่อสารแบบ SPI ซึ่ง master จะเป็นฝ่ายสร้างสัญญาณและส่งไปเป็นอินพุตของ slave
2. MOSI : master output, slave input เป็นสายสัญญาณสำหรับส่งข้อมูลที่ master ต้องการส่งให้กับ slave
3. MISO : master input, slave output เป็นสายสัญญาณสำหรับส่งข้อมูลที่ slave ต้องการส่งกับ master
4. /SS: slave select เป็นสายสัญญาณที่ master จะเป็นฝ่ายสร้างสัญญาณให้กับ slave ใช้สำหรับให้ master เลือกติดต่อกับ slave ตัวใดตัวหนึ่งซึ่งจะทำงานแบบ Active Low
สำหรับการทดลองใช้งาน SPI ของบอร์ด STM32F3Discovery จะเป็นการทดลองใช้งาน SPI1 โดยใช้งานแบบ Full Duplex Master และขนาดของข้อมูล 8 บิต เริ่มต้นส่งที่บิต MSB ก่อน และใช้งานใน SPI โหมด 1
วันพุธที่ 3 มิถุนายน พ.ศ. 2558
ข้อมูลเบื้องต้น ENC28J60 Ethernet
ENC28J60 Ethernet module เป็น module ที่มีคุณสมบัติในการทำ Internet protocol ใช้ microship EN28J60 ในการทำงาน ซึ่งคุณสมบัติคร่าวๆของ module ชิ้นนี้มีดังนี้
- ใช้บัส SPI เป็น interface ในการเชื่อมต่อกับโมดูล
- รองรับการใช้งาน TCP/IP protocal, IPv4, UDP, TCP, DHCP, ICMP, FTP และ HTTP
- ใช้แรงดันไฟเลี้ยง 3.3v
- ความถี่ของสัญญาณ clock ที่ป้อนให้กับ Ethernet โมดูล 25MHz
ทดลองสตรีมกราฟผ่าน Plotly และการใช้งาน Socket UDP
plotly เป็นเว็บไซต์ที่ให้บริการแสดงผลกราฟต่างหลายรูปแบบ ซึ่งรองรับได้หลายภาษาทั้ง python , json , javascript เป็นต้นอีกทั้งยังมี และ Socket เป็น Library ของ Python ที่ใช้ติดต่อกับระบบเครือข่ายเพื่อใช้เชื่อมต่อระหว่างคอมพิวเตอร์กับ Board STM32
โดยวิธีการทดลองได้แยกออกเป็นสองส่วนดังนี้
ส่วนของ Plotly
โดยวิธีการทดลองได้แยกออกเป็นสองส่วนดังนี้
ส่วนของ Plotly
- ดาวโหลด Library ของ Plotly มาใช้งาน ใช้ terminal "pip install plotly"(ในเครื่องต้องติดตั้ง PIP ก่อนแล้ว) จากนั้นก็สมัครเป็นสมาชิกในเว็บไซต์ Plotly เพื่อนำ API Key, TOKEN มาใช้งาน โดยรหัส API Key, TOKEN จะอยู่ในหน้า https://plot.ly/settings/api (เข้าได้เมื่อ Login ใช้งานแล้ว)
- การเริ่มใช้งานก่อนอื่นต้อง import Plotly มาใช้งานแล้วเขียนโค้ดในส่วน Login ดังนี้โค้ดข้างล่าง เพื่อใช้สื่อสารกับ Plotly server
- จากนั้นก็เขียนโค้ดตามข้างล่างนี้ Stream_ids คือ TOKEN โดยเก็บในรูปแบบอาร์เรยสามารถเพิ่มได้เรื่อยๆ TOKEN 1อัน เอาไว้ใช้ต่อ การ Stream 1 เส้น จากนั้นก็สร้าง Stream ออปเจค โดยระหว่างสร้างสามารถกำหนดจุดที่แสดงใน Stream ได้
- ใส่เส้น ,layout(default) ลงในออปเจคภาพและสร้าง url ชื่อของ stream รายละเอียดการปรับแต่ง Layout นี้จะกล่าวอีกครั้งในบทความอื่นลิงค์
- เริ่มการทำงาน Stream และใส่ข้อมูล
- เมื่อเรารันได้แล้ว python จะเปิดแทป browser ไปที่กราฟ ตัวอย่างชื่อลิงค์ https://plot.ly/~username/221/titlename/
- สามารถที่จะนำกราฟจาก page นั้นมาใช้งานใน page ของเราได้ โดยใช้โค้ดนี้ สามารถปรับความกว้างความยาวของการแสดงรูปกราฟได้ผ่านส่วนนี้
- ตัวอย่าง
import plotly.plotly as py
# (*) Useful Python/Plotly tools
import plotly.tools as tls
# (*) Graph objects to piece together plots
from plotly.graph_objs import *
py.sign_in('ีusername', 'API_key')
stream_ids=["token1", "token2", "token3"] tls.set_credentials_file(stream_ids)
stream = Stream(
token=stream_id, # link stream id to 'token' key
maxpoints=80 # keep a max of 80 pts on screen
)
//make line
trace1 = Scatter(
x=[],
y=[],
mode='lines+markers',
stream=stream # embed stream id, 1 per trace
)
data = Data([trace1])
# Add title to layout object
layout = Layout(title="titleName")
# Make a figure object
fig = Figure(data=data, layout=layout)
#(@) Send fig to Plotly, initialize streaming plot, open new tab
unique_url = py.plot(fig, filename="name" )
s = py.Stream(stream_id)
#(@) Open the stream
s.open()
for i in range(51):
s.write(dict(x=i,y=i))
<iframe frameborder="0" height="480" scrolling="no" seamless="seamless" src="https://plot.ly/~username/221.embed?width=640&height=480" width="640">
บทความต่อในส่วนการเปลี่ยนแปลงค่าต่างๆใน Plotly ลิงค์
ส่วนของ UDP
ส่วนของ UDP
- server_test.py ได้เซ็ตค่าให้เป็น Broadcast พร้อมกับ เซ็ต timeout เมื่อไม่มีการเชื่อมต่อในทุกๆ 5 วินาที
- client_test.py ส่งข้อความไปหา server_test.py และรอรับข้อความยืนยันการรับจาก server
- จะได้ดังนี้
import socket,SocketServer
print 'Server started...'
host, port = '0.0.0.0',42000 #set host and port
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
server.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
server.bind((host,port))#start server
server.settimeout(5)
while(True):
try:
(R_data, addr) = server.recvfrom(65535)
print 'from', str(addr),"data is", R_data
server.sendto("recieved", addr)
except socket.timeout:
print "out"
import socket,SocketServer ,time sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) data = "test" host, port = "127.0.0.1",42000 #set host and port for i in range(10):
time.sleep(1)
sock.sendto(data, (host, port))
(R_data, addr) = sock.recvfrom(65535)
print R_data
สมัครสมาชิก:
ความคิดเห็น (Atom)
