sobota 22. dubna 2017

DF Player Mini MP3 pro Arduino

Přehrává MP3 soubory z SD karty. Tento modul je možné ovládat pomocí sériové linky.
Je možné nastavit hlasitost 0-30

Zdroj:
https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299
https://www.dfrobot.com/blog-277.html

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/