Hiển thị các bài đăng có nhãn Code mẫu. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Code mẫu. Hiển thị tất cả bài đăng

Thứ Hai, 26 tháng 8, 2019

Bảng nhiệm vụ pháp thuật BCIS 2019

Chào các bạn học sinh tại BCIS tới với CLB pháp thuật,
Tại CLB Pháp thuật, các bạn học sinh sẽ được rèn luyện với những thử thách từ đơn giản đến phức tạp. Những thử thách này sẽ giúp các bạn thành thục các kỹ năng liên quan đến khả năng điều khiển những vật thể vô tri vô giác, và dạy chúng tuân theo mong muốn của mình.
Kết quả hình ảnh cho pháp thuật




Dưới đây là bảng nhiệm vụ pháp thuật của CLB Pháp thuật tại BCIS. Mỗi khi các bạn vượt qua một trong những nhiệm vụ này, các bạn sẽ gia tăng năng lực pháp thuật của mình và đạt tới một cảnh giới pháp thuật cao hơn.
Hãy thử cảm nhận sức mạnh của mình.

Cấp độ Nhiệm vụ Hướng dẫn/ Giải thích Exp
Nhập môn/ Newbie Gửi email cho giáo viên anh.phan@aesvietnam.edu.vn Google 1
Cài đặt một phần mềm vào máy tính cá nhân http://bit.ly/2TNw3oi 1
Tìm kiếm một bản vẽ máy bay hoặc thuyền mô hình http://rc-plans.com
http://bit.ly/2Zm4nMs
1
Tiến hành trồng một cái cây Google nếu không biết 1
Lập trình arduino làm nháy một cái đèn led http://bit.ly/33NT3Io 1
Điều khiển còi chip phát ra tiếng kêu http://bit.ly/2U7pBsr 1
Làm một động cơ quay và quay ngược lại Không có hướng dẫn 1
Sử dụng máy khoan để tạo một lỗ bất kỳ trên mặt phẳng Thầy An hướng dẫn 1
Dọn dẹp một khu vực tại phòng Makerspace Thầy An hướng dẫn 1
Học việc/ Learner
(tối thiểu 5 điểm)
Điều khiển động cơ DC với L298 http://bit.ly/2Zh1U64 2
Lập trình sử dụng nút bấm điều khiển đèn http://bit.ly/2zocHN6 2
Đọc được cảm biến âm thanh CN 07 http://bit.ly/2ZjYmjF 2
Đọc tín hiệu từ cảm biến ánh sáng Như cảm biến âm thanh 2
Điều khiển động cơ servo http://bit.ly/2MC9fXW 2
Nhận tín hiệu từ cảm biến siêu âm http://bit.ly/2ZsroNV 2
Thành lập một website hoặc fanpage xim.tv, blogspot, wordpress 2
Tạo hình phóng to với Papercraft Kết quả hình ảnh cho newbie
http://bit.ly/2P61s6G
2
Ảo thuật gia/ Magician
(tối thiểu 8 điểm)
Gửi tín hiệu serial từ arduino http://bit.ly/2KVTYOx 3
Nhận tín hiệu Serial từ máy tính với arduino http://bit.ly/2Z9Lxcn 3
Tạo và đăng tải video lên kênh Youtube Google 3
Đọc cảm biến nhiệt độ độ ẩm http://bit.ly/322jgBB 3
Hiển thị ký tự lên màn hình LCD http://bit.ly/2TNyO98
http://bit.ly/2Hjfn33
3
Đăng sản phẩm lên các trang shopee, lazada Google 3
Nhận tín hiệu hồng ngoại từ điều khiển ti vi http://bit.ly/2TNzknA 3
Lập trình robot thực hiện theo tín hiệu Serial được gửi từ máy tính http://bit.ly/33Kbfmg 3
Biết làm quay động cơ ba pha esc http://bit.ly/33Yynxt 3
Thiết kế móc khóa với Tinkercad http://bit.ly/2MqcqSt 3
Phù Thủy trẻ/ Junior wizard
(tối thiểu 15 điểm)
Lập trình điện thoại android điều khiển led qua sóng bluetooth http://bit.ly/2Mu9wMq
http://bit.ly/31Slraw
4
Sử dụng máy in 3d để in một bức tượng nhỏ http://bit.ly/2HhGv2l 4
Sử dụng máy cắt laser để cắt móc khóa Thầy An hướng dẫn 4
Khắc kim loại bằng máy khắc kim loại Thầy An hướng dẫn 4
Lập trình đèn led sáng tắt theo tiếng vỗ tay http://bit.ly/2HjsilH 4
Cắt bộ khung của mô hình thuyền http://bit.ly/2PgpWds 4
Cắt bản vẽ mô hình máy bay http://bit.ly/2Zgt9tA 4
Lập trình chương trình con cơ bản http://bit.ly/2Rtmehr 4
Lập trình đọc tín hiệu từ phím ma trận http://bit.ly/2TO2q6s 4
Phù thủy kinh nghiệm/ Senior wizard
(tối thiểu 30 điểm)
Lắp ráp thành công cánh tay robot http://bit.ly/2zdNSne 5
Lắp ráp thành công một khung xe robot http://bit.ly/33Ju353 5
Lập trình một bản nhạc hoàn thiện với arduino http://bit.ly/31OelUo 5
Lập trình điều khiển thiết bị điện với relay từ http://bit.ly/2KISVCu 5
Chế tạo một thước điện tử http://bit.ly/2zh5EFT 5
Cắt bộ khung thuyền từ bản vẽ bằng máy cắt laser Thầy An hướng dẫn 5
Lắp ráp thành công mô hình thuyền theo bản vẽ (nổi được) http://bit.ly/2KNNPFn 5
Lắp ráp thành công mô hình máy bay theo bản vẽ ( lượn được) Nhìn mô hình có sẵn trong phòng 5
Tạo lập hệ thống kinh doanh có ít nhất 01 đơn hàng/ ngày Tự tìm hiểu 5
Chiến binh pháp thuật/Warrior
(tối thiểu 50 điểm)
Chế tạo robot tránh vật cản http://bit.ly/2Hfu5Iw 6
Chế tạo robot điều khiển bằng bluetooth http://bit.ly/2TNw3oi 6
Lắp ráp đồ điện và điều khiển được máy bay cánh bằng http://bit.ly/2ZuITgx 6
Lắp ráp đồ điện và điều khiển được tàu mô hình http://bit.ly/30wR896 6
Lập trình hiển thị led 7 đoạn Thầy Hoàng Anh hướng dẫn 6
Lập trình hiển thị với màn hình OLED http://bit.ly/2KXpcWO 6
Thiết kế mới hoàn toàn một bộ khung robot Không có hướng dẫn 6
Xây dựng và hoàn hiện một hệ thống thủy canh tĩnh http://bit.ly/2KXpcWO 6
Đọc tín hiệu từ cảm biến gia tốc góc http://bit.ly/2ZpBBXl 6
Pháp sư/ Warlock
(tối thiểu 90 điểm)
Gửi nhận tín hiệu qua internet với Blynk http://bit.ly/2ZqwOJq 7
Gửi nhận tín hiệu qua internet với MQTT http://bit.ly/2ZqwOJq 7
Gửi nhận tín hiệu qua internet http://bit.ly/2ZqwOJq 7
Quét sóng wifi xung quanh http://bit.ly/2ZqwOJq 7
Có giải thưởng trong các cuộc thi KHKT cấp thành phố  Không có hướng dẫn 7
Gửi nhận tín hiệu với module Sim http://bit.ly/2ZqwOJq 7
Lập trình hoặc chế tạo Drone 4 cánh http://bit.ly/2ZzM1be 7
Thiết lập chế độ tự động cân bằng cho máy bay RC http://bit.ly/320c3lp 7
Thực hiện 01 video vượt sông với thuyền RC http://bit.ly/2Pc7mmU 7
Đại pháp sư/ Beyonder
(tối thiểu 160 điểm)
Có giải thưởng trong các cuộc thi KHKT cấp Quốc gia Không có hướng dẫn 8
Lập trình robot cân bằng http://bit.ly/2KUKqEr 8
Lập trình nhận diện màu sắc http://bit.ly/2KUKsfx 8
Lập trình nhận diện vật thể http://bit.ly/33XV9Wj 8
Lập trình một chatbot tự động chat với người trên fanpage với kịch bản đơn giản Sử dụng chatfuel 8
Có một bằng phát minh sáng chế Không có hướng dẫn 8
Lập trình được một game cờ (caro, cờ tướng) http://bit.ly/2HpMIte 8
Chế tạo một robot di chuyển được bằng 2 chân Không có hướng dẫn 8
Thiết kế hệ thống điều khiển nhà qua Facebook Khi bạn thạo hết bộ các hướng dẫn Iot 8
Cung cấp một giải pháp công nghệ ra thị trường Không có hướng dẫn 8

Thứ Ba, 18 tháng 4, 2017

Nhập môn với arduino. Làm nháy đèn led

Chào các bạn,

Nháy đèn led là nhiệm vụ nhập môn cơ bản nhất cho lĩnh vực điều khiển tự động nói chung và lập trình phần cứng nói riêng. Trong bài viết này, tôi sẽ đưa ra các hướng dẫn và ví dụ rất cụ thể về cụm câu lệnh làm nháy đèn led


Nháy led với arduino

Thứ Ba, 7 tháng 2, 2017

Hướng dẫn và code mẫu điều khiển 1 led qua wifi (tạo một webserver với ESP8266 module Wemos D1

Chào các bạn, như đã hứa ở những bài viết trước, ở bài viết này mình sẽ tập hợp đầy đủ các bước các mà các bạn cần thực hiện để có thể tạo một web server với module ESP 8266. Hơn thế nữa, ở bài viết này, mình cũng sẽ cung cấp code mẫu và video giải thích code mẫu một cách chi tiết để các bạn không những có thể làm được, mà còn có thể hiểu vấn đề một cách tối đa.


Mua Wemos D1
Tư vấn mua arduino cho người mới bắt đầu


Internet of things

Chủ Nhật, 22 tháng 1, 2017

Trọn bộ video Arduino cơ bản của Robot cho mọi người

Chào các bạn, với sự phát triển thần kỳ của arduino. Hiện nay, việc chế tạo một cỗ máy thông minh hay một chú robot không còn là điều quá xa lạ, khó khăn với các bạn học sinh Việt Nam.
Bài viết này là bộ sưu tập trọn bộ các video hướng dẫn cơ bản của chương trình Robot cho mọi người. Hi vọng với bộ video này. Các bạn có thể tự tin dấn thân vào lĩnh vực công nghệ điều khiển tự động, và sớm có những phát minh sáng chế thú vị trong tương lai.

Bài 1: Cài đặt Arduino IDE

Bài 2: Cài đặt driver CH340


Bài 3: Lập trình nháy 1 led


Bài 4: Điều khiển động cơ bằng L298


Bài 5: Điều khiển tốc độ của động cơ với L298


Bài 6: AnalogWrite - Vòng lặp for - Thuật toán làm mờ


Bài 7: Giao tiếp Software Serial cho arduino


Bài 8: Các lệnh cơ bản với động cơ servo


Bài 9: Quét động cơ servo 0-180



Bài 10: Điều khiển LCD 16x2
Bài 11: Hướng dẫn sử dụng arduino LCD Keypad

Bài 12: Giao tiếp LCD I2C với arduino


Bài 13: Nhận tín hiệu đầu vào từ nút bấm


Bài 14: Cảm biến khí gas


Bài 15: Cảm biến âm thanh CN07


Bài 16: Cảm biến siêu âm SRF05


Bài 17: Cảm biến mưa


Bài 18: Nhận tín hiệu từ phím ma trận
Bài 19: Lập trình điều khiển với relay


Bài 20: Led 7 thanh (P1)


Bài 21: Led 7 thanh (P2)


Bài 22: Led 7 thanh (P3)


Bài 23: Mắt nhận hồng ngoại


Bài 24: Nhận tín hiệu từ bộ thu phát Rf


Bài 25: Hàm millis()|Timer


Bài 26: Nháy led bằng Timer


Bài 27: Ngắt trong arduino


Bài 28: Module thời gian thực DS1307


Bài 29: Cảm biến độ nghiêng ADXL 345


Bài 30: Cảm biến gia tốc MPU 6050


Thứ Ba, 17 tháng 1, 2017

[CODE MẪU] CÁNH TAY ROBOT TỰ ĐÔNG

Code mẫu cánh tay robot tự động

Chào các bạn. Vì có  rất rất nhiều bạn sau khi nhận được cánh tay robot cảm thấy bối rối khi chưa có code nào có thể sử dụng được cánh tay robot một cách ngay và luôn nên ở bài viết này mình xin đặt luôn một code mẫu chạy tự động để các bạn đỡ thấy bối rối nha.

[CODE MẪU ] Robot tránh vật cản

[CODE MẪU ] Robot tránh vật cản





Chào các bạn, robotics thời điểm này đã trở thành một game robot cho các bạn thiếu nhi Việt Nam, ở bài viết này mình xin chia sẻ cách lắp ráp robot tránh vật cản và code lập trình cho nó.

Học lập trình ở đâu

[CODE MẪU] ĐIỀU KHIỂN ĐỘNG CƠ SERVO BẰNG BIẾN TRỞ

[CODE MẪU] ĐIỀU KHIỂN ĐỘNG CƠ SERVO BẰNG BIẾN TRỞ





Chào các bạn,
Bài viết này sẽ đưa chúng ta tới một ví dụ rất cơ bản trong điều khiển động cơ servo cùng arduino. Đó là làm thế nào để nhận tín hiệu từ chiết áp và điều khiển động cơ servo. Bài học này sẽ làm tiền đề cho các bạn chế tạo các thiết bị điều khiển từ xa với arduino. Nào, hãy bắt đầu thôi.

Đây là video hướng dẫn nhé



Code mẫu đây các bạn nhé
#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int val;    // variable to read the value from the analog pin

void setup()
{
  Serial.begin(9600);
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop()
{
  val = analogRead(A1);            // reads the value of the potentiometer (value between 0 and 1023)
  val = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo (value between 0 and 180)
  myservo.write(val);  // sets the servo position according to the scaled value
  delay(15);    // waits for the servo to get there
  Serial.println(val);
}

[CODE MẪU] GIAO TIẾP MODULE THỜI GIAN THỰC DS1307

[CODE MẪU] GIAO TIẾP MODULE THỜI GIAN THỰC DS1307



Chào các bạn, Module Ds1307 là module thời gian thực được sử dụng rất nhiều trong việc tính toán thời gian so với thực tế. Làm các công việc như hẹn giờ, thiết lập cách hoạt động của hệ thống theo thời gian phù hợp trong năm, đảm bảo thời gian của hệ thống kể cả khi bị ngắt điện. Bài viết này sẽ cung cấp cho các bạn cách kết nối và code mẫu lập trình cho module DS1307 này nhé.



#include <Wire.h>

/* Địa chỉ của DS1307 */
const byte DS1307 = 0x68;
/* Số byte dữ liệu sẽ đọc từ DS1307 */
const byte NumberOfFields = 7;

/* khai báo các biến thời gian */
int second, minute, hour, day, wday, month, year;

void setup()
{
  Wire.begin();
  /* cài đặt thời gian cho module */
  setTime(12, 30, 45, 1, 8, 2, 15); // 12:30:45 CN 08-02-2015
  Serial.begin(9600);
}

void loop()
{
  /* Đọc dữ liệu của DS1307 */
  readDS1307();
  /* Hiển thị thời gian ra Serial monitor */
  digitalClockDisplay();
  delay(1000);
}

void readDS1307()
{
        Wire.beginTransmission(DS1307);
        Wire.write((byte)0x00);
        Wire.endTransmission();
        Wire.requestFrom(DS1307, NumberOfFields);
     
        second = bcd2dec(Wire.read() & 0x7f);
        minute = bcd2dec(Wire.read() );
        hour   = bcd2dec(Wire.read() & 0x3f); // chế độ 24h.
        wday   = bcd2dec(Wire.read() );
        day    = bcd2dec(Wire.read() );
        month  = bcd2dec(Wire.read() );
        year   = bcd2dec(Wire.read() );
        year += 2000;  
}
/* Chuyển từ format BCD (Binary-Coded Decimal) sang Decimal */
int bcd2dec(byte num)
{
        return ((num/16 * 10) + (num % 16));
}
/* Chuyển từ Decimal sang BCD */
int dec2bcd(byte num)
{
        return ((num/10 * 16) + (num % 10));
}

void digitalClockDisplay(){
    // digital clock display of the time
    Serial.print(hour);
    printDigits(minute);
    printDigits(second);
    Serial.print(" ");
    Serial.print(day);
    Serial.print(" ");
    Serial.print(month);
    Serial.print(" ");
    Serial.print(year);
    Serial.println();
}

void printDigits(int digits){
    // các thành phần thời gian được ngăn chách bằng dấu :
    Serial.print(":");
     
    if(digits < 10)
        Serial.print('0');
    Serial.print(digits);
}

/* cài đặt thời gian cho DS1307 */
void setTime(byte hr, byte min, byte sec, byte wd, byte d, byte mth, byte yr)
{
        Wire.beginTransmission(DS1307);
        Wire.write(byte(0x00)); // đặt lại pointer
        Wire.write(dec2bcd(sec));
        Wire.write(dec2bcd(min));
        Wire.write(dec2bcd(hr));
        Wire.write(dec2bcd(wd)); // day of week: Sunday = 1, Saturday = 7
        Wire.write(dec2bcd(d));
        Wire.write(dec2bcd(mth));
        Wire.write(dec2bcd(yr));
        Wire.endTransmission();
}

[CODE MẪU] ĐO KHOẢNG CÁCH VỚI CẢM BIẾN SIÊU ÂM HC-SR04 VÀ SRF05

[CODE MẪU] ĐO KHOẢNG CÁCH VỚI CẢM BIẾN SIÊU ÂM HC-SR04 VÀ SRF05



Giới thiệu với các bạn code mẫu đo khoảng cách với cảm biến siêu âm HC-SR04 và SRF05.
Sử dụng loại cảm biến này, chúng ta có thể cùng nhau chế tạo được các robot hay hệ thống phục vụ cho các mục tiêu cần đo được khoảng cách từ 0 đến 2m. Qua đó, quyết định được thông tin robot cần phải làm gì.

Danh sách linh kiện
Cảm biến siêu âm
Arduino chíp cắm
Dây đực cái

 Mua ngay



Học lập trình ở đâu


 Mua ngay

const int trig = 7;//chân trig của HC-SR04
const int echo = 8;//chân echo của HC-SR04
void setup()
{
  Serial.begin(9600);//giao tiếp Serial với baudrate 9600
  pinMode(trig,OUTPUT);//chân trig sẽ phát tín hiệu
  pinMode(echo,INPUT);//chân echo sẽ nhận tín hiệu
}
void loop()
{
  unsigned long duration;//biến đo thời gian
  int distance;//biến lưu khoảng cách

  /* phát xung từ chân trig */
  digitalWrite(trig,0);//tắt chân trig
  delayMicroseconds(2);
  digitalWrite(trig,1);// phát xung từ chân trig
  delayMicroseconds(5);// xung có độ dài 5 microSeconds
  digitalWrite(trig,0);//tắt chân trig

  /*tính toán thời gian*/
  duration = pulseIn(echo,HIGH);//đo độ rộng xung HIGH ở chân echo. ( http://arduino.vn/reference/pulsein )
  distance = int(duration/2/29.412);//tính khoảng cách đến vật.

  /*in kết quả ra Serial monitor*/
  Serial.print(distance);
  Serial.println("cm");
  delay(200);
}

[CODE MẪU] ROBOT DÒ ĐƯỜNG VẠCH ĐEN

[CODE MẪU] ROBOT DÒ ĐƯỜNG VẠCH ĐEN



Video giải thích đây nhé



Còn đây là code mẫu cho anh em

#define inA1 6 //Định nghĩa chân in1 của động cơ A
#define inA2 7 //Định nghĩa chân in2 của động cơ A
#define inB1 8 //Định nghĩa chân in1 của động cơ B
#define inB2 9 //Định nghĩa chân in2 của động cơ B
#define linesens1 10 //Định nghĩa chân cảm biến line 1
#define linesens2 11 //Định nghĩa chân cảm biến line 2
#define linesens3 12 //Định nghĩa chân cảm biến line 3
#define linesens4 13 //Định nghĩa chân cảm biến line 4
void setup() {
  Serial.begin(9600);
  pinMode(inA1, OUTPUT);//Set chân in1 của dc A là output
  pinMode(inA2, OUTPUT);//Set chân in2 của dc A là output
  pinMode(inB1, OUTPUT);//Set chân in1 của dc B là output
  pinMode(inB2, OUTPUT);//Set chân in2 của dc B là output
  pinMode(linesens1, INPUT);//Set chân cảm biến 1 là input
  pinMode(linesens2, INPUT);//Set chân cảm biến 2 là input
  pinMode(linesens3, INPUT);//Set chân cảm biến 3 là input
  pinMode(linesens4, INPUT);//Set chân cảm biến 4 là input


}

void loop() {
    darkLineFollower (inA1, inA2, inB1, inB2, linesens1, linesens2, linesens3, linesens4);
    analogWrite(3,100);
    analogWrite(5,100);
    delayMicroseconds(1);
}

void darkLineFollower (byte inR1, byte inR2, byte inL1, byte inL2, byte sen1, byte sen2, byte sen3, byte sen4)
{
  //Hàm điều khiển robot bám line màu tối
  //inR1, inR2 và inL1, inL2 là các chân tín hiệu lần lượt điều khiển động cơ di chuyển bên phải và trái
  //sen1 đến sen4 là chân nhận tín hiệu từ cảm biến hồng ngoại
  //Bây giờ thì lập trình thôi
  switch (deviationDarkLine4Sensor (sen1, sen2, sen3, sen4))
  {
    case -1:
      robotMover( inR1, inR2, inL1, inL2, 6);// rẽ phải
      break;
    case -2:
      robotMover( inR1, inR2, inL1, inL2, 6);
      break;
    case 1:
      robotMover( inR1, inR2, inL1, inL2, 5);// rẽ trái
      break;
    case 2:
      robotMover( inR1, inR2, inL1, inL2, 5);
      break;
    case 0:
      robotMover( inR1, inR2, inL1, inL2, 1);// tiến thẳng
      break;
    case 3:
      robotMover( inR1, inR2, inL1, inL2, 2);// lệch vạch thì lùi
      break;
       
  }

}
void robotMover (byte inR1, byte inR2, byte inL1, byte inL2, byte action)
{
  /*
  inR1 inR2 là 2 chân tín hiệu động cơ bên phải
  inL1 inL2 là 2 chân tín hiệu động cơ bên trái
  action= 0 đứng yên
  action =1 đi thẳng
  action =2 lùi lại
  action =3 quay trái
  action =4 quay phải
  action =5 rẽ trái
  action =6 rẽ phải

  */
  switch (action)
  {
    case 0:// không di chuyển
      motorControlNoSpeed(inR1, inR2, 0);
      motorControlNoSpeed(inL1, inL2, 0);
      break;
    case 1://đi thẳng
      motorControlNoSpeed(inR1, inR2, 1);
      motorControlNoSpeed(inL1, inL2, 1);
      break;
    case 2:// lùi lại
      motorControlNoSpeed(inR1, inR2, 2);
      motorControlNoSpeed(inL1, inL2, 2);
      break;
    case 3:// quay trái
      motorControlNoSpeed(inR1, inR2, 2);
      motorControlNoSpeed(inL1, inL2, 1);
      break;
    case 4:// quay phải
      motorControlNoSpeed(inR1, inR2, 1);
      motorControlNoSpeed(inL1, inL2, 2);
      break;
    case 5:// rẽ trái
      motorControlNoSpeed(inR1, inR2, 1);
      motorControlNoSpeed(inL1, inL2, 0);
      break;
    case 6:// rẽ phải
      motorControlNoSpeed(inR1, inR2, 0);
      motorControlNoSpeed(inL1, inL2, 1);
      break;
    default:
      action = 0;
   
  }
}


void motorControlNoSpeed (byte in1, byte in2, byte direct)
{
  // in1 and in2 are 2 signal pins to control the motor
  // en is the enable pin
  // the defauspeed is the highest
  // direct includes:
  //    0:Stop
  //    1:Move on 1 direct
  //    2:Move on another direct
  switch (direct)
  {
    case 0:// Dừng không quay
      digitalWrite(in1, LOW);
      digitalWrite(in2, LOW);
      break;
    case 1:// Quay chiều thứ 1
      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);
      break;
    case 2:// Quay chiều thứ 2
      digitalWrite(in1, LOW);
      digitalWrite(in2, HIGH);
      break;
      //default:
  }
}
boolean IFSensor (byte PinNumb)
{
//0 sáng
//1 tối
  return(digitalRead (PinNumb));
}

int deviationDarkLine4Sensor (int PinNumb1, int PinNumb2, int PinNumb3, int PinNumb4)
{
  int left = 0; //biến kiểm tra lệch trái
  int right = 0; // biến kiểm tra lệch phải
  left = IFSensor (PinNumb1)+IFSensor (PinNumb2); //kiểm tra mấy cảm biến trái ở trong màu đen
  right= IFSensor (PinNumb3)+IFSensor (PinNumb4); //kiểm tra mấy cảm biến phải ở trong màu đen
  Serial.print("left=");
  Serial.println(left);
  Serial.print("right=");
  Serial.println(right);
  if ((left!=0) || (right!=0))return left - right;
  else return 3;
  /*
  Kết quả trả về là 0 là không lệch
  Âm là lệch trái
  Dương là lệch phải
  */
}

[CODE MẪU] CÁNH TAY ROBOT ĐIỀU KHIỂN BẰNG MÁY TÍNH

[CODE MẪU] CÁNH TAY ROBOT ĐIỀU KHIỂN BẰNG MÁY TÍNH



Chào các bạn,
Nào chúng ta cùng lao vào một thử thách cùng robot cho mọi người nhé. Đây là thử thách điều khiển cánh tay robot bằng máy tính.

Học lập trình ở đâu

Đây là topic cho thử thách của chương trình


Và dưới này thì có code mẫu nhé
Code nạp vào Arduino trên tay robot


#include <Servo.h>

Servo khop1;  //0-180
Servo khop2;  //0-80-150
Servo khop3;  //0-100
Servo khop4;  //0-100

int bluetoothByte = 0;

void setup()
{
  Serial.begin (9600);
  khop1.attach(2);//0-180
  khop2.attach(3);//0-80-150
  khop3.attach(4);//0-100
  khop4.attach(5);//0-100
}

void loop()
{
  bluetoothRobotArm();
}

void bluetoothRobotArm()
{
  if (Serial.available() > 0)
    bluetoothByte = Serial.read();
  switch (bluetoothByte)
  {
    case '0':
      stopArm();
      break;
    case '1':
      vuonRa1Buoc();
      break;
    case '2':
      thuVao1Buoc();
      break;
    case '3':
      quayTrai1Buoc();
      break;
    case '4':
      quayPhai1Buoc();
      break;
    case '5':
      nangLen1Buoc();
      break;
    case '6':
      haXuong1Buoc();
      break;
    case '7':
      kep1Buoc();
      break;
    case '8':
      moRa1Buoc();
      break;


  }
}

void stopArm()
{
  servoPosition(khop1.read(), khop2.read(), khop3.read(), khop4.read());
}

void kep()
{
  khop4.write(0);
}
void kep1Buoc()
{
  khop4.write(khop4.read() - 1);
  delay(50);
}

void moRa()
{
  khop4.write(100);
}
void moRa1Buoc()
{
  khop4.write(khop4.read() + 1);
  delay(50);
}

void moRaTuTu()
{
  for (int i = khop4.read(); i <= 130; i++)
  {
    khop4.write(i);
    delay(10);
  }
}
void kepTuTu()
{
  for (int i = khop4.read(); i >= 0; i--)
  {
    khop4.write(i);
    delay(10);
  }
}
void nangLenTuTu()
{
  for (int i = khop2.read(); i <= 90; i++)
  {
    khop2.write(i);
    delay(50);
  }
}
void nangLen1Buoc()
{
  khop2.write(khop2.read() + 1);
  delay(50);
}

void haXuongTuTu()
{
  for (int i = khop2.read(); i >= 50; i--)
  {
    khop2.write(i);
    delay(50);
  }
}
void haXuong1Buoc()
{
  khop2.write(khop2.read() - 1);
  delay(50);
}
void haXuong()
{
  khop2.write(50);
}
void nangLen()
{
  khop2.write(90);
}

void vuonRa()
{
  khop3.write(0);
}

void vuonRa1Buoc()
{
  khop3.write(khop3.read() - 1);
  delay(50);
}
void vuonRaTuTu()
{
  for (int i = khop3.read(); i >= 0; i--)
  {
    khop3.write(i);
    delay(50);
  }
}

void thuVao()
{
  khop3.write(100);
}

void thuVao1Buoc()
{
  khop3.write(khop3.read() + 1);
  delay(50);
}
void thuVaoTuTu()
{
  for (int i = khop3.read(); i <= 100; i++)
  {
    khop3.write(i);
    delay(50);
  }
}
void quayTrai()
{
  khop1.write(180);
}

void quayTrai1Buoc()
{
  khop1.write(khop1.read() + 1);
  delay(50);
}
void quayPhai()
{
  khop1.write(0);
}

void quayPhai1Buoc()
{
  khop1.write(khop1.read() - 1);
  delay(50);
}
void quayTraiTuTu()
{
  for (int i = khop1.read(); i <= 180; i++)
  {
    khop1.write(i);
    delay(50);
  }
}
void quayPhaiTuTu()
{
  for (int i = khop1.read(); i >= 0; i--)
  {
    khop1.write(i);
    delay(50);
  }
}

void readyPosition()
{
  khop1.write(90);
  khop2.write(100);
  khop3.write(80);
  khop4.write(100);
}

void testMove()
{
  for (int i = 0; i <= 180; i++)
  {
    khop1.write(i);
    delay (20);
  }
  for (int i = 180; i >= 0; i--)
  {
    khop1.write(i);
    delay (20);
  }
  readyPosition();
  delay(500);
  for (int i = 0; i <= 100; i++)
  {
    khop2.write(i);
    delay (20);
  }
  for (int i = 100; i >= 0; i--)
  {
    khop2.write(i);
    delay (20);
  }

  readyPosition();
  delay(500);
  for (int i = 0; i <= 80; i++)
  {
    khop3.write(i);
    delay (20);
  }
  for (int i = 80; i >= 0; i--)
  {
    khop3.write(i);
    delay (20);
  }
  readyPosition();
  delay(500);
  for (int i = 0; i <= 100; i++)
  {
    khop4.write(i);
    delay (20);
  }
  for (int i = 100; i >= 0; i--)
  {
    khop4.write(i);
    delay (20);
  }
}
void servoPosition (byte servo1, byte servo2, byte servo3, byte servo4)
{
  khop1.write(servo1);
  khop2.write(servo2);
  khop3.write(servo3);
  khop4.write(servo4);
}


void turnAround ()
{
  for (int i = 0; i <= 180; i++)
  {
    khop1.write(i);
    delay (20);
  }
  for (int i = 180; i >= 0; i--)
  {
    khop1.write(i);
    delay (20);
  }
}


Code cho visual C# (không phải cứ nạp vào là ăn đâu nhé
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;



namespace RobotBluetooth
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            getAvailablePort();
        }

        void getAvailablePort()
        {
            string[] ports = SerialPort.GetPortNames();
            comboBox1.Items.AddRange(ports);
        }


        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                if (comboBox1.Text == "" || comboBox2.Text == "")// Neu khong co 1 trong 2 thong so Port va baurate
                {
                    textBox1.Text = "Please select port setting";
                }
                else
                {
                    serialPort1.PortName = comboBox1.Text;
                    serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text);
                    serialPort1.Open();
                    button1.Enabled = false;
                    button2.Enabled = true;
                    textBox1.Enabled = true;
                    button3.Enabled = true;
                    button4.Enabled = true;
                    button5.Enabled = true;
                    button6.Enabled = true;
                    button7.Enabled = true;
                    button8.Enabled = true;
                    button9.Enabled = true;
                    button10.Enabled = true;

                }
            }
            catch (UnauthorizedAccessException)
            {
                textBox1.Text = " Unauthorized Acesse ";
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            serialPort1.Close();
            button1.Enabled = true;
            button2.Enabled = false;
            button3.Enabled = false;
            button4.Enabled = false;
            button5.Enabled = false;
            button6.Enabled = false;
            textBox1.Enabled = false;
        }

        private void button3_MouseDown(object sender, MouseEventArgs e)
        {
            serialPort1.Write("1");
        }

        private void button3_MouseUp(object sender, MouseEventArgs e)
        {
            serialPort1.Write("0");
        }

        private void button4_MouseDown(object sender, MouseEventArgs e)
        {
            serialPort1.Write("2");
        }

        private void button4_MouseUp(object sender, MouseEventArgs e)
        {
            serialPort1.Write("0");
        }

        private void button5_MouseDown(object sender, MouseEventArgs e)
        {
            serialPort1.Write("3");
        }

        private void button5_MouseUp(object sender, MouseEventArgs e)
        {
            serialPort1.Write("0");
        }

        private void button6_MouseDown(object sender, MouseEventArgs e)
        {
            serialPort1.Write("4");
        }

        private void button6_MouseUp(object sender, MouseEventArgs e)
        {
            serialPort1.Write("0");
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
        private void button9_MouseDown(object sender, MouseEventArgs e)
        {
            serialPort1.Write("7");
        }

        private void button9_MouseUp(object sender, MouseEventArgs e)
        {
            serialPort1.Write("0");
        }

        private void button10_MouseDown(object sender, MouseEventArgs e)
        {
            serialPort1.Write("8");
        }

        private void button10_MouseUp(object sender, MouseEventArgs e)
        {
            serialPort1.Write("0");
        }

        private void button7_MouseDown(object sender, MouseEventArgs e)
        {
            serialPort1.Write("5");
        }

        private void button8_MouseDown(object sender, MouseEventArgs e)
        {
            serialPort1.Write("6");
        }

        private void button8_MouseUp(object sender, MouseEventArgs e)
        {
            serialPort1.Write("0");
        }

        private void button7_MouseUp(object sender, MouseEventArgs e)
        {
            serialPort1.Write("0");
        }

     

    }    
}