pondělí 8. ledna 2018

Arduino NANO Ethernet Shield



Cena: US $4.60 ~ 98,-Kč

eBay

Knihovna
https://github.com/jcw/ethercard
https://github.com/ntruchsess/arduino_uip (Library Manager UIPEthernet)
https://github.com/muanis/arduino-projects

Sketch
#include "etherShield.h"
#include "ETHER_28J60.h"
static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};

static uint8_t ip[4] = {192, 168, 0, 16};

static uint16_t port = 80;
ETHER_28J60 ethernet;



void setup()
{

ethernet.setup(mac, ip, port);
}



void loop()
{
if (ethernet.serviceRequest())
{
ethernet.print("<H1>Ahoj světe</H1>");
ethernet.respond();
}
}

úterý 19. prosince 2017

Sketch - Wemos D1 - přerušení


#define GPIO_PIN D3

uint8_t led = LOW;


void setup(){
    pinMode(GPIO_PIN, INPUT);
    pinMode(BUILTIN_LED, OUTPUT);
    setLED();
    attachInterrupt(GPIO_PIN, highInterrupt, CHANGE);
}

void highInterrupt(){
    led = digitalRead(GPIO_PIN);
}


void setLED(){
    digitalWrite(BUILTIN_LED, led);
}

void loop(){
    setLED();   
}

pátek 13. října 2017

Arduino Pro mini a USBasp programátor na Win 10 s Arduino IDE


Postup instalace ovladače:
  1. Plug in USBasp
  2. Download Zadig from http://zadig.akeo.ie
  3. Start zadig
  4. Options > List all devices
  5. Select USBasp from the drop down menu
  6. Select libusbK(v3.0.7.0) driver
  7. Click Install
Postup nahrání programu do desky pomocí programátoru USBasp:

1) Nastavit typ desky:
2) Nastavit typ programátoru na USBasp
3) Nahrát program

úterý 30. května 2017

Servo a volnoběh

Servomotor funguje tak, že nastavuje svou polohu podle šířky pulzu přiváděného na jeho řídící vstup.
Potenciometr, který je spřažený s hřídelí servomotoru, vytváří zpětnou vazbu podle které elektronika v motoru přivádí proud do motoru tak aby se hřídel natočila do požadované polohy. Pokud motor není ve správné poloze tak je do motoru stále přiváděn proud tak aby se mohl motor pootočit a do požadované polohy dotočit. Pokud je motor ale v záběru a neotáčí se tak se může přehřát a zničit.
Někdy je potřeba aby servo nebylo v záběru pořád a hřídel se volně otáčela. K tomu má knihovna Servo.h metodu detach(). Ta přestane do řídíčího vstupu servomotoru posílat PWM signál a umožní motoru se otočit podle toho jaká síla působí na hřídel.
#include <Servo.h>
Servo myservo;
int servoPin = 5;
void setup() {
}
void loop() {
  myservo.attach(servoPin);
  myservo.write(90);
  delay(1000);
  myservo.detach();
  delay(2000);
}

neděle 21. května 2017

Řídící modul až 16ti servomotorů pro Arduino a Raspberry Pi


16-Kanal 12-Bit PWM Controller, PCA9685 Servo Driver, I2C Arduino Raspberry Pi
cca 55,- Kč

eBay
http://www.ebay.com/itm/272283707473?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT

Stáhněte si knihovnu
Z GitHubu (https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library) si můžete stáhnout knihovnu, ale pohodlnější je ji nainstalovat přímo z IDE Arduina [Projekt/Přidat knihovnu/Spravovat knihovny] a vyhledat Adafruit PWM Servo Driver Library

Chyba knihovny
Při použití knihovny ve verzi 1.0.0 s deskou, jako je třeba WeMos D1 ESP8266 ESP-12E
jsem narazil na tuto chybu:
Adafruit_PWMServoDriver.cpp:25:15: error: 'Wire1' was not declared in this scope
#define WIRE Wire1
Je způsobena definicí WIRE, která má hodnotu Wire1 (možná překlep)
Tato hodnota se na řádku 25 nastaví pro asi neznámou desku.

Řešení
V souboru
c:\Users\{UserName}\Documents\Arduino\libraries\Adafruit_PWM_Servo_Driver_Library\Adafruit_PWMServoDriver.cpp

Je potřeba na řádku 25 odmazat znak '1'. Po uložení souboru a znovu zkompilování mého kódu všechno fungovalo.

WeMos D1 na eBay za cca 102,- Kč

sobota 22. dubna 2017

neděle 26. března 2017

Ultrazvukový senzor podruhé

Tentokrát s přerušením


#define ECHOPIN 2 // Echo pin z HC-SC04 na pin 2
#define TRIGPIN 10 // Trig pin z HC-SC04 na pin 5

float distance = 0.0;

static unsigned long startTime;
static unsigned long pulseWidth;

void EchoPinISR() 
{    
    if (digitalRead(2)) // Gone HIGH
        startTime = micros();
    else{  // Gone LOW
        pulseWidth = micros() - startTime;
        distance = pulseWidth * 0.017315f;
    }
}

void setup()
{
  //Nastaví sériovou komunikaci
  Serial.begin(9600);

  //Nastaví pin 2 jako vstupní
  pinMode(ECHOPIN, INPUT);
  attachInterrupt(digitalPinToInterrupt(ECHOPIN), EchoPinISR, CHANGE);

  //Nastaví pin 5 jako výstupní
  pinMode(TRIGPIN, OUTPUT);
}

void trig()
{
    // Vyšle impuls do modulu HC-SR04
    digitalWrite(TRIGPIN, LOW);
    delayMicroseconds(2);
    digitalWrite(TRIGPIN, HIGH);
    delayMicroseconds(10);
    digitalWrite(TRIGPIN, LOW);
}

  int lastPing=0;
  
void loop()
{
  if (lastPing+20 < millis())
  {
    lastPing = millis();
    trig();
  }
   

    //delay(12); // 4m čekání
    if (distance < 1000)
    {
      // odešle informace na sérivý port
      Serial.println(distance); // pro zobrazení na plotru
    }else
    {
      // ERROR
    }
    
}

Zdroj: 
http://forum.arduino.cc/index.php?topic=283086.0