Posts tagged ‘Arduino’

Desain SPI Untuk Display Dot Matrix LED


Tulisan ini merupakan kelanjutan dari tulisan sebelumnya.

Prinsip Kerja SPI

Gambar di bawah ini menunjukkan prinsip kerja SPI.

Skema Konsep Cara Kerja SPI
Untuk berkomunikasi, SPI master dan SPI slave masing-masing memiliki shift register yang saling terhubung satu dengan yang lain melalui jalur signal MOSI (master-out-slave-in) dan MISO (master-in-slave-out).

Master dan Slave saling bertukar data dengan menumpangkan data ke shift register dan memberikan sinyal clock melalui jalur sinyal SCK.

Perangkat SPI slave dapat dibuat dengan sebuah rangkaian yang sederhana. Port Serial-in/Parallel-out atau Parallel-in/Serial-out yang biasanya terdiri dari pin kontrol SCK dan SS, shift register dan Latch..

Menghubungkan HC595 Pada SPI

74HC595 memiliki 8-bit shift register dan didalamnya terdapat 8-bit latch, yang cocok untuk mengkonversi dari input serial ke output parallel (lihat blok gambar). Shift register dan latch adalah sinkron terhadap clock sirkuit logik yang independen, dan masing-masingnya beroperasi pada transisi negatif ke positif (positive edge). Clear input dan pengunci keluaran (output enable ) didesain untuk bekerja secara asinkron. Untuk lebih jelasnya, silakan merujuk pada gambar berikut.

Diagram Blok 74HC595

74HC595 state transition table

Input Operation
SER SRCLK /CLR RCLK /OE
X X X X H Qa … Qh pins are in 3-state
X X X X L Qa … Qh pins are driven to the latched value
X X L X X Clear shift register bits
L H X X Shift, with the first bit as 0
H H X X Shift, with the first bit as 1
X X X X Latch shift register bits

Dengan memperhatikan diagram waktu di atas, kita dapat mendesain rangkaian dan setting seperti berikut.

Pertama, bisa kita lihat pada MOSI, master output. Clock HC595 dengan sisi transisi ke positif. Saat bit data

First, let’s see MOSI, the master output. HC595 clocks with a positive edge of shift clock. When a new bit value is set up on the serial input and a positive edge comes in, HC595 takes the bit value into its shift register. Therefore if you connect MOSI to SER input and SCK to SRCLK, you should make its clock settings like

  • Falling edge as leading edge: Setup of MOSI connected to SER.
  • Rising edge as trailing edge: Shift HC595’s shift register

Next, after HC595’s shift register sequentially takes in 8 bits, you should set the latch clock signal to high so that HC595 can capture the shift register bits into the latch logic. The usual design of /SS line (High = “inactive”, Low = “selected”) will work fine if it is connected to RCLK clock input. Note that this setting will give the first bit value to Qh output, and the last bit value to Qa output, meaning “Qh = MSB / Qa = LSB” if MSB is sent out first.


HC595 timing diagram

From that consideration, the following connection between ATmega88 SPI and HC595 will form an 8-bit SPI parallel output.


AVR SPI and HC595 wiring (8 bit)

You should set up AVR(ATmega) SPI like,

  • Clock mode: Mode 3 (leading edge is falling: latch, trailing edge is rising: shift)
  • SPI master operation, /SS as output
  • Data order: MSB first (this depends on your situation. either order will work)

Remember that you need to control the /SS pin by software, just like normal port pins. In AVR SPI master operation with /SS set as output, /SS has nothing to do with SPI master behavior. Even you can use other port pin for the same purpose.

You can increase the number of output bits to 16 bits or 24 bits by a series connection of HC595’s, between each HC595’s serial outputs (Qh’) and next serial inputs (SER). (See the following diagram, or target schematic shown later)


AVR SPI and HC595 wiring (16 bit)

Request Data Ke Web Server dengan Metode POST pada ESP8266


Pada tutorial ini kita akan mencoba membahas tentang penggunaan ESP8266 untuk meminta (request) ke web server. Pada artikel ini metode yang akan digunakan adalah metode POST. Metode ini adalah salah satu metode untuk request data ke web server, karena selain metode POST ada juga metode  GET. Seperti kita ketahui bahwa semua pertukaran data melalui web adalah menggunakan protokol HTTP, nah sekarang apakah yang dimaksud dengan HTTP?

Apakah HTTP?

The Hypertext Transfer Protocol (HTTP) didesain untuk memungkinkan berlangsungnya komunikasi antara client dan server.

HTTP bekerja berdasarkan protokol permintaan-respon (request-response) antara client dan server. Setiap pesan HTTP adalah antara request ataun respon. Pada sebuah server mekanismenya adalah, server akan memperhatikan koneksi request, parsing setiap pesan yang diterima, menginterpretasikan pesan dan mengidentifikasi pesan berdasarkan target request, terakhir adalah merespon request dengan sebuah pesan atau lebih yang sesuai. Pada sisi client akan merekontruksi pesan yang diterima sesuai dengan tujuan komunikasi awal, dan mencoba memeriksa respon server untuk menentukan hasilnya.

Dua Metode HTTP Request: POST dan GET

Pada umumnya metode yang digunakan adalah POST dan GET:

  • POST: request data dari resource tertentu
  • GET: submit data untuk diproses pada resource tertentu

Contoh Coding ESP8266 Menggunakan Metode POST

/*
 * HTTP Client POST Request
 * Copyright (c) 2018, circuits4you.com
 * All rights reserved.
 * https://circuits4you.com 
 * Connects to WiFi HotSpot. 
 * source: https://circuits4you.com/2018/03/10/esp8266-nodemcu-post-request-data-to-website/
 */

#include <ESP8266WiFi.h>
#include <WiFiClient.h> 
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>

/* Set these to your desired credentials. */
const char *ssid = "SSID_NAME";  //Ganti dengan nama SSID
const char *password = "SSID_PASSWORD"; //Ganti dengan password SSID

//Web/Server address to read/write from 
const char *host = "produk-inovatif.com";   //nama website atau IP address dari server

//=======================================================================
//                    Power on setup
//=======================================================================

void setup() {
  delay(1000);
  Serial.begin(115200);
  WiFi.mode(WIFI_OFF);        //Prevents reconnection issue (taking too long to connect)
  delay(1000);
  WiFi.mode(WIFI_STA);        //This line hides the viewing of ESP as wifi hotspot
  
  WiFi.begin(ssid, password);     //Connect to your WiFi router
  Serial.println("");

  Serial.print("Connecting");
  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  //If connection successful show IP address in serial monitor
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());  //IP address assigned to your ESP
}

//=======================================================================
//                    Main Program Loop
//=======================================================================
void loop() {
  HTTPClient http;    //Declare object of class HTTPClient

  String ADCData, ADC2,ADC3, station, postData, ADC4;
  int adcvalue=analogRead(A0);  //Read Analog value of LDR
  
  ADCData = String(adcvalue);   //String to interger conversion
  ADC2 = String(adcvalue*2);   //String to interger conversion
  ADC3 = String(adcvalue*3);   //String to interger conversion
  ADC4 = String(adcvalue*0.5);   //String to interger conversion
  station = "A";

  //Post Data
  postData = "lembab=" + ADCData + "&suhuUdara=" + ADC2 + "&suhuAir=" + ADC3 + "&tinggiAir=" + ADC4 ;
  
  http.begin("http://produk-inovatif.com/esp8266/post_demo.php");              //Specify request destination
  http.addHeader("Content-Type", "application/x-www-form-urlencoded");    //Specify content-type header

  int httpCode = http.POST(postData);   //Send the request
  String payload = http.getString();    //Get the response payload

  Serial.println(httpCode);   //Print HTTP return code
  Serial.println(payload);    //Print request response payload

  http.end();  //Close connection
  
  delay(5000);  //Post Data at every 5 seconds
}
//=======================================================================

Program Pada Sisi Server

<?php
//Creates new record as per request

    //Connect to database
    $servername = "localhost";
    $username = "root";
    $password = "password";
    $dbname = "dbcontoh";

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Database Connection failed: " . $conn->connect_error);
    }

    //Get current date and time
    date_default_timezone_set('Asia/Jakarta');
    $d = date("Y-m-d");
    //echo " Date:".$d."<BR>";
    $t = date("H:i:s");

    if(!empty($_POST['lembab']) && !empty($_POST['suhuUdara']) && !empty($_POST['suhuAir']) && !empty($_POST['tinggiAir']))
    {
        $lembab = $_POST['lembab'];
        $suhuUdara = $_POST['suhuUdara'];
        $suhuAir = $_POST['suhuAir'];
        $tinggiAir = $_POST['tinggiAir'];
        
        echo " lembab:".$lembab."<BR>";
        echo " suhu Udara:".$suhuUdara."<BR>";
        echo " suhu Air:".$suhuAir."<BR>";
        echo " tinggi Air:".$tinggiAir."<BR>";

        $sql = "UPDATE  dbcontoh.dataTemp SET kelembaban='".$lembab."', suhuUdara='".$suhuUdara."', suhuAir='".$suhuAir."', tinggiAir='".$tinggiAir."' WHERE id='1'";
// mysql_query($SQL);
        if ($conn->query($sql) === TRUE) {
            echo "OK";
        } else {
            echo "Error: " . $sql . "<br>" . $conn->error;
        }
    }


    $conn->close();
?>

Selanjutnya Anda dapat mengembangkan sendiri sesuai dengan kebutuhan.

Semoga bermanfaat.

 

Referensi:

ESP8266 (NodeMCU) post request data to website

 

Timbangan 5kg HX711


CAM00451CAM00470 CAM00471 CAM00472

[Full Gallery Foto]

Gambaran Umum
HX711 adalah modul timbangan, yang memiliki prinsip kerja mengkonversi perubahan yang terukur dalam perubahan resistansi dan mengkonversinya ke dalam besaran tegangan melalui rangkaian yang ada. Modul melakukan komunikasi dengan computer/mikrokontroller melalui TTL232.
Kelebihan
Struktur yang sederhana, mudah dalam penggunaan, hasil yang stabil dan reliable, memiliki sensitivitas tinggi, dan mampu mengukur perubahan dengan cepat.

 

Aplikasi
Digunakan pada bidang aerospace, mekanik, elektrik, kimia, konstruksi, farmasi dan lainnya, digunakan untuk mengukur gaya, gaya tekanan, perpindahan, gaya tarikan, torsi, dan percepatan.
Fitur
– Differential input voltage: ±40mV(Full-scale differential input voltage is ± 40mV)
– Data accuracy: 24 bit (24 bit A / D converter chip.)
– Refresh frequency: 80 Hz
– Operating Voltage : 5V DC
– Operating current : <10 mA
– Size:38mm21mm10mm

Prinsip Kerja

HX711 1

Prinsip kerja sensor regangan ketika mendapat tekanan beban. (sumber datasheet HX711)
Ketika bagian lain yang lebih elastic mendapat tekanan, maka pada sisi lain akan mengalami perubahan regangan yang sesuai dengan yang dihasilkan oleh straingauge, hal ini terjadi karena ada gaya yang seakan melawan pada sisi lainnya. Perubahan nilai resistansi yang diakibatkan oleh perubahan gaya diubah menjadi nilai tegangan oleh rangkaian pengukuran yang ada. Dan berat dari objek yang diukur dapat diketahui dengan mengukur besarnya nilai tegangan yang timbul.

[Baca selengkapnya]

Testing Sensor Inframerah MLX90614 Dengan Arduino dan AVR


Tulisan kali ini adalah posting yang saya tulis ulang dari beberapa sumber yang memiliki kesamaan tema, jadi bukan seluruhnya adalah hasil eksperimen saya. Saya hanya mencoba mencoba petunjuk yang diberikan dan mencoba eksperimen dengan beberapa referensi tersebut.

MLX90614 adalah termometer inframerah yang sangat berguna karena dalam pemakaiannya tidak diperlukan kontak antara sensor dan objek yang akan diukur. Sensor memberikan pembacaan suhu rata-rata dari semua objek yang tercover oleh view dari sensor, sehingga tidak suhu mutlak dari sebuah objek yang diamati. Dengan prinsip ini, maka dapat dimanfaatkan untuk mendeteksi kehadiran ataupun perubahan suhu objek dalam range jangkaun sensor baik itu gerakan objek ataupun kehadiran suatu objek.

Gambar Wiring

Dengan mengikuti gambar di atas, maka kita dapat dengan mudah membuat sebuah sistem pembaca suhu menggunakan MLX90614 dan board arduino Uno. Jika merasa kesulitan menggunakan rangkaian di atas, dapat juga membeli modul sensor yang sudah jadi tinggal menambahkan jumper kabel dari modul ke board arduino.

[Baca selengkapnya]

Arduino dan Sensor Ultrasonic HC SR04


Arduino dan Sensor Ultrasonic HC SR04 dapat di susun untuk membuat sebuah sistem pengukur jarak. Arduino UNO yang digunakan sangat mudah didapatkan dan HC SR04 juga tidak mahal. Dengan biaya kurang dari Rp. 200.000,- kita bisa membuat sebuah pengukur jarak.

HC-SR04

Rangkaian yang dibuat dapat mengikuti skema diatas. Selanjutnya dapat digunakan program sketch berikut pada software Arduino.

#define trigPin 13
#define echoPin 12

void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}

void loop() {
long duration, distance;
digitalWrite(trigPin, LOW);  // Added this line
delayMicroseconds(2); // Added this line
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); // Added this line
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;

Serial.print(distance);
Serial.println(” cm”);

delay(500);
}

 Gallery Foto

[Baca selengkapnya]

Membuat Database Logger Sensor Jarak HC SR04-Arduino


Merujuk dari artikel sebelum tentang bagaimana membuat sebuah database menggunakan Visual Basic 6. Pada artikel lain yang membahas bagaiman cara mengukur jarak menggunakan sensor ultra sonic HC SR04 yang dikombinasikan dengan Arduino Uno. Maka pada posting ini akan di coba dijelaskan bagaimana salah satu cara untuk membuat sebuah database logger dari data pengukuran tersebut.

Video Terkait:

Desain sistem yang akan dibuat terdiri dari dua bagian yaitu hardware dan software yang dikombinasikan melalui teknik interfacing sederhana melalui port serial yang dapat dipelajari lebih mendalam pada posting sebelumnya.

Bagian hardware dibuat mengikuti skema dibawah ini:

Arduino HC SR04 LED BuzzerLangkah Pertama:

[Baca selengkapnya]

 

Membaca Sensor Suhu DS1820 Dengan Arduino


Pada posting ini dicoba untuk melakukan testing membaca sensor DS1820 dengan menggunakan board Arduino Uno.

Untuk melakukan testing, ikut petunjuk berikut:

1. Buatlah sebuah rangkaian tambahan dengan sebuah resistor sebagai berikut

Resistor

(sumber: http://www.instructables.com/id/Temperature-with-DS18B20/)

CAM00003

2. Kemudian hubungkan pin pada sensor suhu DS1820 waterproof seperti berikut:

– Kabel warna hitam ke pin GND board arduino

CAM00004

– Kabel warna merah ke pin +5v board Arduino

CAM00007

– kabel warna kuning ke pin nomer 2 board Arduino

CAM00008

3. Copy program dibawah ini dan download ke board Arduino Uno.

#include <OneWire.h>

int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2

//Temperature chip i/o
OneWire ds(DS18S20_Pin); // on digital pin 2

void setup(void) {
Serial.begin(9600);
}

void loop(void) {
float temperature = getTemp();
Serial.println(temperature);

delay(100); //just here to slow down the output so it is easier to read

}

float getTemp(){
//returns the temperature from one DS18S20 in DEG Celsius

byte data[12];
byte addr[8];

if ( !ds.search(addr)) {
//no more sensors on chain, reset search
ds.reset_search();
return -1000;
}

if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.println(“CRC is not valid!”);
return -1000;
}

if ( addr[0] != 0x10 && addr[0] != 0x28) {
Serial.print(“Device is not recognized”);
return -1000;
}

ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end

byte present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad

for (int i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
}

ds.reset_search();

byte MSB = data[1];
byte LSB = data[0];

float tempRead = ((MSB << 8) | LSB); //using two’s compliment
float TemperatureSum = tempRead / 16;

return TemperatureSum;

}

Selanjutnya perhatikan video berikut:

sumber:

http://bildr.org/2011/07/ds18b20-arduino/

http://www.instructables.com/id/Temperature-with-DS18B20/

Testing W1500 Ethernet Shield


ethernet shield

Pada posting kali ini, Anda akan dapat melakukan testing dan pengetahuan dasar bagaimana menggunakan ethernet W1500 shield.

Ethernet W1500 shield dapat digunakan untuk menghubungkan modul arduino ke dalam jaringan internet melalui koneksi kabel RJ45 (tidak termasuk dalam paket). Penggunaan modul W1500 sangat mudah dan cepat dilakukan, karena pada program IDE arduino sudah terdapat contoh programnya. Sehingga dalam hitungan menit Anda akan dapat melakukannya.

Untuk dapat melakukan testing modul ini, komponen yang dibutuhkan adalah:

 

ethernet shield 1

Program yang digunakan untuk melakukan testing dapat diambil dari bawaan software IDE Arduino:


/*
Web Server

A simple web server that shows the value of the analog input pins.
using an Arduino Wiznet Ethernet shield.

Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
* Analog inputs attached to pins A0 through A5 (optional)

created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe

*/

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}

// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}

void loop() {
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");  // the connection will be closed after completion of the response
client.println("Refresh: 5");  // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
// output the value of each analog input pin
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print("analog input ");
client.print(analogChannel);
client.print(" is ");
client.print(sensorReading);
client.println("<br />");
}
client.println("</html>");
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println("client disonnected");
}
}

 

Langkah untuk testing dapat diikuti melalui video berikut:

Untuk mengetahui lebih lanjut tentang shield ini dapat merujuk ke artikel lengkap disini Arduino Ethernet Shield.

Programming DDS9850 dan Bentuk Sinyal Output


IMG_20131001_100900

Dengan menggunakan arduino kita dapat mengatur frekuensi output dari DDS9850. Berikut adalah program yang dapat digunakan.

Output yang dihasilkan.

50 khz

100 khz sine 1 dan sine 2

Video


/*
* A simple single freq AD9850 Arduino test script
* Original AD9851 DDS sketch by Andrew Smallbone at www.rocketnumbernine.com
* Modified for testing the inexpensive AD9850 ebay DDS modules
* Pictures and pinouts at nr8o.dhlpilotcentral.com
* 9850 datasheet at http://www.analog.com/static/imported-files/data_sheets/AD9850.pdf
* Use freely
*/

#define W_CLK 8       // Pin 8 - connect to AD9850 module word load clock pin (CLK)
#define FQ_UD 9       // Pin 9 - connect to freq update pin (FQ)
#define DATA 10       // Pin 10 - connect to serial data load pin (DATA)
#define RESET 11      // Pin 11 - connect to reset pin (RST).

#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }

// transfers a byte, a bit at a time, LSB first to the 9850 via serial DATA line
void tfr_byte(byte data)
{
for (int i=0; i<8; i++, data>>=1) {
digitalWrite(DATA, data & 0x01);
pulseHigh(W_CLK);   //after each bit sent, CLK is pulsed high
}
}

// frequency calc from datasheet page 8 = <sys clock> * <frequency tuning word>/2^32
void sendFrequency(double frequency) {
int32_t freq = frequency * 4294967295/125000000;  // note 125 MHz clock on 9850
for (int b=0; b<4; b++, freq>>=8) {
tfr_byte(freq & 0xFF);
}
tfr_byte(0x000);   // Final control byte, all 0 for 9850 chip
pulseHigh(FQ_UD);  // Done!  Should see output
}

void setup() {
// configure arduino data pins for output
pinMode(FQ_UD, OUTPUT);
pinMode(W_CLK, OUTPUT);
pinMode(DATA, OUTPUT);
pinMode(RESET, OUTPUT);

pulseHigh(RESET);
pulseHigh(W_CLK);
pulseHigh(FQ_UD);  // this pulse enables serial mode - Datasheet page 12 figure 10
}

void loop() {
sendFrequency(10.e6);  // freq
while(1);
}

Demikian, semoga bermanfaat.

Reference:

Testing an eBay AD9850 DDS module with Arduino Uno

Testing Modul Sunrom DDS AD9850


Osilator dapat dibangkitkan menggunakan sebuah modul yang diproduksi oleh Sunrom. Modul DDS AD9850 ini dapat menghasilkan output sinus dan square lengkap dengan sinyal komplementernya. Untuk dapat membuat sebuah osilator, Anda dapat memanfaatkan beberapa modul yang ada, yaitu:

1. Modul DDS 9850

ads9850-500x500

2. Modul Arduino Uno ATmega328p

uno R3

3. Modul Arduino Prototyping Shield

IMG_20131001_085506

Selanjutnya, susun modul arduino dan prototyping shield seperti berikut:

IMG_20131001_085547Modul Arduino berada dibagian bawah dan prototyping shield pada bagian atas.

Pasang modul DDS9850 pada protoboard diatas.

IMG_20131001_100851

Dengan menggunakan kabel jumper, hubungkan antara modul DDS9850 dengan modul arduino.

IMG_20131001_100900

Selanjutnya: Programming DDS9850 dan Bentuk Sinyal Output.

%d blogger menyukai ini: