Lab 4 การสร้างถังขยะอัตโนมัติจากบอร์ด Lotus Nano Bot
การทำงานของถังขยะเบื้องต้นเมื่อเจอคนในระยะห่างจากถังขยะประมาณ 50 เซนติเมตร ถังขยะจะทำการเปิดอัตโนมัติและเล่นเพลงซุปเปอร์มาริโอประมาณ 1 ท่อนหลังจากนั้นถังขยะจะปิดถังลงเองอัตโนมัติ
อุปกรณ์ที่ใช้งาน
1. โมดูล Ultrasonic 1 ตัว
2. บอร์ดLotus Nano Bot หรือบอร์ดNano+Shield
3. สายสัญญาณ
4. Adapter 9 Vdc 1 A
5. สาย Mini USB สำหรับโหลดCode
6. ถังขยะขนาดเล็ก
7. เซอร์โวมอเตอร์
8. อะคลีลิค + และชิ้นงานจาก 3D Printer
กรณีการต่อวงจรผ่านบอร์ด Lotus Nano Bot
กรณีการต่อวงจรผ่านบอร์ด Arduino Nano + Shield จีน
ตัวอย่าง Code การใช้งานเบื้องต้น
Arduino IDE Code
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Servo.h> // ผนวกไลบรารี่
Adafruit_SSD1306 OLED(-1);
///////////////////////////////////////
int s1 = 10; // เปิดใช้งาน s1 ที่พอร์ต 10
Servo sv1; // ประกาศการใช้งาน sv1
////////////////////////////////////////
int trig = A0; // ให้ขา Trig ต่อเข้ากับพอร์ต A0
int echo = A1; // ให้ขา Echo ต่อเข้ากับพอร์ต A1
int snd = 3 ; // ตั้งค่า snd เป็นพอร์ตที่ 3
////////////////////////////////////////
void setup() {
OLED.begin(SSD1306_SWITCHCAPVCC, 0x3C); // กำหนดแอดเดรสของพอร์ตจอเป็น 0x3C (for the 128x64)
sv1.attach(s1); // เรียกใช้งานเตรียมตอบสนอง sv1
}
void loop()
{
long duration, cm;
pinMode(trig, OUTPUT);
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(5);
digitalWrite(trig, LOW);
pinMode(echo, INPUT);
duration = pulseIn(echo, HIGH);
cm = microsecondsToCentimeters(duration);
OLED.clearDisplay();
OLED.setTextColor(WHITE, BLACK); //สีอักษรเป็นสีขาว ,พื้นหลังดำ
OLED.setCursor(0, 0); // เซตตำแหน่ง 0,0
OLED.setTextSize(2); // เซตขนาดอักษรมีขนาดเป็น 1
OLED.println(" KAMALASAI"); // พิมพ์ตัวอักษรที่จอ OLED คำว่า Distance
OLED.println(".........."); // พิมพ์ตัวอักษรที่จอ OLED คำว่า .............
OLED.print(" "); // เว้นวรรคที่จอ OLED
OLED.print(cm); // พิมพ์ตัวอักษรที่จอ OLED อ่านค่าตัวแปร cm
OLED.println("cm");// พิมพ์ตัวอักษรที่จอ OLED คำว่า cm
OLED.println(".........."); // พิมพ์ตัวอักษรที่จอ OLED คำว่า .............
OLED.display(); // แสดงผลการทำงานจอ OLED
delay(50); // หน่วงเวลาการทำงานทุกๆ 50 มิลลิวินาที
if (cm < 50){ sv1.write(29);mario(); }//ถ้าเจอในระยะ เปิด
else {sv1.write(119);} //ถ้าไม่เจอ ปิด
}
long microsecondsToCentimeters(long microseconds)
{
return microseconds / 29 / 2;
}
void mario()
{
tone(snd, 660, 100);
delay(150);
tone(snd, 660, 100);
delay(300);
tone(snd, 660, 100);
delay(300);
tone(snd, 510, 100);
delay(100);
tone(snd, 660, 100);
delay(300);
tone(snd, 770, 100);
delay(550);
tone(snd, 380, 100);
delay(575);
tone(snd, 510, 100);
delay(450);
tone(snd, 380, 100);
delay(400);
tone(snd, 320, 100);
delay(500);
tone(snd, 440, 100);
delay(300);
tone(snd, 480, 80);
delay(330);
tone(snd, 450, 100);
delay(150);
tone(snd, 430, 100);
delay(300);
tone(snd, 380, 100);
delay(200);
tone(snd, 660, 80);
delay(200);
tone(snd, 760, 50);
delay(150);
tone(snd, 860, 100);
delay(300);
tone(snd, 700, 80);
delay(150);
tone(snd, 760, 50);
delay(350);
tone(snd, 660, 80);
delay(300);
tone(snd, 520, 80);
delay(150);
tone(snd, 580, 80);
delay(150);
tone(snd, 480, 80);
delay(500);
}