พึ่งเคยใช้งานครั้งแรกโปรดอ่านที่นี่! howtouse!
x
  • Register
หางานด้าน IT อยู่เหรอ?

ถามบอร์ด arduino uno ค่ะ

0 votes

ตอนนี้หนูทำรถบังคับที่ควบคุมผ่านจอยสติ๊ก และรับส่งข้อมูลผ่านทาง Xbee ค่ะ

หนูมีบอร์ด arduino uno 2 บอร์ด คือ ฝั่งจอยและฝั่งรถ

 

ปัญหาของหนูคือ หนูอยากให้รถวิ่งด้วยความเร็ว 2 ระดับ

หนูเลยคิดว่า ถ้าค่า V ที่ออกจากพอร์ตมีค่าน้อยๆ จะทำให้รถวิ่งช้าลงค่ะ

หนูเลยอยากทราบว่า ค่าที่ส่งออกจากพอร์ตของบอร์ด arduino นั้น เป็นค่า low กับ high เท่านั้นหรอคะ

(ใช้มัลติมิเตอร์วัดจากพอร์ตได้ประมาณ 0 กับ 4.8V กว่าๆ )

แล้วถ้าหนูต้องการให้ค่าที่ส่งออกจากพอร์ต มีค่าประมาณ 2V หนูสามารถทำได้ไหมคะ

ถ้าทำได้ หนูควรจะเขียนโค้ดอย่างไรคะ

 

ขอรบกวนพี่ๆ ทุกท่านที่ทราบด้วยนะคะ

หนูมือใหม่มากๆ  เพิ่งเริ่มจะศึกษาค่ะ

ขอบคุณมากๆ ค่ะ

ถามเมื่อ Mar 1, 2014 in Arduino โดย natty (106 คะแนน)
   

1 Answer

+1 vote
 
Best answer

ใช้ฟังก์ชัน analogWrite(ขาสัญญาณ pwm, ค่าสัญญาณpwm);

-ขาสัญญาณ pwm ของ uno ได้แก่ 3,5,6,9,10,11  (ที่เขียน ~ นำหน้า)
-ค่าสัญญาณ pwm สามารถกำหนดค่าได้ตั้งแต่ 0-255 : ลอจิก HIGH ของ uno คือ 5v ถ้ากำหนดค่าสัญญาณ pwm ที่ 255 จะทำให้วัดระดับแรงดันได้ประมาณ 5v ถ้ากำหนดค่าน้อยกว่านั้นก็จะวัดได้ค่าแรงดันที่ต่ำลง..

อ่านเพิ่ม http://arduino.cc/en/Reference/AnalogWrite#.UxHfBHntkjA
อ่านภาษาอังกฤษไม่ออกไม่เป็นไร ดูตัวอย่างเอาครับ

ตัวอย่างคำนวน

(2/5)*255 = 102  เมื่อ 2 คือ ค่า 2v ตามที่ถาม ถ้าอยากได้ค่าอื่นก็ใส่ลงไปแทน 2
ส่วน 102 คือค่าที่จะใส่เข้าไปในฟังก์ชัน ตามตัวอย่างนี้

analogWrite(3,102);  //คำสั่งนี้จะทำให้ขา ดิจิตอลที่ 3 มีค่าแรงดันเท่ากับ 2v

ถ้างงตามไปถามใน facebook นะครับ  #นักประดิษฐ์สแตนด์อะโลน

ตอบเมื่อ Mar 1, 2014 โดย ลูกอีสาน บ้านไผ่ (144 คะแนน)
selected Mar 2, 2014 โดย natty
#include <Servo.h>
#include <SoftwareSerial.h>

const int motorf = 9;
const int motorb = 10;

char mydata; //รับค่าจาก จอยสติ๊ก

void setup() {
  Serial.begin(9600);
  pinMode(motorf ,OUTPUT);
  pinMode(motorb ,OUTPUT);
  }
  
void loop(){
  if(Serial.available()>0){
    mydata = Serial.read();
    
    if(mydata == 'a'){
      analogWrite(motorf, 255);
      analogWrite(motorb, 0);}
      
     if(mydata == 'b){
       analogWrite(motorf, 130);
       analogWrite(motorb, 0);}  
    }}
     
ด้านบนเป็นโค้ดที่หนูเขียนค่ะ
แต่ค่าที่ออกมา มีค่าความเร็วการหมุนของล้อไม่ต่างกันเลยค่ะ
(วัดจากมัลติมิเตอร์ ได้ค่า V เท่ากันเลย)
หนูเขียนโค้ดผิดตรงไหน หรือควรจะแก้ตรงไหนดีคะ
ขอบคุณค่ะ
แบบนี้พี่ก็ไม่รู้เหมือนกันว่าน้องเขียนถูกหรือไม่ถูก
แต่โค้ดนี้มีเออเร่อนะครับ เงื่อนไขที่ 2 quote หาย คอมไพล์ผ่านได้ยังไง
ขอดูวงจรที่ต่อหน่อยนะครับ ฝั่งรถน่ะ จะได้แก้ช่วยแก้ไขได้ถูก
โค้ดสงสัยตอนก๊อปมาแล้วมือไปลบโดนค่ะ ขอโทษด้วยค่ะ
แต่เขียนประมาณนี้คือ ใช้คำสั่ง analogWrite ( , 130)

การต่อวงจรรถ หนูต่อวงจร H bridge ตามลิ้งค์นี้เลยค่ะ
http://www.semi-shop.com/knowledge/knowledge_detail.php?sk_id=103 รูปที่ไม่มีไดโอดนะคะ พอร์ตที่ต่อจาก arduino หนูต่อพอร์ต 9 กับ 10 แทนค่ะ

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

Related questions

0 votes
2 คำตอบ
294 views ถามเมื่อ Apr 16, 2015 in Arduino โดย methodplayer (102 คะแนน)
0 votes
1 คำตอบ
612 views ถามเมื่อ Mar 11, 2014 in Arduino โดย PawnniEz Hyun Joong (102 คะแนน)
0 votes
1 คำตอบ
3,185 views ถามเมื่อ Nov 1, 2013 in Arduino โดย oldoldold (103 คะแนน)
0 votes
2 คำตอบ
3,365 views ถามเมื่อ Oct 19, 2013 in Arduino โดย admin (240 คะแนน)
0 votes
0 คำตอบ
228 views ถามเมื่อ Mar 10, 2014 in Arduino โดย Yrrubbub Tresarpeul (106 คะแนน)
...