Wednesday 22 September 2021

Cara upload HEX file untuk arduino Pro Mini

Salam sejahtera kepada semua pembaca. 

Pengenalan. 
Terdapat banyak cara untuk upload HEX file ke arduino uno, mega dan nano. Tetapi kali ni saya ingin berkongsi cara untuk upload HEX file ke dalam ARDUINO PRO MINI melalui USB FTDI.

Langkah.
1. Plug arduino anda ke PC. sambungkan arduino dan FTDI converter seperti disini.
2. Pilih board. Tool > Board > Arduino Pro or PRO Mini.
3. Pilih processor board. Tool > Processor > ATMega328p (5v,16Mhz)
4. Pilih port board. Tool > COMxx (mengikut com usb anda)
5. Tekan File > Preference - Show verbose output during - (check box) upload.
6. Upload  sebarang coding kedalam arduino anda.

pada bahagian bawah Arduino IDE. baris ketiga akan terdapat kenyataan begini.

C:\Users\Eawan\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/bin/avrdude -CC:\Users\Eawan\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf -v -patmega328p -carduino -PCOM8 -b57600 -D -Uflash:w:C:\Users\Eawan\AppData\Local\Temp\arduino_build_102101/Blink01.ino.hex:i 

7. Pilih dan salin AVRDUDE command tersebut.
8. Tukar pada bahagian yang saya underline mengikut lokasi file HEX anda.
9. Salin semula AVRDUDE command tersebut dan paste pada windows COMMAND PROMPT.
10. Tekan ENTER dan tunggu sehingga process selesai.





Selesai....


Selamat mencuba...



PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut. Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri Sebarang kemuskilan atau pertanyaan boleh hubungi saya. 
WHATAPSS MAFeS

Wednesday 1 September 2021

Arduino Semi Auto wire dispenser

Salam sejahtera kepada semua pembaca. 

Pengenalan. 
Projek ini menggunakan stepper motor untuk mengukur secara automatik kepanjangan wayar yang diperlukan apabila push button ditekan. seterusnya menambah nilai 1 kepada counter. 

Komponen yang digunakan.
1. Arduino Uno
2. A4988 stepper driver
3. Stepper motor
4. Push button
5. Resistor 10K
6. Jumper wire.


Penyambungan. 





Coding. 

// Define stepper motor connections and steps per revolution:
#define dirPin 2
#define stepPin 3
#define stepsPerRevolution 400 //tuning step feeding
#define button01 7 // start button
int buttonState = 0; 
int count =0; // counter

void setup() {
  // Declare pins as output:
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
  pinMode(button01, INPUT);
  Serial.begin(9600);
}

void loop() {
    buttonState = digitalRead(button01);

  if (buttonState == HIGH){
  // Set the spinning direction clockwise:
  digitalWrite(dirPin, LOW);

  // Spin the stepper motor 1 revolution slowly:
  for (int i = 0; i < stepsPerRevolution; i++) {
    // These four lines result in 1 step:
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(2000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(2000);
  }
  count = count+1;
  Serial.println(count);
  delay(500);
  
  }

  else{
    
  }

}



PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut. Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri Sebarang kemuskilan atau pertanyaan boleh hubungi saya. 
WHATAPSS MAFeS

Wednesday 14 July 2021

Pengujian Jarak NRF24L01


Salam sejahtera kepada semua pembaca. 

Pengenalan. 
Projek ini bertujuan menilai jarak maksimum pemancaran dan penerimaan gelombang 2.4Ghz yang berkuasa rendah untuk penghantaran sesuatu data. Projek ini boleh digunakan untuk menilai Hardware Setup yang telah disediakan sebelum digunakan untuk penghantaran data sebenar mengguna hardware setup yang sama.
Transmitting dan receiving boleh ditambah baik dengan beberapa kaedah mengikut keadaan lokasi hardware berada seperti:- 
1. Ketinggian antenna dari paras tanah.
    - Lebih tinggi antenna dari tanah bermakna ia makin kurang halangan seperti pokok, bangunan dan sebagainya.
2. Jenis antenna.
   - Terdapat beberapa jenis antenna yang boleh digunakan mengikut keperluan. Contohnya antenna Yagi, berguna apabila kita tahu arah penalaan antenna yang membolehkan penerimaan atau pemancaran pada tahap yg optimum. Antenna omni yang berguna untuk penerimaan atau pemancaran gelombang pada kawasan yang lebih luas.
3. Kuasa pancaran.
  - Mempengaruhi jarak pemancaran dan penggunaan bekalan kuasa. Lebih kuat kuasa pancaran, lebih jauh capaian gelombang dan juga makin lebih penggunaan bekalan kuasa, ini bermakna bateri anda makin cepat lemah.


Biquad Omni Antenna


Omni Antenna

Parabolic antenna



Patch antenna



Yagi Antenna


Contoh cara pemasangan antenna mengikut keperluan.








Penyambungan




Coding

Transmitter

 
/*
Simple transmitter, just sends 12-byte packet continously
nRF24L01 library: https://github.com/gcopeland/RF24
 
nRF24L01 connections
 1 - GND
 2 - VCC 3.3V !!! Ideally 3.0v, definitely not 5V
 3 - CE to Arduino pin 9
 4 - CSN to Arduino pin 10
 5 - SCK to Arduino pin 13
 6 - MOSI to Arduino pin 11
 7 - MISO to Arduino pin 12
 8 - UNUSED
 
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
 
const uint64_t pipeOut =  0xE8E8F0F0E1LL;
 
// The sizeof this struct should not exceed 32 bytes
struct PacketData {
  unsigned long hours;
  unsigned long minutes;
  unsigned long seconds;
};
 
PacketData data;
 
RF24 radio(9, 10);
 
void setup() {
  radio.begin();
  radio.setAutoAck(false);
  radio.setDataRate(RF24_250KBPS);
  radio.openWritingPipe(pipeOut);
 
  data.hours = 0;
  data.minutes = 0;
  data.seconds = 0;   
}
 
unsigned long lastTick = 0;
 
void loop() {
  unsigned long now = millis();
  if ( now - lastTick >= 1000 ) {
    data.seconds++;
    if ( data.seconds >= 60 ) {
      data.seconds = 0;
      data.minutes++;
    }
    if ( data.minutes >= 60 ) {
      data.minutes = 0;
      data.hours++;
    }
    lastTick = now;
  }
   
  radio.write(&data, sizeof(PacketData));   
}



Receiver

 
/*
Simple receiver to display how many packets per second are being received
nRF24L01 library: https://github.com/gcopeland/RF24
I2C OLED screen library: https://github.com/olikraus/u8glib
 
nRF24L01 connections
 1 - GND
 2 - VCC 3.3V !!! Ideally 3.0v, definitely not 5V
 3 - CE to Arduino pin 9
 4 - CSN to Arduino pin 10
 5 - SCK to Arduino pin 13
 6 - MOSI to Arduino pin 11
 7 - MISO to Arduino pin 12
 8 - UNUSED
 
OLED connections
 GND - GND
 VCC - VCC
 SDA - Arduino pin A4
 SCL - Arduino pin A5
 
*/
 
#include <SPI.h>
#include "U8glib.h"
#include <nRF24L01.h>
#include <RF24.h>
 
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST);       // Fast I2C / TWI
 
const uint64_t pipeIn =  0xE8E8F0F0E1LL;
 
RF24 radio(9, 10);
 
// The sizeof this struct should not exceed 32 bytes
struct PacketData {
  unsigned long hours;
  unsigned long minutes;
  unsigned long seconds;
};
 
PacketData data;
 
/**************************************************/
 
int packetCounts[10];
int packetCountIndex = 0;
int packetCountTotal = 0;
 
#define AVG_SECONDS 10
 
int avgs[AVG_SECONDS];
int avgIndex = 0;
unsigned long avgTotal = 0;
 
void setup()
{
  Serial.begin(115200);
  // Set up radio module
  radio.begin();
  radio.setDataRate(RF24_250KBPS);
  radio.setAutoAck(false);
  radio.openReadingPipe(1,pipeIn);
  radio.startListening();
 
  u8g.setColorIndex(1);
  u8g.setFont(u8g_font_fur11);
 
  memset(&data, 0, sizeof(PacketData)); 
  memset( packetCounts, 0, sizeof(packetCounts) );
  memset( avgs, 0, sizeof(avgs) );
}
 
unsigned long packetsRead = 0;
unsigned long lastScreenUpdate = 0;
unsigned long lastAvgUpdate = 0;
unsigned long lastRecvTime = 0;
unsigned long drops = 0;
 
/**************************************************/
 
void recvData()

  while ( radio.available() ) {       
    radio.read(&data, sizeof(PacketData));
    packetsRead++;
    lastRecvTime = millis();
  }
}
 
/**************************************************/
 
char ppsBuf[16];
char avgBuf[16];
char hmsBuf[16];
 
void draw() {
  u8g.drawStr( 2, 24, ppsBuf);
  u8g.drawStr( 2, 40, avgBuf);
  u8g.drawStr( 2, 56, hmsBuf);
}
 
void updateScreen()

  unsigned long now = millis();
  if ( now - lastScreenUpdate < 100 )
    return;
   
  // moving average over 1 second
  packetCountTotal -= packetCounts[packetCountIndex];
  packetCounts[packetCountIndex] = packetsRead;
  packetCountTotal += packetsRead;
 
  packetCountIndex = (packetCountIndex + 1) % 10;
  packetsRead = 0;
 
  sprintf(ppsBuf, "PPS: %d", packetCountTotal);
  sprintf(avgBuf, "AVG: %ld", avgTotal / AVG_SECONDS);
  sprintf(hmsBuf, "%02ld:%02ld:%02ld", data.hours, data.minutes, data.seconds);
 
  u8g.firstPage();
  do {
    draw();
  }
  while( u8g.nextPage() );
 
  lastScreenUpdate = millis();
 
  if ( now - lastAvgUpdate >= 1000 ) {   
    // moving average of 1 second moving average
    avgTotal -= avgs[avgIndex];
    avgs[avgIndex] = packetCountTotal;
    avgTotal += packetCountTotal;
 
    avgIndex = (avgIndex + 1) % AVG_SECONDS;
    lastAvgUpdate = millis();
  }
}
 
/**************************************************/
 
void loop()
{
  recvData();
  updateScreen();
}
 
 

 

 

PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut. Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri Sebarang kemuskilan atau pertanyaan boleh hubungi saya.

WHATAPPS MAFeS