tu787878 gửi vào
- 16958 lượt xem
I.Giới thiệu
Xin chào các bạn, như chúng ta biết nền nông nghiệp nước ta đang phát triển cùng với sự áp dụng những sản phẩm KH-KT vào sản xuất. Nhằm đi theo bước tiến đó, hôm nay mình xin giới thiệu các bạn một ứng dụng nhằm giúp ích một phần nhỏ cho người nông dân.
Có lẽ chỉ ai đã từng làm hoặc có người thân là người nông dân thì chắc chắn sẽ hiểu nỗi khổ này. Sau một mùa vụ làm việc cực nhọc thì muốn cho nông sản của mình như lúa, café, trà, bắp,… có giá trị hơn hoặc để có thể giữ gìn lâu hơn thì phải trải qua một công việc nữa là phơi. Một công việc nhìn thì thấy rất dơn giản và không cần phải tỉ mĩ chính xác quá. Nhưng khi làm nó thì hơi cực nhọc khi phải phơi ngoài nắng và nhiệt độ phải hết sức nắng gắt mới khô được nông sản trên. Mà không phải trải ra phơi không đâu mà còn phải luôn canh chừng ra cày xới để phơi đều. Công việc này rất tốn thời gian ( trong khi đó đáng lẽ ta phải tận hưởng sau một vụ mùa vất vả ), và khi tiếp xúc với (lúa) thì chân chúng ta sẽ dễ bị sót đỏ, và dễ bị bệnh khi giang thân ngoài nắng .
Đó là nguyên nhân ra đời của Robot Phơi Nông Sản - Robot Helper Farmers
II. Hoạt động
Ý tưởng: Robot sẽ giúp cho nông dân việc cày xới lúa. Sau khi trải lúa ra phơi thì người nông dân chỉ cần ước lượng chiều dài chiều rộng rồi nhập vào để cho chú Robot này di chuyển hết diện tích phơi lúa. Sau khi đi hướng 1 hướng thì sẽ tự động di chuyển để cày lúa theo một hướng khác. Như thế này thì người nông dân chỉ cần trải lúa ra rồi cho robot hoạt động rồi yên tâm nằm ngủ chiều hốt vào. ( Chỉ lo việc giang hồ đua thôi ).
Nói thì có lẽ khó hình dung ==>> TIến hành làm nào.
III.Nào cùng làm
1.Khung xe
Bước đầu tiên bạn phải mua tấm mica để làm khung xe đẹp và chắc chắn. Của mình mua 1 tấm 0,4-0,5m tầm 70k ( hơi đắc nhưng chất 2.5li - 3li). Vì điều kiện ở mình chưa cao lắm nên hầu như tất cả là thủ công nên ko đẹp lắm âu, các bạn thông cảm nhé. Dự định của mình sẽ làm đế xe hình chữ nhật, rồi cắt thêm vài miếng dài như kích thước đế và cao khoảng 5cm để dựng lên làm cái hộp.
Để gắn chặt cái miếng thì mình dụng thanh chữ L (cái này mua ở các tiệm bán ống ốc vít,..) và gắn ốc con tán vào. Đế xe thì mình sẽ đo 2 cái động cơ bánh xe để đục khe này. Vì xe mình chiều ngang nên phải gắn bánh xe vào trong cho đẹp.
Bánh xe và hộp giảm tốc đây. Tầm 60k 1 bộ. Được bán rất nhiều ở tiệm điện tử hay search thì sẽ ra thôi .
Mình cần 2 bánh xe đa hướng ở phía trước (chứ một bánh thì làm sao mà đỡ nối cái khung này ahihi)
Ok. Để có thể đi trên địa hình lúa mà không bị chuệch hướng thì có lẽ mình sẽ gắn thêm các miếng chắn trước và sau 2 bánh xe để tạo rãnh khi chạy.
Các bạn nên đo 2 cái chắn mũi nhọn trên hình ý thành một đường thẳng để tận dụng chỗ đó gắn thêm thanh chữ L rồi gắn các miếng cào.
Tấm để cào đây: (Nó được làm bằng tôn cứng dày khoảng 0,7 li )
Như thế là ổn về chức năng bây h còn trang trí thì tùy thuộc vào khả năng sáng tạo của từng người.
2. Pin
Các bạn nên dùng pin lipo khoảng 11.1V 1.5Ah mấy C cũng đc (nên dùng loại từ 5C trở lên cho chắc ăn).
3. Điều khiển và lập trình
a. Hai động cơ: thì mình đã chia sẻ ở trên.
Vấn đề ở đây là 2 motor này sẽ chạy với tốc độ không đều nhau nhé. (Ngoại lệ rất hiếm). Có thể bạn dung nhiều cách để xử lí cái này như: dung cảm biến tốc độ vòng quay,…. Nhưng bây h mình sẽ chia sẻ các bạn một các thủ công tiết kiệm :D là dùng biến trở vào con chạy nhanh hơn rồi điều chỉnh.
b. L298N- Mach cầu H điều khiển 2 motor
Hắn là cái màu đỏ:
Lập trình: Mình tham khảo trên mạng thì được cái ex này:
#define ENA 5 //enable A on pin 5 (needs to be a pwm pin) #define ENB 3 //enable B on pin 3 (needs to be a pwm pin) #define IN1 2 //IN1 on pin 2 conrtols one side of bridge A #define IN2 4 //IN2 on pin 4 controls other side of A #define IN3 6 //IN3 on pin 6 conrtols one side of bridge B #define IN4 7 //IN4 on pin 7 controls other side of B void setup() { //set all of the outputs pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); } void loop() { motorA(2, 100); //have motor A turn clockwise at 100% speed motorB(2, 100); //have motor B turn clockwise at 100% speed } //**************** Motor A control ***************** void motorA(int mode, int percent) { //change the percentage range of 0 -> 100 into the PWM //range of 0 -> 255 using the map function int duty = map(percent, 0, 100, 0, 255); switch(mode) { case 0: //disable/coast digitalWrite(ENA, LOW); //set enable low to disable A break; case 1: //turn clockwise //setting IN1 high connects motor lead 1 to +voltage digitalWrite(IN1, HIGH); //setting IN2 low connects motor lead 2 to ground digitalWrite(IN2, LOW); //use pwm to control motor speed through enable pin analogWrite(ENA, duty); break; case 2: //turn counter-clockwise //setting IN1 low connects motor lead 1 to ground digitalWrite(IN1, LOW); //setting IN2 high connects motor lead 2 to +voltage digitalWrite(IN2, HIGH); //use pwm to control motor speed through enable pin analogWrite(ENA, duty); break; case 3: //brake motor //setting IN1 low connects motor lead 1 to ground digitalWrite(IN1, LOW); //setting IN2 high connects motor lead 2 to ground digitalWrite(IN2, LOW); //use pwm to control motor braking power //through enable pin analogWrite(ENA, duty); break; } } //******************************************************** //**************** Motor B control ***************** void motorB(int mode, int percent) { //change the percentage range of 0 -> 100 into the PWM //range of 0 -> 255 using the map function int duty = map(percent, 0, 100, 0, 255); switch(mode) { case 0: //disable/coast digitalWrite(ENB, LOW); //set enable low to disable B break; case 1: //turn clockwise //setting IN3 high connects motor lead 1 to +voltage digitalWrite(IN3, HIGH); //setting IN4 low connects motor lead 2 to ground digitalWrite(IN4, LOW); //use pwm to control motor speed through enable pin analogWrite(ENB, duty); break; case 2: //turn counter-clockwise //setting IN3 low connects motor lead 1 to ground digitalWrite(IN3, LOW); //setting IN4 high connects motor lead 2 to +voltage digitalWrite(IN4, HIGH); //use pwm to control motor speed through enable pin analogWrite(ENB, duty); break; case 3: //brake motor //setting IN3 low connects motor lead 1 to ground digitalWrite(IN3, LOW); //setting IN4 high connects motor lead 2 to ground digitalWrite(IN4, LOW); //use pwm to control motor braking power //through enable pin analogWrite(ENB, duty); break; } }
Bạn dùng cái này để làm cơ bản trong lập trình Robot .
Để nối dây thì bạn dùng 2 chân OUT1,2 nối với 2 chân của motor A, OUT3,4 là motor B.
Để nối dây với arduino thì trong code đã có chú thích cũng như khai báo.
c. À quên nữa. Chú bá đạo nhất là Arduino. Ở đây mình dung Arduino Uno R3
Nếu bạn nào chưa hiểu lắm về board mạch này thì xin xem lại các cơ bản về Arduino:
d. Bản nút bấm
Để giao tiếp giữa mình và robot về thông số chiều dài và chiều rộng thì mình làm một bảng nút bấm đơn giản sau: ( vẫn là làm mạch bằng thủ công bạn nhé=>> thông cảm nhé)
Mình không thiết kế để in mạch mà tự vẽ bằng bút dạ thôi. Các bạn nhìn cái này để thiết kế lại trên máy nhé`. Thủ công toàn tập :)
Đây là sơ đồ rồi bạn phát triển ra:
Bản chất mỗi dòng điện khác nhau thì mình sẽ đọc được một giá trị trong khoản 0->1023 thông qua việc đọc analogRead() trên chân A0. Các bạn có thể xem thêm bản chất của nó tại đây.
Mình sẽ dùng 2 chân A0 và A1 để nhập chiều dài và rộng. Các điện trở thì các bạn mua ở 2 chân y như nhau để khỏi mắc công đo 2 lần.( Bạn có thể mua điện trở theo thứ tự để khỏi lộn)
int button = A0; int value; void setup() { Serial.begin(9600); } void loop() { analogRead(button); value = analogRead(button); Serial.print(value); }
Dùng code trên để đo giá trị biến trở để sau đó lập trình (ghi vào giấy rồi xếp thứ tự các giá trị nhé nhớ là ghi kèm theo các nút nhấn)
Hơi lôn xộn vì mình lười đọc điện trở nên=>> > không xếp thứ tự :)
Gắn mạch vào hết rồi đo nhé. Vì nó dễ bị nhiễu lắm cơ. Sau đó test thử.
Vd: nhấn nút số 1 thì giá trị bao nhiêu sau đó ghi vào, và hãy lập trình if giá trị lớn trước rồi nếu không lớn hơn thì giá trị nhỏ dần.
Ps: phải đo khoảng giá trị lun đó!
Còn đây là code ngắn gọn hơn nhiều:
e. LCD
Đây là phần thêm vào để dễ kiểm soát và dễ sử dụng. Theo mình thì nó sẽ hiển thị chiều dài, chiều rộng, vận tốc, Có thể gắn thêm cảm biến nhiệt độ, độ ẩm và cũng hiển thị lên luôn.
f. Quan trọng nhất nhé: Lập trình hoạt động Robot
Đây là code full của robot. Vì mình cũng mới tìm hiểu, chưa rành về lập trình lứm nên có nhiều chỗ chưa tối ưu:
Đây là cách mình kiểm tra hoạt động khi chưa có pin.
Số 1 đứng một mình là khi mình tắt công tắt => Robot dừng và lưu giá trị, khi bật =>số 0 và tiếp tục thực hiên như trước đó
Chiều dài và rộng là mình nhập ban đầu á.
Mình có lập trình trong code lúc đầu là nó chờ 3s để nhận lệnh.=> mình mở nguồn lên rồi nhấn giữ cho tới khi hiển thị số trên LCD (mình lập trình là chờ 3s) rồi thả ra Robot sẽ chạy
Thêm nữa một công tắt khi muốn dừng hoạt động. Nối chân số 8 với chấn GND rồi điều chỉnh công tắc. Bạn phải định nghĩa cho nó ntn:
pinMode(8, INPUT_PULLUP);( khỏi cần trở)
Đây là bản Final:
Mình sẽ đăng ở bài sau. Tg: sau tết và sau khi ban tổ chức chấm.
IV. Kết luận
Bài viết này trên tinh thần là chia sẻ và hướng dẫn cho các bạn một ứng dụng nho nhỏ giúp cho người nông dân hiện nay. Để các bạn có thể giúp người nhà mình một tay. Hehe. Và còn nữa là đây là sản phẩm mình đang dự thi trên công đồng Arduino này CCA, Mong các bạn đọc nếu thấy hay thì giúp mình một like và kích chuột share giùm bạn bè mình nhé.( CÀNG NHIỀU CÀNG TỐT ). Và vì thời gian của cuộc thi có hạn nên trước hết mình sẽ làm những chức năng chính trước và sau này mình sẽ thêm vào nhiều chức năng nữa hữu ích hơn, hiện đại hơn và sẽ không quên chia sẻ với các ban âu . Được like nhiều mình sẽ có động lực hơn để đăng video hoạt động thực sau khi BTC chấm điểm nhé!
NHỚ LIKE VÀ SHARE GIÙM MÌNH NHÉ ! :))
CẢM ƠN CÁC BẠN ĐÃ ĐỌC :)))))))))))))))))))))))))))