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

Jednoduché zobrazení přijatých dat po sériové lince Arduina

Při testování komunikace po sériové lince se může někdy hodit si přijatá data zobrazit.
Napíšeme si malý program, který nám zobrazí přijatá data na osmi led diodách. Z  digitálních pinů 2 až 9, připojíme osm LED diod přes rezistory na zem (Gnd). Takže svítit budou při Log_1 (HIGH). Přijatá data se maskují jednotlivými bity a pokud je výsledek pravda tak rozsvítí příslušnou diodu.


#define LedPin1 2 
#define LedPin2 3
#define LedPin3 4 
#define LedPin4 5
#define LedPin5 6 
#define LedPin6 7
#define LedPin7 8 
#define LedPin8 9

void setup() {
  // put your setup code here, to run once:

  Serial.begin(9600);

  pinMode(LedPin1, OUTPUT);
  pinMode(LedPin2, OUTPUT);
  pinMode(LedPin3, OUTPUT);
  pinMode(LedPin4, OUTPUT);
  pinMode(LedPin5, OUTPUT);
  pinMode(LedPin6, OUTPUT);
  pinMode(LedPin7, OUTPUT);
  pinMode(LedPin8, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  if(Serial.available() > 0)
  {
    byte ch = Serial.read();

    digitalWrite(LedPin1, LOW);
    digitalWrite(LedPin2, LOW);
    digitalWrite(LedPin3, LOW);
    digitalWrite(LedPin4, LOW);
    digitalWrite(LedPin5, LOW);
    digitalWrite(LedPin6, LOW);
    digitalWrite(LedPin7, LOW);
    digitalWrite(LedPin8, LOW);
    
    if (ch & B00000001) digitalWrite(LedPin1,HIGH);
    if (ch & B00000010) digitalWrite(LedPin2,HIGH);
    if (ch & B00000100) digitalWrite(LedPin3,HIGH);
    if (ch & B00001000) digitalWrite(LedPin4,HIGH);
    if (ch & B00010000) digitalWrite(LedPin5,HIGH);
    if (ch & B00100000) digitalWrite(LedPin6,HIGH);
    if (ch & B01000000) digitalWrite(LedPin7,HIGH);
    if (ch & B10000000) digitalWrite(LedPin8,HIGH);
      
  }
}

sobota 11. února 2017

Měření procházejícího proudu

Cena: $3,99 ~ 77,-Kč

  1. Current sensor chip: ACS712ELC-05B 
  2. pin inserted 5V power supply,on board power indicator;
  3. Can measure plus and minus 5A current,corresponding simulation output 185mV/A ;
  4. When testing no current though,the output voltage is VCC/2; (2,5V ~ 2500mV)
  5. PCB board dimension: 31(mm)x13(mm) 
  6. NOTE: ACS712 is based on the principle of Hall detectionon,please try to avoid the magnetic field affect when using it.



eBay: http://www.ebay.com/itm/121047153862?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649
Zdroje:
http://forum.arduino.cc/index.php?topic=265094.0
http://www.cnx-software.com/2016/01/23/acs712-module-measures-currents-30a-1-dollar/
http://www.dustynrobots.com/academia/research/digital-signal-processing-and-filtering-motor-current-sensing/



int currentPin = A0;
// constants
float volt_per_amp = 185; // resolution according to hardware page
// variables
float currentRaw; // the raw analogRead ranging from 0-1023
float currentVolts; // raw reading changed to Volts
float currentAmps; // Voltage reading changed to Amps
void setup() {
  Serial.begin(9600);
}
void loop() {
  currentRaw = analogRead(currentPin);
  currentVolts = currentRaw *(5000.0/1024.0);
  currentAmps = (currentVolts-2500)/volt_per_amp;
  Serial.println(currentAmps);
}

Přidání filtru průměrnou hodnotou

Z obrázku je vidět, že je linka méně "chlupatá".

int currentPin = A0;
// constants
float volt_per_amp = 185; // resolution according to hardware page

// variables
float currentRaw; // the raw analogRead ranging from 0-1023
float currentVolts; // raw reading changed to Volts
float currentAmps; // Voltage reading changed to Amps

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

void loop() {
  float average = 0;
  for(int i = 0; i < 15; i++) {

    currentRaw = analogRead(currentPin);
    currentVolts = currentRaw *(5000.0/1024.0);
    currentAmps = (currentVolts-2500)/volt_per_amp;
    average = average+currentAmps;
    delay(1);

  }
  Serial.println(average/15);
}

pátek 10. února 2017

čtvrtek 2. února 2017

9. Dálkoměr - HC-SR04

Měříme vzdálenost s HC-SR04


Tutorial:
http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/

Video:
https://www.youtube.com/watch?v=kQRYIH2HwfY

eBay - 30,-Kč
http://www.ebay.com/itm/121928420335?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT


Poznámka:
Při testování na pinech 2 a 3 mi to nefungovalo (asi je na nich navěšena seriová linka), pro to jsem je posunul o dva piny vedle a hned se všechno rozjelo.

Kód:
#define ECHOPIN 4 // Echo pin z HC-SC04 na pin 4
#define TRIGPIN 5 // Trig pin z HC-SC04 na pin 5
void setup()
{
  //Nastaví sériovou komunikaci
  Serial.begin(9600);
  //Nastaví pin 4 jako vstupní
  pinMode(ECHOPIN, INPUT);
  //Nastaví pin 5 jako výstupní
  pinMode(TRIGPIN, OUTPUT);
}
void loop()
{
    // Vyšle impuls do modulu HC-SR04
    digitalWrite(TRIGPIN, LOW);
    delayMicroseconds(2);
    digitalWrite(TRIGPIN, HIGH);
    delayMicroseconds(10);
    digitalWrite(TRIGPIN, LOW);
 
    // Změří puls
    float distance = pulseIn(ECHOPIN, HIGH);
 
    // Spočítá vzdálenost
    distance= distance*0.017315f;
 
    // odešle informace na sérivý port
    Serial.println(distance); // pro zobrazení na plotru
    delay(50);
    Serial.print(distance); // Pro zobrazení na monitoru
    // Serial.print("cm\n");
    // počká 1 sekundu
    // delay(1000);
}





sobota 21. ledna 2017

NE555 servo driver

Zkoušel jsem zapojení podle schematu viz. odkaz níže. Ale nefungovalo na 5V ani na 9V jak ukazuje schema. Pak jsem přidal Piezzo na výstup abych slyšel jestli se na výstupu vůbec něco děje a v tom obvod začal alespoň trošku fungovat.

Podívejte se na video




Zdroj:
http://rookieelectronics.com/servo-tester/

pondělí 12. prosince 2016

Různé desky pro řízení motorů a servomorotů

Servo

DC Motor
Arduino z Raspberry Pi

úterý 5. dubna 2016

Krabičky na Raspberry (50 - 200,- Kč)

Ani do jedné z krabiček které jsem si koupil se mi nepodařilo vložit RPi s přilepeným spodním chladičem. Takže pozor na to.
http://www.ebay.com/itm/271860536774 (50,-Kč - včetně dopravy)
http://rpishop.cz/raspberry-pi-prislusenstvi/171-plastova-krabicka-onenine-bila-pro-b-a-rpi-2.html (166,- Kč + doprava)
http://thepihut.com/collections/raspberry-pi-cases
http://rpishop.cz/8-case-krabicky-obaly

Pokud se Vám ani jedna krabička nelíbila, máte poslední šanci a to: krabičku si vytisknout.
http://www.thingiverse.com/thing:922740
Tahle má přípravu na VESA montáž

středa 30. března 2016

Raspberry Pi 2 a jeho kamera (PiCam)

Windows 10 IoT Core v současné verzi nepodporuje kameru připojenou přímo do konektotu kamery na desce RPi. :(

Návod jak to zvládnout v Rasbianu najdete na https://www.raspberrypi.org/learning/getting-started-with-picamera/worksheet/


Zdroj:
http://ms-iot.github.io/content/en-US/win10/ReleaseNotes.htm
With this release of Windows 10 IoT Core for the Raspberry Pi 2, support for camera peripheral devices is limited. The PiCam device directly connected to the onboard camera bus is not currently supported, as it requires GPU services that are not currently available on the Raspberry Pi because the DirectX driver has not been implemented. Modern USB webcams produce data streams that are very demanding on the USB Host controller. Even when used with low resolution settings webcams will require additional USB fine tuning and specialized control logic. We are planning to support a number of USB cameras in the near future and will publish specific information on supported devices as soon as possible.

středa 23. března 2016

19. DC motor naposledy H-můstek L293D

Tutorial:
Přehledně vysvětleno jak H-můstky fungují
https://www.youtube.com/watch?v=iYafyPZ15g8

eBay

L9110S H-bridge Stepper Motor Dual DC motor Driver Controller Board for Arduino 

Cena: 35,57 Kč
http://www.ebay.com/itm/251900163508
has a continuous current of 800mA

Schema
http://www.snailshop.cz/2535-thickbox_default/dvojity-h-mustek-s-l9110.jpg





Stepper Motor Drive Controller Board Module L298N Dual H Bridge DC For Arduino

!!! Pozor !!! na jumper u napájecího konektoru. Pokud je spojený, tak se pro napájení logiki použije napětí ze stabilizátoru, který je napájen ze svorky +12V. Pokud v tomto případě připojíte jakékoli napětí na svorku +5V. Můžete můstek poškodit.
2A (MAX single bridge)
Cena: 109,-Kč
http://www.ebay.com/itm/251777004576_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT


https://www.hackster.io/peejster/rover-c42139


L293d - 56,- Kč
http://www.gme.cz/obvody-pro-rizeni-motoru-mustkove-budice/l293d-p399-017/#dokumentace


http://costaricabeam.solarbotics.net/Circuits/Others_Main.htm



Nebo potom něco silnějčího cca 1900,- Kč
http://www.snailshop.cz/kontrolery-s-inteligenci/384-sabertooth-dual-5a-motor-driver-.html

pondělí 21. března 2016

Instalace Win 10 IoT Core na Rapsberry Pi 2 B


Vložte SD kartu do počítače a v aplikaci Windows IoT Image Helper vyberte, podle písmena jednotky, SD kartu na kterou chcete

Připojte RPi na ethernet a nechte mu přiřadit IP
Připojte se na http://MinWinPc:8080 nebo na http://192.169.0.19:8080 (v závislosti na přidělené IP adrese)

Logování Universal Application

Log4Net se mi nepodařilo do WUP aplikace přidat proto jsem se porozhlédl po jiné knihovně a narazil jsem na MetroLog

Install-Package MetroLog

LogSoubory se pak ukládají do této složky:
\\MinWinPc\c$\Data\Users\DefaultAccount\AppData\Local\Packages\[PackageName]\LocalState\MetroLogs\

např.:
\\192.168.0.19\c$\Data\Users\DefaultAccount\AppData\Local\Packages\PhotoFrame_pv5a9v0cz0dyr\LocalState\MetroLogs\


Na lokálním počítači se data ukládají do složky
c:\Users\Zbyněk\AppData\Local\Packages\VideoFrame_pv5a9v0cz0dyr\LocalState\MetroLogs\

Ukázka logovaného záznamu
Log - 20160321.log2|2016-03-21T19:00:48.9505080+00:00|TRACE|2|MainPage|This is a trace message....

Zdroj:
[1] http://stackoverflow.com/questions/25413284/how-do-i-get-metrolog-to-start-logging-in-a-windows-8-1-store-app
[2] http://talkitbr.com/2015/06/11/adicionando-logs-em-universal-apps/

čtvrtek 17. března 2016

středa 16. března 2016

Rapsberry Pi 2 + Win 10 IoT Core - PhotoFrame

Raspbery Pi 2 Win 10 IoT Core bootuje cca 30 sekund

KnownFolders
var photoFile = await KnownFolders.PicturesLibrary

(cd \\MinWinPc\c$\Data\Users\DefaultAccount\Pictures)


PhotoLibrary capability

RandomNumber generator

DispatcherTimer

Rozlišení připojeného displaye
Window.Current.Bounds.Width; // 1920
Window.Current.Bounds.Height; // 1080
pokud připojíte RPi na televizi pomocí S-Video použije se rozlišení w:720 x h: 480

Zdroje:
Capture element 
https://msdn.microsoft.com/cs-cz/library/windows/apps/br209278?f=255&MSPPError=-2147217396

DispatcherTimer https://msdn.microsoft.com/cs-cz/library/system.windows.threading.dispatchertimer%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

BitmapImage
http://stackoverflow.com/questions/32314799/uwp-image-uri-in-application-folder