0% found this document useful (0 votes)
183 views11 pages

Coding Program Arduino

The document contains a program for controlling a crane system using an ESP microcontroller, including motor control, load measurement, and a web server interface. It defines various pins for components like motors, buttons, and sensors, and includes functions for handling user input and managing motor operations based on load readings. The program also sets up a WiFi access point for remote control and monitoring of the crane's speed and load status.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
183 views11 pages

Coding Program Arduino

The document contains a program for controlling a crane system using an ESP microcontroller, including motor control, load measurement, and a web server interface. It defines various pins for components like motors, buttons, and sensors, and includes functions for handling user input and managing motor operations based on load readings. The program also sets up a WiFi access point for remote control and monitoring of the crane's speed and load status.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 11

PROGRAM

//------------------------------------------------------------------------------

// Library File

#include "esp_timer.h"

#include "WiFi.h"

#include "WiFiClient.h"

#include "WebServer.h"

#include "HX711.h"

//----------------------------------------------------

// Difinisikan PIN

#define BUZZER 23

#define HX_OUT 19

#define HX_SCK 18

#define SW_UP 22

#define SW_DOWN 21

#define SW_RIGHT 16

#define SW_LEFT 4

#define LED 15

#define STEP1 13

#define DIR1 12

#define STEP2 14

#define DIR2 27

#define MTRA 25

#define MTRB 33

#define MPWM 26

#define PC Serial
// Difinisikan Nilai / Logika

#define ON 1

#define OFF 0

#define PRESSED 0

#define UNPRESSED 1

#define MAX_SPEED_CRANE 2000 // Delay

#define MIN_SPEED_CRANE 10000 // SEmakin kecil sematin kenceng

#define HX_CALIBRATE 125

//----------------------------------------------------

// Variable Global

int speed_crane = 50, speed_catrol = 50, load, limit_load = 500;

int motor_pwm;

bool button_up = 1, button_down = 1, button_right = 1;

bool button_pullup = 1, button_pulldown = 1, button_left = 1;

double tick_load, stepper_delay;

hw_timer_t* Mytimer = NULL;

//----------------------------------------------------

// Variable Setting

const char* ap_ssid = "RivoCrane";

const char* ap_pass = "1234567890";

IPAddress ap_ip(10, 10, 10, 10);

IPAddress ap_gateway(10, 10, 10, 1);

IPAddress ap_subnet(255, 255, 255, 0);

WebServer server(80);

HX711 loadcell;

//------------------------------------------------------------------------------

void IRAM_ATTR periodeInterrupt() {


// Motor Stepper

static double tick_motor, tick_switch;

stepper_delay = map(speed_crane, 0, 100, MIN_SPEED_CRANE, MAX_SPEED_CRANE);

// Tentukan Arah Putaran Motor

if (button_up == PRESSED) digitalWrite(DIR1, ON);

else if (button_down == PRESSED) digitalWrite(DIR1, OFF);

if (button_right == PRESSED) digitalWrite(DIR2, ON);

else if (button_left == PRESSED) digitalWrite(DIR2, OFF);

// Limit Switch

if (millis() - tick_switch > 100) {

if (digitalRead(SW_UP) == PRESSED && button_up == PRESSED) speed_crane = 0;

else if (digitalRead(SW_DOWN) == PRESSED && button_down == PRESSED) speed_crane = 0;

else if (digitalRead(SW_RIGHT) == PRESSED && button_right == PRESSED) speed_crane = 0;

else if (digitalRead(SW_LEFT) == PRESSED && button_left == PRESSED) speed_crane = 0;

else tick_switch = millis();

// Jalankan Motor Stepper

if (speed_crane > 0) {

if (micros() - tick_motor > stepper_delay * 2) {

tick_motor = micros();

} else if (micros() - tick_motor < stepper_delay) {

if (button_up == PRESSED || button_down == PRESSED) digitalWrite(STEP1, ON);

if (button_right == PRESSED || button_left == PRESSED) digitalWrite(STEP2, ON);

} else if (micros() - tick_motor > stepper_delay) {

if (button_up == PRESSED || button_down == PRESSED) digitalWrite(STEP1, OFF);

if (button_right == PRESSED || button_left == PRESSED) digitalWrite(STEP2, OFF);


}

//------------------------------------------------------------------------------

void setup() {

// Mulai Serial ke PC

PC.begin(9600); // Baudrate 9600

// TImer Interupt

Mytimer = timerBegin(0, 80, true);

timerAttachInterrupt(Mytimer, &periodeInterrupt, true);

timerAlarmWrite(Mytimer, 1000, true); // per 1 micro second

timerAlarmEnable(Mytimer);

// Mulai HX711

loadcell.begin(HX_OUT, HX_SCK);

loadcell.set_scale(HX_CALIBRATE);

loadcell.tare();

// Pin Mode

pinMode(BUZZER, OUTPUT);

pinMode(LED, OUTPUT);

pinMode(STEP1, OUTPUT);

pinMode(STEP2, OUTPUT);

pinMode(DIR1, OUTPUT);

pinMode(DIR2, OUTPUT);

pinMode(MTRA, OUTPUT);

pinMode(MTRB, OUTPUT);

pinMode(MPWM, OUTPUT);
pinMode(SW_UP, INPUT_PULLUP);

pinMode(SW_DOWN, INPUT);

pinMode(SW_LEFT, INPUT_PULLUP);

pinMode(SW_RIGHT, INPUT_PULLUP);

ledcSetup(0, 5000, 8);

ledcAttachPin(MPWM, 0);

// AP Mode Server

WiFi.mode(WIFI_AP); // Mode AP

WiFi.softAPConfig(ap_ip, ap_gateway, ap_subnet); // Setting IP AP

WiFi.softAP(ap_ssid, ap_pass); // Set AP SSID dan Pass

server.on("/", handleIndex); // GET Handle root / Index

server.begin(); // Start SErver

beep(3, 100);

//------------------------------------------------------------------------------

void loop() {

if (millis() - tick_load > 1000) {

load = loadcell.get_units(1);

tick_load = millis();

// Jika Limit Bata Beban

if (load > limit_load) {

while (1) {

// Baca Loadcell
load = loadcell.get_units(1);

// Jika sudah kurang dari 10 gram

if (load <= 10) {

// Keluar

break;

digitalWrite(BUZZER, ON);

// Motor Turun

digitalWrite(MTRA, OFF);

digitalWrite(MTRB, ON);

ledcWrite(0, 255);

// Jeda

delay(100);

// Motor Stop

digitalWrite(MTRA, OFF);

digitalWrite(MTRB, OFF);

ledcWrite(0, 0);

digitalWrite(BUZZER, OFF);

// Motor DC

motor_pwm = map(speed_catrol, 0, 100, 190, 255);

if (button_pullup == PRESSED) {

digitalWrite(MTRA, ON);

digitalWrite(MTRB, OFF);

ledcWrite(0, motor_pwm);

} else if (button_pulldown == PRESSED) {


digitalWrite(MTRA, OFF);

digitalWrite(MTRB, ON);

ledcWrite(0, motor_pwm);

} else {

digitalWrite(MTRA, OFF);

digitalWrite(MTRB, OFF);

ledcWrite(0, 0);

debugPC(100);

server.handleClient();

//------------------------------------------------------------------------------
FUNGSI

//------------------------------------------------------------------------------

// Handle Akses Index, baca segala bentuk POST / GET

void handleIndex() {

if (server.arg("up") != "") button_up = server.arg("up").toInt();

if (server.arg("down") != "") button_down = server.arg("down").toInt();

if (server.arg("left") != "") button_left = server.arg("left").toInt();

if (server.arg("right") != "") button_right = server.arg("right").toInt();

if (server.arg("pullup") != "") button_pullup = server.arg("pullup").toInt();

if (server.arg("pulldown") != "") button_pulldown = server.arg("pulldown").toInt();

if (server.arg("speed_crane") != "") {

if (server.arg("speed_crane").toInt() != speed_crane) speed_crane = server.arg("speed_crane").toInt();

if (server.arg("speed_catrol") != "") {

if (server.arg("speed_catrol").toInt() != speed_catrol) speed_catrol = server.arg("speed_catrol").toInt();

if (server.arg("limit_load") != "") {

if (server.arg("limit_load").toInt() != limit_load) limit_load = server.arg("limit_load").toInt();

if (server.arg("tare") != "") {

if (server.arg("tare").toInt() == PRESSED) {

PC.println("TARE");

loadcell.tare();

}
String json = "{";

json += "\"speed_crane\":" + String(speed_crane) + ",";

json += "\"speed_catrol\":" + String(speed_catrol) + ",";

json += "\"load\":" + String(load) + ",";

json += "\"limit_load\":" + String(limit_load) + "";

json += "}";

server.send(200, "application/json", json);

//----------------------------------------------------------------------------------

void beep(int counting, int wait) {

if (counting == 0) counting = 1;

for (int i = 0; i < counting; i++) {

digitalWrite(BUZZER, ON);

delay(wait);

digitalWrite(BUZZER, OFF);

delay(wait);

//------------------------------------------------------------------------------

void debugPC(int interval_debug) {

static double tick_debug;

if (millis() - tick_debug > interval_debug) {

PC.print("Speed Crane: ");

PC.print(speed_crane);

PC.print(", Speed Catrol: ");

PC.print(speed_catrol);

PC.print(", Load: ");

PC.print(load);
PC.print(", Limit Load: ");

PC.print(limit_load);

// PC.print("us, Up: ");

// PC.print(button_up);

// PC.print(", Down: ");

// PC.print(button_down);

// PC.print(", Left: ");

// PC.print(button_left);

// PC.print(", Right: ");

// PC.print(button_right);

// PC.print(", Pull Up: ");

// PC.print(button_pullup);

// PC.print(", Pull Down: ");

// PC.print(button_pulldown);

Serial.print(F(", SW UP: "));

Serial.print(digitalRead(SW_UP));

Serial.print(F(", SW DN: "));

Serial.print(digitalRead(SW_DOWN));

Serial.print(F(", SW LF: "));

Serial.print(digitalRead(SW_LEFT));

Serial.print(F(", SW RG: "));

Serial.print(digitalRead(SW_RIGHT));

PC.println();

tick_debug = millis();

}
//------------------------------------------------------------------------------

You might also like