Skip to main content

Bagaimana Cara Membuat CNC dengan menggunakan Arduino

loading...
Membuat CNC dengan menggunakan Arduino
Proyek ini adalah tentang Bagaimana membuat mesin CNC mini dari OLD SCRAP DVD Drives menggunakan Arduino sebagai otak dari mesin CNC mini ini dan L293D Motor shield digunakan sebagai driver penggerak motor itu sendiri.

Sangat menakjubkan melihat bagaimana mesin kecil ini menggambar gambar dengan sangat baik dengan akurasi yang baik.

Pada dasarnya semua gambar yang ingin Anda gambar dengan mesin ini perlu dikonversi dalam file Gcode menggunakan INKSCAPE SOFTWARE.

aliran Gcode ini pada arduino melalui pemrosesan program GCTRL.

dan L293D Perisai motor sesuai dengan instruksi motor stepper cara memindahkan, menggabungkan dan menyinkronkan gerakan steppers berakhir dengan gambar yang bagus.

Mesin ini memiliki dua sumbu X-AXIS & Y-AXIS.

Sumbu X adalah merencanakan, kertas ditempatkan pada sumbu X.

Sumbu Y memegang pulpen.
Untuk lebih jelasnya anda dapat melihat gambar ilustrasi di bawah ini!!!


Untuk lebih jelasnya anda dapat menonton video di bawah ini!!!

Selain itu saya juga telah menyertakan code arduino dan juga code Java untuk anda gunakan dalam mebuat projek ini!!!.


Di bawah ini adalah Code Arduino untuk membuat projek CNC ini!!




/* 
 https://www.youtube.com/watch?v=opZ9RgmOIpc
  */

#include <Servo.h>
#include <AFMotor.h>

#define LINE_BUFFER_LENGTH 512

char STEP = MICROSTEP ;

// Servo position for Up and Down 
const int penZUp = 115;
const int penZDown = 83;

// Servo on PWM pin 10
const int penServoPin =10 ;

// Should be right for DVD steppers, but is not too important here
const int stepsPerRevolution = 48; 

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

// Initialize steppers for X- and Y-axis using this Arduino pins for the L293D H-bridge
AF_Stepper myStepperY(stepsPerRevolution,1);            
AF_Stepper myStepperX(stepsPerRevolution,2);  

/* Structures, global variables    */
struct point { 
  float x; 
  float y; 
  float z; 
};

// Current position of plothead
struct point actuatorPos;

//  Drawing settings, should be OK
float StepInc = 1;
int StepDelay = 0;
int LineDelay =0;
int penDelay = 50;

// Motor steps to go 1 millimeter.
// Use test sketch to go 100 steps. Measure the length of line. 
// Calculate steps per mm. Enter here.
float StepsPerMillimeterX = 100.0;
float StepsPerMillimeterY = 100.0;

// Drawing robot limits, in mm
// OK to start with. Could go up to 50 mm if calibrated well. 
float Xmin = 0;
float Xmax = 40;
float Ymin = 0;
float Ymax = 40;
float Zmin = 0;
float Zmax = 1;

float Xpos = Xmin;
float Ypos = Ymin;
float Zpos = Zmax; 

// Set to true to get debug output.
boolean verbose = false;

//  Needs to interpret 
//  G1 for moving
//  G4 P300 (wait 150ms)
//  M300 S30 (pen down)
//  M300 S50 (pen up)
//  Discard anything with a (
//  Discard any other command!

/**********************
 * void setup() - Initialisations
 ***********************/
void setup() {
  //  Setup
  
  Serial.begin( 9600 );
  
  penServo.attach(penServoPin);
  penServo.write(penZUp);
  delay(100);

  // Decrease if necessary
  myStepperX.setSpeed(600);

  myStepperY.setSpeed(600);  
  

  //  Set & move to initial default position
  // TBD

  //  Notifications!!!
  Serial.println("Mini CNC Plotter alive and kicking!");
  Serial.print("X range is from "); 
  Serial.print(Xmin); 
  Serial.print(" to "); 
  Serial.print(Xmax); 
  Serial.println(" mm."); 
  Serial.print("Y range is from "); 
  Serial.print(Ymin); 
  Serial.print(" to "); 
  Serial.print(Ymax); 
  Serial.println(" mm."); 
}

/**********************
 * void loop() - Main loop
 ***********************/
void loop() 
{
  
  delay(100);
  char line[ LINE_BUFFER_LENGTH ];
  char c;
  int lineIndex;
  bool lineIsComment, lineSemiColon;

  lineIndex = 0;
  lineSemiColon = false;
  lineIsComment = false;

  while (1) {

    // Serial reception - Mostly from Grbl, added semicolon support
    while ( Serial.available()>0 ) {
      c = Serial.read();
      if (( c == '\n') || (c == '\r') ) {             // End of line reached
        if ( lineIndex > 0 ) {                        // Line is complete. Then execute!
          line[ lineIndex ] = '\0';                   // Terminate string
          if (verbose) { 
            Serial.print( "Received : "); 
            Serial.println( line ); 
          }
          processIncomingLine( line, lineIndex );
          lineIndex = 0;
        } 
        else { 
          // Empty or comment line. Skip block.
        }
        lineIsComment = false;
        lineSemiColon = false;
        Serial.println("ok");    
      } 
      else {
        if ( (lineIsComment) || (lineSemiColon) ) {   // Throw away all comment characters
          if ( c == ')' )  lineIsComment = false;     // End of comment. Resume line.
        } 
        else {
          if ( c <= ' ' ) {                           // Throw away whitepace and control characters
          } 
          else if ( c == '/' ) {                    // Block delete not supported. Ignore character.
          } 
          else if ( c == '(' ) {                    // Enable comments flag and ignore all characters until ')' or EOL.
            lineIsComment = true;
          } 
          else if ( c == ';' ) {
            lineSemiColon = true;
          } 
          else if ( lineIndex >= LINE_BUFFER_LENGTH-1 ) {
            Serial.println( "ERROR - lineBuffer overflow" );
            lineIsComment = false;
            lineSemiColon = false;
          } 
          else if ( c >= 'a' && c <= 'z' ) {        // Upcase lowercase
            line[ lineIndex++ ] = c-'a'+'A';
          } 
          else {
            line[ lineIndex++ ] = c;
          }
        }
      }
    }
  }
}

void processIncomingLine( char* line, int charNB ) {
  int currentIndex = 0;
  char buffer[ 64 ];                                 // Hope that 64 is enough for 1 parameter
  struct point newPos;

  newPos.x = 0.0;
  newPos.y = 0.0;

  //  Needs to interpret 
  //  G1 for moving
  //  G4 P300 (wait 150ms)
  //  G1 X60 Y30
  //  G1 X30 Y50
  //  M300 S30 (pen down)
  //  M300 S50 (pen up)
  //  Discard anything with a (
  //  Discard any other command!

  while( currentIndex < charNB ) {
    switch ( line[ currentIndex++ ] ) {              // Select command, if any
    case 'U':
      penUp(); 
      break;
    case 'D':
      penDown(); 
      break;
    case 'G':
      buffer[0] = line[ currentIndex++ ];          // /!\ Dirty - Only works with 2 digit commands
      //      buffer[1] = line[ currentIndex++ ];
      //      buffer[2] = '\0';
      buffer[1] = '\0';

      switch ( atoi( buffer ) ){                   // Select G command
      case 0:                                   // G00 & G01 - Movement or fast movement. Same here
      case 1:
        // /!\ Dirty - Suppose that X is before Y
        char* indexX = strchr( line+currentIndex, 'X' );  // Get X/Y position in the string (if any)
        char* indexY = strchr( line+currentIndex, 'Y' );
        if ( indexY <= 0 ) {
          newPos.x = atof( indexX + 1); 
          newPos.y = actuatorPos.y;
        } 
        else if ( indexX <= 0 ) {
          newPos.y = atof( indexY + 1);
          newPos.x = actuatorPos.x;
        } 
        else {
          newPos.y = atof( indexY + 1);
          indexY = '\0';
          newPos.x = atof( indexX + 1);
        }
        drawLine(newPos.x, newPos.y );
        //        Serial.println("ok");
        actuatorPos.x = newPos.x;
        actuatorPos.y = newPos.y;
        break;
      }
      break;
    case 'M':
      buffer[0] = line[ currentIndex++ ];        // /!\ Dirty - Only works with 3 digit commands
      buffer[1] = line[ currentIndex++ ];
      buffer[2] = line[ currentIndex++ ];
      buffer[3] = '\0';
      switch ( atoi( buffer ) ){
      case 300:
        {
          char* indexS = strchr( line+currentIndex, 'S' );
          float Spos = atof( indexS + 1);
          //         Serial.println("ok");
          if (Spos == 30) { 
            penDown(); 
          }
          if (Spos == 50) { 
            penUp(); 
          }
          break;
        }
      case 114:                                // M114 - Repport position
        Serial.print( "Absolute position : X = " );
        Serial.print( actuatorPos.x );
        Serial.print( "  -  Y = " );
        Serial.println( actuatorPos.y );
        break;
      default:
        Serial.print( "Command not recognized : M");
        Serial.println( buffer );
      }
    }
  }



}


/*********************************
 * Draw a line from (x0;y0) to (x1;y1).
 * int (x1;y1) : Starting coordinates
 * int (x2;y2) : Ending coordinates
 **********************************/
void drawLine(float x1, float y1) {

  if (verbose)
  {
    Serial.print("fx1, fy1: ");
    Serial.print(x1);
    Serial.print(",");
    Serial.print(y1);
    Serial.println("");
  }  

  //  Bring instructions within limits
  if (x1 >= Xmax) { 
    x1 = Xmax; 
  }
  if (x1 <= Xmin) { 
    x1 = Xmin; 
  }
  if (y1 >= Ymax) { 
    y1 = Ymax; 
  }
  if (y1 <= Ymin) { 
    y1 = Ymin; 
  }

  if (verbose)
  {
    Serial.print("Xpos, Ypos: ");
    Serial.print(Xpos);
    Serial.print(",");
    Serial.print(Ypos);
    Serial.println("");
  }

  if (verbose)
  {
    Serial.print("x1, y1: ");
    Serial.print(x1);
    Serial.print(",");
    Serial.print(y1);
    Serial.println("");
  }

  //  Convert coordinates to steps
  x1 = (int)(x1*StepsPerMillimeterX);
  y1 = (int)(y1*StepsPerMillimeterY);
  float x0 = Xpos;
  float y0 = Ypos;

  //  Let's find out the change for the coordinates
  long dx = abs(x1-x0);
  long dy = abs(y1-y0);
  int sx = x0<x1 ? StepInc : -StepInc;
  int sy = y0<y1 ? StepInc : -StepInc;

  long i;
  long over = 0;

  if (dx > dy) {
    for (i=0; i<dx; ++i) {
      myStepperX.onestep(sx,STEP);
      over+=dy;
      if (over>=dx) {
        over-=dx;
        myStepperY.onestep(sy,STEP);
      }
    delay(StepDelay);
    }
  }
  else {
    for (i=0; i<dy; ++i) {
      myStepperY.onestep(sy,STEP);
      over+=dx;
      if (over>=dy) {
        over-=dy;
        myStepperX.onestep(sx,STEP);
      }
      delay(StepDelay);
    }    
  }

  if (verbose)
  {
    Serial.print("dx, dy:");
    Serial.print(dx);
    Serial.print(",");
    Serial.print(dy);
    Serial.println("");
  }

  if (verbose)
  {
    Serial.print("Going to (");
    Serial.print(x0);
    Serial.print(",");
    Serial.print(y0);
    Serial.println(")");
  }

  //  Delay before any next lines are submitted
  delay(LineDelay);
  //  Update the positions
  Xpos = x1;
  Ypos = y1;
}

//  Raises pen
void penUp() { 
  penServo.write(penZUp); 
  delay(penDelay); 
  Zpos=Zmax; 
  digitalWrite(15, LOW);
    digitalWrite(16, HIGH);
  if (verbose) { 
    Serial.println("Pen up!"); 
    
  } 
}
//  Lowers pen
void penDown() { 
  penServo.write(penZDown); 
  delay(penDelay); 
  Zpos=Zmin; 
  digitalWrite(15, HIGH);
    digitalWrite(16, LOW);
  if (verbose) { 
    Serial.println("Pen down."); 
    
    
  } 
}

Dan Ini Adalah Code GCTRL yang dapat di buat dengan pemerograman java processing IDE


import java.awt.event.KeyEvent;
import javax.swing.JOptionPane;
import processing.serial.*;

Serial port = null;

// select and modify the appropriate line for your operating system
// leave as null to use interactive port (press 'p' in the program)
String portname = null;
//String portname = Serial.list()[0]; // Mac OS X
//String portname = "/dev/ttyUSB0"; // Linux
//String portname = "COM6"; // Windows

boolean streaming = false;
float speed = 0.001;
String[] gcode;
int i = 0;

void openSerialPort()
{
  if (portname == null) return;
  if (port != null) port.stop();
  
  port = new Serial(this, portname, 9600);
  
  port.bufferUntil('\n');
}

void selectSerialPort()
{
  String result = (String) JOptionPane.showInputDialog(this,
    "Select the serial port that corresponds to your Arduino board.",
    "Select serial port",
    JOptionPane.PLAIN_MESSAGE,
    null,
    Serial.list(),
    0);
    
  if (result != null) {
    portname = result;
    openSerialPort();
  }
}

void setup()
{
  size(500, 250);
  openSerialPort();
}

void draw()
{
  background(0);  
  fill(255);
  int y = 24, dy = 12;
  text("INSTRUCTIONS", 12, y); y += dy;
  text("p: select serial port", 12, y); y += dy;
  text("1: set speed to 0.001 inches (1 mil) per jog", 12, y); y += dy;
  text("2: set speed to 0.010 inches (10 mil) per jog", 12, y); y += dy;
  text("3: set speed to 0.100 inches (100 mil) per jog", 12, y); y += dy;
  text("arrow keys: jog in x-y plane", 12, y); y += dy;
  text("page up & page down: jog in z axis", 12, y); y += dy;
  text("$: display grbl settings", 12, y); y+= dy;
  text("h: go home", 12, y); y += dy;
  text("0: zero machine (set home to the current location)", 12, y); y += dy;
  text("g: stream a g-code file", 12, y); y += dy;
  text("x: stop streaming g-code (this is NOT immediate)", 12, y); y += dy;
  y = height - dy;
  text("current jog speed: " + speed + " inches per step", 12, y); y -= dy;
  text("current serial port: " + portname, 12, y); y -= dy;
}

void keyPressed()
{
  if (key == '1') speed = 0.001;
  if (key == '2') speed = 0.01;
  if (key == '3') speed = 0.1;
  
  if (!streaming) {
    if (keyCode == LEFT) port.write("G91\nG20\nG00 X-" + speed + " Y0.000 Z0.000\n");
    if (keyCode == RIGHT) port.write("G91\nG20\nG00 X" + speed + " Y0.000 Z0.000\n");
    if (keyCode == UP) port.write("G91\nG20\nG00 X0.000 Y" + speed + " Z0.000\n");
    if (keyCode == DOWN) port.write("G91\nG20\nG00 X0.000 Y-" + speed + " Z0.000\n");
    if (keyCode == KeyEvent.VK_PAGE_UP) port.write("G91\nG20\nG00 X0.000 Y0.000 Z" + speed + "\n");
    if (keyCode == KeyEvent.VK_PAGE_DOWN) port.write("G91\nG20\nG00 X0.000 Y0.000 Z-" + speed + "\n");
    if (key == 'h') port.write("G90\nG20\nG00 X0.000 Y0.000 Z0.000\n");
    if (key == 'v') port.write("$0=75\n$1=74\n$2=75\n");
    //if (key == 'v') port.write("$0=100\n$1=74\n$2=75\n");
    if (key == 's') port.write("$3=10\n");
    if (key == 'e') port.write("$16=1\n");
    if (key == 'd') port.write("$16=0\n");
    if (key == '0') openSerialPort();
    if (key == 'p') selectSerialPort();
    if (key == '$') port.write("$$\n");
  }
  
  if (!streaming && key == 'g') {
    gcode = null; i = 0;
    File file = null; 
    println("Loading file...");
    selectInput("Select a file to process:", "fileSelected", file);
  }
  
  if (key == 'x') streaming = false;
}

void fileSelected(File selection) {
  if (selection == null) {
    println("Window was closed or the user hit cancel.");
  } else {
    println("User selected " + selection.getAbsolutePath());
    gcode = loadStrings(selection.getAbsolutePath());
    if (gcode == null) return;
    streaming = true;
    stream();
  }
}

void stream()
{
  if (!streaming) return;
  
  while (true) {
    if (i == gcode.length) {
      streaming = false;
      return;
    }
    
    if (gcode[i].trim().length() == 0) i++;
    else break;
  }
  
  println(gcode[i]);
  port.write(gcode[i] + '\n');
  i++;
}

void serialEvent(Serial p)
{
  String s = p.readStringUntil('\n');
  println(s.trim());
  
  if (s.trim().startsWith("ok")) stream();
  if (s.trim().startsWith("error")) stream(); // XXX: really?
}

loading...

Comments

POSTINGAN POPULER

Monitoring Temperatur suhu ruangan dan Kelembabpan Menggunakan Thingspeak

Monitoring Temperatur suhu ruangan dan kelembabpan menggunakan thingspeak Bisanya ketika duduk di kamar atau ruang tamu perubahan suhu yang terjadi terasa begitu aneh. Sebenarnya berapa sih suhu rungan dalam kamar tersbut? Hal ini yang membuat saya terdorong untuk membuat alat yang dapat memonitoring suhu ruangan dengan menggunakan thisngspeak. Apa sih kompen-komponen yang saya gunakan untuk membuat projek ini ?? Disini saya akan menggunakan DHT11 untuk merasakan kelembaban, BMP180 untuk merasakan suhu dan tekanan dan Resistor Pengendalian Cahaya (LDR) untuk mendapatkan gambaran kasar tentang intensitas cahaya. Arduino nano akan mengumpulkan data dari sensor ini dan mengirim ke ESP8266 untuk mengunggahnya ke saluran pribadi Anda di thingspeak.com. Kami akan menyalakan Arduino nano kami dari adaptor dinding 12V-2A, sensor dan ESP8266 akan menerima tegangan yang diubah dari LM2596 berdasarkan buck converter. Daftar komponen: BMP180 tekanan dan sensor suhu, Sensor ...

Biodata Lengkap Ceng Zam-Zam

 Asalamualaikum,. Hallo Sazam comunity dan para sobat-sobat ku, Sekarang saya mau menulis nieh beberapa Info dan Biodata Ceng zamzam, "Lupa sama temen tuh hal biasa, tapi kalo Lupa sama Ceng zamzam Mana Bisa?" bner gak? hhe.. jangan lupa yah mampir terus ke blog ini.. ya sudahlah Ayo kita Lihat-Lihat Nieh biodata dan Info tentang Ceng Zamzam   Nama Lengkap : Ahmad Zamzam Zainal Mutaqin  Nama Panggilan : Ceng zamzam Atau Azam  Kelas : 10 berinjak ke 11  Anak ke : 1 dari 3 bersaudara Hoby : Mengaji, Olahraga, dll Cita-Cita : Dokter atau Ilmuan T,T,L : Garut,05-Desember-1995 No HP : (0......) Nama Fb : Ceng Zamzam N.twitter : @Ceng Zamzam Alamat    :Kp.Babakan sukaluyu                  Desa.suka Mukti Rt/04 Rw/04                  Kec.Cilawu,Garut-Jawa barat,Indonesia N....

NILAI-NILAI PANCASILA BERWUJUD DAN BERSIFAT FILSAFAT

NILAI-NILAI PANCASILA BERWUJUD DAN BERSIFAT FILSAFAT 1 .     Nilai-Nilai Pancasila Hakikat dan pokok-pokok yang terkandung dalam Pancasila yaitu: 1.   Pancasila sebagai pandangan hidup bangsa, berarti bahwa nilai-nilai yang terkandung dalam Pancasila itu dijadikan dasar dan pedoman dalam mengatur sikap dan tingkah laku manusia Indonesia, dalam hubungannya dengan Tuhan, masyarakat, dan alam semesta. Jadi Pancasila hams tercermin dalam segala bidang kehidupan yang meliputi bidang ekonomi, politik, sosial budaya dan pertahanan dan keamanan 2.             Pancasila sebagai dasar Negara, berarti bahwa nilai-nilai yang terkandung dalam Pancasila itu dijadikan dasar dan pedoman dalam mengatur tata kehidupan bernegara, seperti yang di atur oleh UUD 1945. Untuk kepentingan-kepentingan kegiatan praktis operasional di atur dalam Tap. MPR No. Ill/ MPR/ 2000 tentang Sumber Hukum dan Tata Urutan Perundang-undangan, ...

Macam-macam dan Cara Kerja Sensor Mekanik

Sensor Mechanics Tujuan Umum Setelah mahasiswa mempelajarai bab ini, diharapkan dapat memahami fungsi dan peranan sensor mekanik dalam teknik pengukuran dan pengontrolan sistem di dunianyata dengan baik. Tujuan Khusus Setelah mempelajari topik demi topik dalam bab ini maka diharapkan mahasiswa dapat : 1.     Mengerti tentang macam-macam dan fungsi dari sensor posisi dengan baik. 2.     Mengerti tentang jenis, fungsi dan kegunaan dari sensor kecepatan dalam sistem kendali berumpan balik dengan baik 3.     Mengerti jenis-jenis dan penerapan dari sensor tekanan dalam sistem pengaturan berumpan balik dengan baik 4.     Mengerti macam, fungsi dan kegunaan dari sensor aliran fluida dengan baik 5.     Mengerti tentang macam, fungsi dan penerapan sensor level dalam sistem otomasi industri dengan baik Pendahuluan Pergerakkan mekanis adalah tindakan yang paling banyak dijumpai dalam...

PEMFILTERAN PADA SINYAL WICARA

MODUL 4 PEMFILTERAN PADA SINYAL WICARA I. TUJUAN Mahasiswa mampu menyusun filter digital dan melakukan pemfilteran pada sinyal wicara II.DASAR TEORI 2.1. Filter IIR Yang perlu diingat disini bahwa infinite inpulse response (IIR) dalam hal ini bukan berarti filter yang bekerja dari nilai negatif tak hingga sampai positif tak hingga.Pengertian sederhana untuk infinite impulse respon filter disini adalah bahwa output filtermerupakan fungsi dari kondisi input sekarang, input sebelumnya dan output di waktu sebelumnya. Konsep ini kemudian lebih kita kenal sebagai recursive filter , yang manamelibatkan proses feedback dan feed forward . Dalam bentuk persamaan beda yangmenghubungkan input dengan output dinyatakan seperti persmaaan (1) berikut ini.      …… (1) dimana: - { b k } koefisien feed forward - { a l } koefisien feed back - banyaknya (total koefisien) = M+N+1 - N ditetapkan sebagai orde filter IIR Untuk merealisas...

SAKADANG PEUCANG JEUNG BUAYA

Sakadang Buhaya keur moyan di sisi walungan. Jol sakadang Peucang. “Rék naon Sakdang Peucang ka dieu? Rék maling cai, nya? Di leuweung euweuh cai. Da halodo banget.” Jawab Peucang, “Kuring mah tara nginum deui cai walungan. Komo ayeuna keur saat. Nya teu ngeunah nya loading... kiruh. Ayeuna mah nginum téh cai kalapa. Nya beresih nya ngeunah. Amis.” “Rék naon atuh kadieu?” cék Buhaya. Omong Peucang, “Tadina mah rék ngalalajoan kulit sampéan. Resep ting gareret, hérang. Komo mun katojo ku panonpoé. Euweuh baé nu kulitna alus saperti kulit sampéan. Ngan geuning bet kotor. Pinuh ku leutak.” Omong Buhaya, “Walungan saat. Kuring teu bisa teuteuleuman pikeun meresihan tonggong.” “Emh, lebar. Kulit saalus-alus jadi kotor. Kumaha mun diberesihan ku kuring” ceuk Peucang. “Nya sukur baé ari daek mah,” jawab Buhaya, “kumaha caranya?”, ceuk Buhaya keneh “Kulit tonggong sampéan dikumbah ku kuring. Tapi caina kudu anu beresih. Tuh di tengah!, ceuk Peucang “Pek atuh. G...

CONTO DONGENG SASAKALA

Conto dongeng sasakala Di handap ieu aya sababaraha rupa conto dongeng sasakala di Bahasa sunda. Pek kuhidep klik link di handap ieu sangkan bisa maca carita dina tiap-tiap judul: 1.        Sasakala Gunung Tangkuban Parahu 2.          SasakalaSitu Bagendit 3.          Sasakala Talaga Warna 4.          Sasakala Gunung Gajah 5.        Sasakala Ratna Inten Déwata 6.          Sasakala Cika-Cika Di Cianjur 7.          Sasakala Hayam Pelung 8.          Sasakala Kuda Kosong 9.          Sasakala Béas Pandanwangi 10.      Sasakala Lembur Sabadar 11.      Sasakala Kampung Sodong 12.      Sasakala Leuwi Batok jeung ...

SAKADANG KUYA JEUNG SAKADANG MONYET NGALA CAU

SAWATARA bulan ti harita, pelak cau Sakadang Kuya téh geus baruahan, malah geus arasak. Mimiti kanyahoanana ku Sakadang Monyét. Atuh Sakadang Monyét téh hariweusweus nyaritakeun tangkal cau téa ka Sakadang Kuya. “Ieuh, geuning tangkal cau téh geus buahan. Buahna ogé geus karonéng deuih,” ceuk Sakadang Monyét “Piraku Sakadang Monyét?” “Sumpah. Pan bieu uing ngaliwat ka dinya. Kudu buru-buru diala, bisi kaburu ku cocodot!” “Heug, isukan mah urang ala.” “Keun uing anu ngalana mah, urang taékan. Sakadang Kuya mah cicing wé di handap, da teu bisa naék. Ngan uing ménta nya, apan uing anu ngalana, jeung uing deuih anu pangheulana nganyahoankeun geus asakna ogé! Kuduna mah dibagi dua.” Sakadang Kuya ukur nyenghél ngadéngé omongan Sakadang Monyét kitu téh. Teu némbal. Peutingna, soré kénéh Sakadang Monyét geus saré. Jigana mah capéeun, lantaran beurangna geus liar jauh. Ari Sakadang Kuya mah masih kénéh nyileuk. Keur kitu kadéngé Sakadang Monyét ngalindur, “Isuk...

Sistem Monitoring Dan Pengendalian Beban Daya Listrik Solar Home System (SHS) Menggunakan Mikrokontroler VIA Internet Of Things (IOT)

Pada bab ini akan dijelaskan tentang perancangan system monitoring dan pengendali beban solar home system (SHS) atau pembangkit listrik tenaga surya untuk perumahan. Fungsi dari sistem pengontrolan dan monitoring pada SHS ini yaitu untuk mempermudah pengguna dalam mengatur konsumsi daya yang digunakan sehingga pengguna dapat memaksimalkan pemakaian SHS. Blok diagram merupakan gambaran dasar dari sistem yang akan dirancang. Blok diagram ini dibuat agar mempermudah memahami cara kerja dari sistem yang telah dibuat. Gambar  1. Blok Diagram Sistem Monitoring dan Kontrol SHS     Garis yang berwarna merah merupakan system kerja dari solar home sytem, sedangkan garis yang berwarna biru merupakan alur sistem control dan monitoring SHS. Secara sederhana cara kerja dari solar home system ini adalah sebagai berikut:  1. Panel Surya Panel surya akan mengubah sinar matahari yang mengenai setiap sel surya menjadi arus dan tegangan, namun nilainya tidak k...

Ebook Gratis Pengolahan Citra