วันพุธที่ 3 สิงหาคม พ.ศ. 2565

    เรียนรู้การสร้างหุ่นยนต์อัตโนมัติ

                       ดาวน์โหลด Arduino IDE

                              ดาวน์โหลด Driver    Pot Com 

                                          

โค้ดโปรแกรม 

1.หุ่นยนต์เดินตามเส้น

-----------------------------------------------------------------------------------

const int MotorL = 2;

const int MotorR = 3;

#define SensorL 4

#define SensorR 5



void setup() {

pinMode(SensorL, INPUT);

pinMode(SensorR, INPUT);

pinMode(MotorL, OUTPUT);

pinMode(MotorR, OUTPUT);


}


void loop() {

  if(digitalRead(SensorL) == HIGH)   {digitalWrite(MotorL, LOW);}

  else {digitalWrite(MotorL, HIGH);}

  

if(digitalRead(SensorR) == HIGH)  {digitalWrite(MotorR, LOW);}

else {digitalWrite(MotorR, HIGH);}



}

-----------------------------------------------------------------------------------------------------------


2.หุ่นยนต์แข่งขัน

int Button=13;

int IR1=2;      //Right sensor

int IR2=3;      //Left sensor

int Motor1=4; // Motor Right

int Motor2=5; // Motor Left

int lineCount = 0;

boolean lineDetected = false;

boolean  started = false;


void setup()

{

  Serial.begin(9600);

  pinMode(Button,INPUT);

  pinMode(IR1,INPUT);

  pinMode(IR2,INPUT);

  pinMode(Motor1,OUTPUT);

  pinMode(Motor2,OUTPUT);

}


//***************************************************************************//

void loop()

{

 // Serial.print("Button: ");

 // Serial.println(digitalRead(Button));

  

  if(digitalRead(Button)== HIGH )

  {

   delay(1000);

   forword();

   delay(500);

   countLine(3);

   followLine();

   if(digitalRead(IR1)==HIGH && digitalRead(IR2)==HIGH)

    {

     forword();

     delay(800);

     stop();

    }

     exit(0);

    }

  

}



//************************************************************************//

void testLineSensors() {

  Serial.print("L: ");

  Serial.print(IR1);

  Serial.print("\tR:");

  Serial.println(IR2);

  delay(100);

}


//*************************************************************************//

void followLine()

 { 

 if(digitalRead(IR1)==LOW && digitalRead(IR2)==LOW)

 {

   digitalWrite(Motor1,HIGH);

   digitalWrite(Motor2,HIGH);

 }

 else if(digitalRead(IR1)==LOW && digitalRead(IR2)==HIGH)

 {

   digitalWrite(Motor1,HIGH);

   digitalWrite(Motor2,LOW);

 }

 else if(digitalRead(IR1)==HIGH && digitalRead(IR2)==LOW)

 {

   digitalWrite(Motor1,LOW);

   digitalWrite(Motor2,HIGH);

 }

   delay(25); 

 }


 

//****************************************************************************//


void countLine(int target) {

  while (lineCount < target) {

     followLine();

    if (lineDetected == false) {

      if (digitalRead(IR1)==HIGH && digitalRead(IR2)==HIGH) {

        lineCount++;

        Serial.println(lineCount);

        lineDetected = true;

      }

    }

    else if (lineDetected == true) {

      if (digitalRead(IR1)==LOW && digitalRead(IR2)==LOW) {

        lineDetected = false;

      }

    }

    

  }

  delay(250);

  forword();

}



//******************************************************************//

void forword()

{

   digitalWrite(Motor1,HIGH);

   digitalWrite(Motor2,HIGH);

}


void turnRight()

{

   digitalWrite(Motor1,HIGH);

   digitalWrite(Motor2,LOW);  

}


void turnLeft()

{

   digitalWrite(Motor1,LOW);

   digitalWrite(Motor2,HIGH);

}


void stop()

{

   digitalWrite(Motor1,LOW);

   digitalWrite(Motor2,LOW);

}


-----------------------------------------------------------------------------------------------------------

วันอังคารที่ 15 กุมภาพันธ์ พ.ศ. 2565

กิจกรรม เรียนรู้ บอร์ดสมองกลฝังตัว Esp8266 และ เรียนรู้ Sensor

กิจกรรม เรียนรู้ บอร์ดสมองกลฝังตัว Esp8266 และ เรียนรู้ Sensor



อุปกรณ์
1.NodeMcu Esp8266 V3
2.DHT11 เซ็นเซอร์วัดอุณหภูมิและความชื้น
3.IR Infrared Sensor Module
4.เซนเซอร์วัดความชื้นในดิน Soil Moisture Sensor Module

โปรแกรม "Arduino ide"

เรื่องที่ 1 ตรวจับวัถุ และส่งข้อมูลเข้า LINE
เรื่องที่ 2 วัดความชื้น และส่งข้อมูลเข้า LINE
เรื่องที่ 3 วัดอุณหภูมิ และความชื้นส่งเข้า LINE
เรื่องที่ 4 วัดระยะทาง 
และความชื้นส่งเข้า LINE

โค้ด
#include <ESP8266WiFi.h>
#include <TridentTD_LineNotify.h>

const int pingPin = D1;
int inPin = D2;
#define Buzzer_pin D3

#define BUZZER_OFF  1
#define BUZZER_ON   0

#define LEVEL_0     0
#define LEVEL_1     1
#define LEVEL_2     2
#define LEVEL_3     3
#define LEVEL_4     4
#define LEVEL_5     5

unsigned char flooding_level;



// Your WiFi credentials.
const char* ssid = "CPE-43C6";
const char* pass = "A123456798";


#define LINE_TOKEN  "9Rh40dI0ZhMqzq3w9yKFp5KyTwP6FrEUmjUQLHmjdAJ"

/* ตั้งค่าระดับน้ำ (cm) ->  index 0 : ไม่มีน้ำท่วม
                      index 1 : น้ำท่วมระดับ 1 
                      index 2 : น้ำท่วมระดับ 2 
                      index 3 : น้ำท่วมระดับ 3 
                      index 4 : น้ำท่วมระดับ 4 
                      index 5 : น้ำท่วมระดับ 5  */
const long flood_level_cm[6] = { 0, 10, 20, 30, 40, 50 };

#define SENSOR_DISTANCE     (81)//(100) // ระยะจากพื้นถึง sensor (cm)

// ###################################################################


void setup() 
{
  Serial.begin(9600);
  pinMode(Buzzer_pin, OUTPUT);
  digitalWrite(Buzzer_pin, BUZZER_OFF);
  
  WiFi.begin(ssid, pass); 
  
  while (WiFi.status() != WL_CONNECTED) 
  { 
    // ทำการ Print "Connectiong..." ทุก 1000ms
    Serial.println("Connecting...  ");  
    Serial.printf("Connection Status: %d\n", WiFi.status()); 
    delay(1000);
  }
  
  Serial.print("Wi-Fi connected."); 
  Serial.print("IP Address : ");
  Serial.println(WiFi.localIP());  

  // กำหนด Line Token
  LINE.setToken(LINE_TOKEN);

  // Welcome message
  LINE.notify("เครื่องแจ้งเตือนน้ำท่วมเชื่อมต่อ WiFi แล้ว");
  flooding_level = LEVEL_0;
}

unsigned char buzzer_timer;
void level_mng(long cm)
{
  long level_dif;
  unsigned char flooding_level_buf = flooding_level;
  bool flag_line_send = 0;
  String msg;
  
  level_dif = SENSOR_DISTANCE - cm;

  Serial.print("Flooding Level: ");
  Serial.print(level_dif);
  Serial.println(" cm");
  
  if ( level_dif < 0 )
    flooding_level = LEVEL_0;
  else
  {
    if ( flooding_level == LEVEL_5 )
    {
       if ( level_dif <= flood_level_cm[LEVEL_4] )
         flooding_level = LEVEL_4;
    }

    if ( flooding_level == LEVEL_4 )
    {
       if ( level_dif >= flood_level_cm[LEVEL_5] )
         flooding_level = LEVEL_5;
       else if( level_dif <= flood_level_cm[LEVEL_3] )
         flooding_level = LEVEL_3; 
    }

    if ( flooding_level == LEVEL_3 )
    {
       if ( level_dif >= flood_level_cm[LEVEL_4] )
         flooding_level = LEVEL_4;
       else if ( level_dif <= flood_level_cm[LEVEL_2] )
         flooding_level = LEVEL_2;        
    }

    if ( flooding_level == LEVEL_2 )
    {
       if ( level_dif >= flood_level_cm[LEVEL_3] )
         flooding_level = LEVEL_3;
       else if ( level_dif <= flood_level_cm[LEVEL_1] )
         flooding_level = LEVEL_1;        
    }

    if ( flooding_level == LEVEL_1 )
    {
       if ( level_dif >= flood_level_cm[LEVEL_2] )
         flooding_level = LEVEL_2;
       else if ( level_dif <= flood_level_cm[LEVEL_0] )
         flooding_level = LEVEL_0;        
    }

    if ( flooding_level == LEVEL_0 )
    {
      for (int i=0; i<6; i++)
      {
        if ( level_dif >= flood_level_cm[i] )
         flooding_level = i;
      }      
    }
  }

  if ( flooding_level_buf != flooding_level )
  {
    flag_line_send = 1;
  }
 
  if ( flooding_level == 5 )
  {
    if (buzzer_timer <= 5) // 1 sec
    {
      digitalWrite(Buzzer_pin, BUZZER_ON);
    }
    else if (buzzer_timer <= 10)
    {
      digitalWrite(Buzzer_pin, BUZZER_OFF);
    }
    else 
      buzzer_timer = 0;

    buzzer_timer++;
  }
  else
  {
    digitalWrite(Buzzer_pin, BUZZER_OFF);
    buzzer_timer = 0;
  }

  if ( flag_line_send )
  {
    flag_line_send = 0;
    
    if (flooding_level_buf < flooding_level)  // level up
    {
      msg = "ระดับน้ำเพิ่มขึ้นเป็นระดับ " + String(flooding_level) + "\r\n" +
            "สูงจากพื้น " + String(level_dif) + " เซ็นติเมตร";
    }
    else  // level down
    {
      if ( flooding_level == 0 )
      {
        msg = "น้ำแห้งแล้ว";
      }
      else
      {
        msg = "ระดับน้ำลดลงเป็นระดับ " + String(flooding_level) + "\r\n" +
              "สูงจากพื้น " + String(level_dif) + " เซ็นติเมตร";      
      }
    }

    LINE.notify(msg);
  }
}

unsigned long ms_buf;
void loop()
{
  long duration, cm;
  unsigned long ms_dif;

  ms_dif = millis() - ms_buf;
  
  if ( ms_dif >= 200 )  // 200 ms
  {
    ms_buf = millis();
    pinMode(pingPin, OUTPUT);
    digitalWrite(pingPin, LOW);
    delayMicroseconds(2);
    digitalWrite(pingPin, HIGH);
    delayMicroseconds(5);
    digitalWrite(pingPin, LOW);
    pinMode(inPin, INPUT);
    duration = pulseIn(inPin, HIGH);
    cm = microsecondsToCentimeters(duration);
  /*  Serial.print(cm);
    Serial.println("cm");*/

    level_mng(cm);
  }
}

long microsecondsToCentimeters(long microseconds)
{
  // ความเร็วเสียงในอากาศประมาณ 340 เมตร/วินาที หรือ 29 ไมโครวินาที/เซนติเมตร
  // ระยะทางที่ส่งเสียงออกไปจนเสียงสะท้อนกลับมาสามารถใช้หาระยะทางของวัตถุได้
  // เวลาที่ใช้คือ ระยะทางไปกลับ ดังนั้นระยะทางคือ ครึ่งหนึ่งของที่วัดได้
  return microseconds / 29 / 2;
}



------------------------------------------------------------
line notify : https://notify-bot.line.me/th/ URL Decoder https://meyerweb.com/eric/tools/dencoder/ โค้ด https://www.facebook.com/223683641421434/posts/622606241529170/


-------------------------------------------------
โค้ด 2
void Line_Notify1(String message1) ;
#include <ESP8266WiFi.h>
#define WIFI_SSID "MR DOM" /////////////*************แก้
#define WIFI_PASSWORD "audomidea2021"////////**************แก้
#define LINE_TOKEN_PIR "nd6z68kfsOW8BpoETcPniQGNOnTfDLXeQvkGHLGnTnf"////***************แก้
#define PirPin D7

String message1 = "%E0%B9%84%E0%B8%94%E0%B9%89%E0%B8%A3%E0%B8%B1%E0%B8%9A%E0%B8%88%E0%B8%94%E0%B8%AB%E0%B8%A1%E0%B8%B2%E0%B8%A2";//****************แก้
bool beep_state = false;
bool send_state = false;
uint32_t ts, ts1, ts2;
void setup() {
  Serial.begin(115200);
  Serial.println();
  pinMode(PirPin, INPUT);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);
 
  Serial.println("connecting");
  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("connecting");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(10);
  }
  Serial.println();
  Serial.print("connected: ");
  Serial.println(WiFi.localIP());
  delay(100);
  Serial.println("Pir Ready!!");
  ts = ts1 = ts2 = millis();
}
void loop() {

  if ((digitalRead(PirPin) == HIGH) && (beep_state == false) && (WiFi.status() == WL_CONNECTED)) {
    while (digitalRead(PirPin) == HIGH) delay(100);
    Serial.println("Detect !");
    Line_Notify1(message1);
    beep_state = true;
  }
  delay(10);
}
void Line_Notify1(String message) {
  WiFiClientSecure client;
  if (!client.connect("notify-api.line.me", 443)) {
    Serial.println("connection failed");
    delay(2000);
    return;
  }
  String req = "";
  req += "POST /api/notify HTTP/1.1\r\n";
  req += "Host: notify-api.line.me\r\n";
  req += "Authorization: Bearer " + String(LINE_TOKEN_PIR) + "\r\n";
  req += "Cache-Control: no-cache\r\n";
  req += "User-Agent: ESP8266\r\n";
  req += "Content-Type: application/x-www-form-urlencoded\r\n";
  req += "Content-Length: " + String(String("message=" + message1).length()) + "\r\n";
  req += "\r\n";
  req += "message=" + message1;
  // Serial.println(req);
  client.print(req);
  delay(20);
  while (client.connected()) {
    String line = client.readStringUntil('\n');
    if (line == "\r") {
      break;
    }
  }
}








 

วันจันทร์ที่ 14 กุมภาพันธ์ พ.ศ. 2565

กิจกรรม แนวกันเด็กแนว

 กิจกรรม   "แนวกันเด็กแนว"



อุปกรณ์ที่ใช้
1.เซนเซอร์วัดระยะทาง Ultrasonic Module HC-SR04
2.
 SG90 Servo Motor 0-180 องศา
3.
Arduino nano
4.สาจั๊มเปอร์หัวแจ็คเมีย-เมีย


โปรแกรมที่ใช้เขียนคำสั่ง  
Arduino IDE

โค้ด

#define Trig 2

#define Echo 3

#include <Servo.h> 

Servo myservo;

long duration;

int distance;


///////////////////////////////////////////////////

void setup() {

 myservo.attach(A1); 

  pinMode(Trig, OUTPUT);

  pinMode(Echo, INPUT);

}


///////////////////////////////////////////////////

void loop() {

  digitalWrite(Trig, LOW);

  delayMicroseconds(5);

  digitalWrite(Trig, HIGH);

  delayMicroseconds(10);

  digitalWrite(Trig, LOW);

  duration = pulseIn(Echo, HIGH);

  distance = duration * 0.034 / 2;

///////////////////////////////////////////////////

  

  if (distance <= 40)

  { 

    myservo.write(90); 

    delay(3000);


  }

  else {

    myservo.write(0); 

    delay(300);

  

        }

}



เรียนรู้การเป็นนักประดิษฐ์ ด้วยสิ่งประดิษฐ์อัตโนมัติ

 เรียนรู้การเป็นนักประดิษฐ์ ด้วยสิ่งประดิษฐ์อัตโนมัติ

เรียนรู้  ฮาร์ดแวร์
องค์ประกอบ ของฮาร์ดแวร์
  
Input  -  processor  - Output
Input

1.เซนเซอร์วัดระยะทาง Ultrasonic Module HC-SR04



2.เซนเซอร์วัดความชื้น Soil Moisture Sensor Module v1



Output
1. SG90 Servo Motor 0-180 องศา
2.หลอดไฟ LED
3.บัสเซอร์



Processor (หน่วยประมวลผลกลาง)
Arduino nano



เรียนรู้  ซอฟแวร์”  Auduino IDE 



ดาวน์โหลดโปรแกรม >>คลิ๊กที่นี่ครัช<<  

-----------------------------------------------------------------------------------------------------------------------------





วันศุกร์ที่ 19 กุมภาพันธ์ พ.ศ. 2564

โค้ด ค่ายนักประดิษฐ์ IOT

- เขียนคำสั่ง LED

เซนเซอร์ตรวจจับสิ่งแวดล้อมและแจ้งเตือนเข้ามือถือ

 line notify

URL Decoder

โค้ด
void Line_Notify1(String message1) ; #include <ESP8266WiFi.h> #define WIFI_SSID "Oppo F9" /////////////*************แก้ #define WIFI_PASSWORD "guy12345"////////**************แก้ #define LINE_TOKEN_PIR "7UNkJqhlAP7PxoWCQLW1qrnZZSRhVm9FpimZAcuPgjK"////***************แก้ #define PirPin D6 String message1 = "%E0%B9%84%E0%B8%94%E0%B9%89%E0%B8%A3%E0%B8%B1%E0%B8%9A%E0%B8%88%E0%B8%94%E0%B8%AB%E0%B8%A1%E0%B8%B2%E0%B8%A2";//****************แก้ bool beep_state = false; bool send_state = false; uint32_t ts, ts1, ts2; void setup() { Serial.begin(115200); Serial.println(); pinMode(PirPin, INPUT); pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH); Serial.println("connecting"); WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.print("connecting"); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(); Serial.print("connected: "); Serial.println(WiFi.localIP()); delay(10000); Serial.println("Pir Ready!!"); ts = ts1 = ts2 = millis(); } void loop() { ts = millis(); if (WiFi.status() == WL_CONNECTED) { digitalWrite(LED_BUILTIN, LOW); } else { digitalWrite(LED_BUILTIN, HIGH); } if ((ts - ts1 >= 5000) && (beep_state == true)) { beep_state = false; } if ((digitalRead(PirPin) == HIGH) && (beep_state == false) && (WiFi.status() == WL_CONNECTED)) { while (digitalRead(PirPin) == HIGH) delay(100); Serial.println("Detect !"); Line_Notify1(message1); beep_state = true; } delay(10); } void Line_Notify1(String message) { WiFiClientSecure client; if (!client.connect("notify-api.line.me", 443)) { Serial.println("connection failed"); delay(2000); return; } String req = ""; req += "POST /api/notify HTTP/1.1\r\n"; req += "Host: notify-api.line.me\r\n"; req += "Authorization: Bearer " + String(LINE_TOKEN_PIR) + "\r\n"; req += "Cache-Control: no-cache\r\n"; req += "User-Agent: ESP8266\r\n"; req += "Content-Type: application/x-www-form-urlencoded\r\n"; req += "Content-Length: " + String(String("message=" + message1).length()) + "\r\n"; req += "\r\n"; req += "message=" + message1; // Serial.println(req); client.print(req); delay(20); while (client.connected()) { String line = client.readStringUntil('\n'); if (line == "\r") { break; } } }

ควบคุมมอเตอร์และหลอดไฟ ผ่านมือถือ

#define BLYNK_PRINT Serial 

#include <ESP8266WiFi.h> 

#include <BlynkSimpleEsp8266.h> 

#define ON LOW

#define OFF HIGH

char auth[] = "M-Ee2Vubx7Pf5DbN8_5SFvSAjkSCNB_0"; 

char ssid[] = "";

char pass[] = "";


void setup()

{


Serial.begin(9600); 

Blynk.begin(auth, "Audom","audomidea2019"); 


}


void loop()

{

Blynk.run();

}