Archive for Troška teorie

Udělej si (3) – skutečné hodiny RTC

Tak to vám jednou se probudím, a ono tma. Že bych si nastavil budík? To raději jako správný kutil si ho musím udělat. Opravdový kutil začne přesýpačkami, ale nenašel jsem správné skleničky, tak mi zbylo zas jen Arduino.

Co budete potřebovat:

  • 1x Arduino (Uno, Duemilanova, Due, Leonardo)
  • 1x nepájivé pole
  • dráty jako propojovací vodiče
  • 1x integrovaný obvod DS1307
  • 1x krystal 32,768 kHz
  • 2x rezistor 2k2
  • 1x baterii 3 až 3,6V

Součástky a  materiál koupíte např. zde: Stavebnice.com/eshop

Jak zapojit:

RTC - i2c - DS1307

Jak vidíte, zapojení je velmi jednoduché.
Rezistory (= odpory) mohou být 1k5 – 10k.
Zde zobrazená baterie může být nahrazena jakoukoliv nenabíjecí, jen si ohlídejte napětí a polaritu.
Komunikace mezi Arduinem a DS1307 je přes AnalogIn piny A4 a A5.

Pro spuštění ještě musíte nahrát knihovnu RTC s DS1307 a „Sketch -> Import Library“

Knihovnu stáhněte zde: RTClib-ds1307

a rozbalte do adresáře ..arduino-0018libraries

Vyzkoušeno ve verzi 0018, 0022 a 1.0

Ukázka programu 4.1 – hodiny reálného času RTC:

// Funkce data a času DS1307 RTC zapojenému přes I2C a knihovnu Wire
#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

void setup () {

 Serial.begin(57600);
 Wire.begin();
 RTC.begin();

 if (! RTC.isrunning()) {
 Serial.println("RTC is NOT running!");
 // následující řádka nastaví RTC datum a čas po zkompilování podle počítače
 RTC.adjust(DateTime(__DATE__, __TIME__ ));
 }
}

void loop () {
 DateTime now = RTC.now();

 // příkaz Serial.print() pošle data přes USB do počítače,
 // kde je zobrazíme v terminálu - Ctrl+Shift+M.

 Serial.print(now.year(), DEC);
 Serial.print('/');
 Serial.print(now.month(), DEC);
 Serial.print('/');
 Serial.print(now.day(), DEC);
 Serial.print(' ');
 Serial.print(now.hour(), DEC);
 Serial.print(':');
 Serial.print(now.minute(), DEC);
 Serial.print(':');
 Serial.print(now.second(), DEC);
 Serial.println();

 Serial.print(" since midnight 1/1/1970 = ");
 Serial.print(now.unixtime());
 Serial.print("s = ");
 Serial.print(now.unixtime() / 86400);
 Serial.println("d");

 // chceme-li přičíst ke stávajícímu datu a času 7 dní a 30 sekund
 DateTime future (now.unixtime() + 7 * 86400L + 30);

 Serial.print(" now + 7d + 30s: ");
 Serial.print(future.year(), DEC);
 Serial.print('/');
 Serial.print(future.month(), DEC);
 Serial.print('/');
 Serial.print(future.day(), DEC);
 Serial.print(' ');
 Serial.print(future.hour(), DEC);
 Serial.print(':');
 Serial.print(future.minute(), DEC);
 Serial.print(':');
 Serial.print(future.second(), DEC);
 Serial.println();

 Serial.println();
 delay(1000);

} //------ konec ------------

Příště si povíme, jak připojit LCD display a hodiny budou svítit do tmy 🙂

Udělej si (2) – posuvný registr

Kurz pro začátečníky – Jak zvětšit počet výstupů arduina pomocí posuvných registrů, angl. Shift Register

Co budete potřebovat:

1x Arduino (Uno, Duemilanova, Due, Leonardo)
1x integrovaný obvod 74HC595N
8x Led dioda (na barvě nezáleží)
8x rezistor 220 až 330 Ohm
1x nepájivé pole
dráty jako propojovací vodiče

Součástky a  materiál koupíte např. zde: Stavebnice.com/eshop

Jak zapojit:


Posuvný registr 74hc595



Na obrázku jsou zobrazena dvě nepájivá pole z důvodu přehlednosti. Zapojení lze samozřejmě zrealizovat na jednom.

LED diody mají obvykle jednu nožičku delší – ta se připojuje na plus. Nebo v tomto zapojení k odporu.

Ukázka programu 2.1 – světélka se hýbou:

//Pin zapojen do ST_CP of 74HC595
int latchPin = 8;
//Pin zapojen do SH_CP of 74HC595
int clockPin = 12;
//Pin zapojen do DS of 74HC595
int dataPin = 11;

void setup() {
 //nastaveni pinu jako vystupnich pro ovladani posuvneho registru
 pinMode(latchPin, OUTPUT);
 pinMode(clockPin, OUTPUT);
 pinMode(dataPin, OUTPUT);
}

void loop() {
 // pocita od 0 do 255 a zobrazi cislo na LEDky
 // 255 v dekadicky se zobrazi binarne 0b11111111
 for (int numberToDisplay = 0; numberToDisplay < 0b11111111; numberToDisplay++) {
 // nastav latchPin na LOW
 digitalWrite(latchPin, LOW);
 // a zacni posilat data po osmi bitech (protoze pouzivame 8 vystupu):
 shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay);  

 //kdyz zmenime latchPin z LOW do HIGH, tak se nam zobrazi data na vystupech:
 digitalWrite(latchPin, HIGH);
 // pauza pro cteni dalsich dat:
 delay(150);
 //digitalWrite(latchPin, LOW);
 //shiftOut(dataPin, clockPin, MSBFIRST, 0b01011011);
 //digitalWrite(latchPin, HIGH);
 //delay(550);
 }
}

Ukázka programu 2.2 – jak posílat data jednotlivě:

//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;

void setup() {
 //set pins to output so you can control the shift register
 pinMode(latchPin, OUTPUT);
 pinMode(clockPin, OUTPUT);
 pinMode(dataPin, OUTPUT);
}

void loop() {
 digitalWrite(latchPin, LOW);
 shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
 digitalWrite(latchPin, HIGH);
 delay(150);
 digitalWrite(latchPin, LOW);
 shiftOut(dataPin, clockPin, MSBFIRST, 0b00011000);
 digitalWrite(latchPin, HIGH);
 delay(150);
 digitalWrite(latchPin, LOW);
 shiftOut(dataPin, clockPin, MSBFIRST, 0b00111100);
 digitalWrite(latchPin, HIGH);
 delay(150);
 digitalWrite(latchPin, LOW);
 shiftOut(dataPin, clockPin, MSBFIRST, 0b01111110);
 digitalWrite(latchPin, HIGH);
 delay(150);
 digitalWrite(latchPin, LOW);
 shiftOut(dataPin, clockPin, MSBFIRST, 0b11111111);
 digitalWrite(latchPin, HIGH);
 delay(150);
 }

Příště si povíme, jak rozšířit počet výstupů násobným připojením dalších posuvných registrů.


Udělej si (1) – doplnění o použití 6xPWM

Arduino umožňuje použít přímo až 6 PWM výstupů.

Příklad programu:

// program pro ovladani 6x PWM
// napr. 3x H-mustek
// plati pro Arduino s ATmega168 a ATmega328, to jsou běžná Arduina
// vystup pouze na piny 3, 5, 6, 9, 10 a 11
// potenciometr 5 až 50kOhm na analogovém vstupu 0 

int Ledpin11=11; //definice vystupnich pinu
int Ledpin10=10;
int Ledpin9=9;
int Ledpin6=6;
int Ledpin5=5;
int Ledpin3=3;

int analogpin=0;  // definice vstupu
int value=0;      // hodnota potenciometru
int x;

void setup()
 {
 Serial.begin(9600);
 pinMode(Ledpin11, OUTPUT);
 pinMode(Ledpin10, OUTPUT);
 pinMode(Ledpin9, OUTPUT);
 pinMode(Ledpin6, OUTPUT);
 pinMode(Ledpin5, OUTPUT);
 pinMode(Ledpin3, OUTPUT);
 }

void loop()
 {
 value=analogRead(analogpin);
 x=map(value,0,1023,0,255);
 analogWrite(Ledpin11,x);
 analogWrite(Ledpin10,255-x);
 analogWrite(Ledpin9,x);
 analogWrite(Ledpin6,255-x);
 analogWrite(Ledpin5,x);
 analogWrite(Ledpin3,255-x);
 Serial.println(x);
 delay(100);
 }

Udělej si (1) – Arduino – jak ovládat „napětí“

Kurz pro začátečníky – Jak ovládat napětí pomocí mikroprocesoru a potenciometru

Co budete potřebovat:

1x Arduino (Uno, Duemilanova, Due, Leonardo)
1x Led dioda (na barvě nezáleží)
1x rezistor 330 Ohm
1x potenciometr 5 kOhm
1x nepájivé pole
1x dráty jako propojovací vodiče

Součástky a  materiál koupíte např. zde: Stavebnice.com/eshop

Jak to bude vypadat pečlivě zapojené:


PWM - potenciometr a Ledka


Poznámka:

dejte pozor na zapojení, aby se v případě zkratu nepoškodil usb port na počítači.

Výpis programu:

int Ledpin=9;                  //vystup na LED
 int analogpin=0;              //vstup potenciometru
 int value=0;                  //promenna pro hodnotu potenciometru
 int x;                        //prevedena hodnota z 0..1023 na 0..255
void setup()
 {
 Serial.begin(9600);           //inicializace terminalu
 pinMode(Ledpin, OUTPUT);      //nastaveni digitalniho vystupu
 }
void loop()                    //hlavni smycka
 {
 value=analogRead(analogpin);  //precist potenciometr
 x=map(value,0,1023,0,255);    //prevod hodnot z potenciometru na PWM rozsah
 analogWrite(Ledpin,x);        //vystup PWM
 Serial.println(x);            //vystup na terminal
 delay(100);                   //pauza
 }

Jak to vlastně funguje:

Celé ovládání „napětí“ je založeno na takzvaném principu PWM – pulzně-šířkové modulaci.

Když zapneme vypínačem napětí do žárovky (motoru, ledky, odporu), dodáváme tím 100% elektrické energie.

Předpokládejme, že žárovka má spotřebu 10 Wattů.
Když ji rozsvítíme na 1 hodinu, má spotřebu 10 Wh (10 watt-hodin = 10 Wattů za hodinu).
Když ji rozsvítíme na půl hodiny a půl hodiny bude zhasnutá, bude mít celkovou spotřebu 5 Wh.
Když toto rozsvěcení a zhasínání budeme dělat hodně rychle, alespoň 50x za vteřinu, bude se zdát, že žárovka svítí zhruba polovičním svitem.

A toto je celé tajemství „napěťové“ regulace v digitálním světě 🙂

Pro názornost a konkrétní aplikaci pro arduino je tento obrázek:



PWM plnění



Příští týden si vyzkoušíme pasivní regulaci otáček stejnosměrného motoru pomocí tranzistoru a h-můstku.

Šroubováky a hlavy šroubů

Hlavy šroubů

Také vám občas vrtá hlavou, kolik ještě budete potřebovat šroubováků, než budete mít všechny?

Tak vás asi zklamu, ale je jich fakt moc!

Na stránce s imbusy na http://en.wikipedia.org/wiki/Hex_key je vysvětleno hodně, ale i tak to není všechno.

Stránka je anglická, na české toho je velmi málo.

Pokud by se našel nějaký ochotný strojař, který by článek přeložil, rádi ho zveřejníme a jemu uděláme reklamu 🙂

Delta robot – manipulátor

Jak funguje velice zajímavé zařízení, pro laika tajemné kouzlo Delta robot – manipulátor ve 3D, kterému stačí 3 serva a šest táhel?

Velmi pěkná prezentace a vysvětlení je zde, pro nás zůstává jako úkol udělat ho funkční z merkuru:

Kdy se protnou?

Už jste určitě mnohokrát zkoumali, jestli se dají sešroubovat dva díly šikmo.

Pomoci vám může tato tabulka (rozměry jsou v mm, d=délkový rozdíl děr, modrá znamená nulový rozdíl, žlutá=rozdíl do 0,5mm, červená do 1,0mm):

pásek 10,0 d 20,0 d 30,0 d 40,0 d 50,0 d 60,0 d 70,0 d 80,0 d 90,0 d 100,0 d 110,0 d 120,0 d 130,0 d 140,0 d 150,0 d
10,0 14,1 4,1 22,4 2,4 31,6 1,6 41,2 1,2 51,0 1,0 60,8 0,8 70,7 0,7 80,6 0,6 90,6 0,6 100,5 0,5 110,5 0,5 120,4 0,4 130,4 0,4 140,4 0,4 150,3 0,3
20,0 22,4 2,4 28,3 8,3 36,1 6,1 44,7 4,7 53,9 3,9 63,2 3,2 72,8 2,8 82,5 2,5 92,2 2,2 102,0 2,0 111,8 1,8 121,7 1,7 131,5 1,5 141,4 1,4 151,3 1,3
30,0 31,6 1,6 36,1 6,1 42,4 2,4 50,0 0,0 58,3 8,3 67,1 7,1 76,2 6,2 85,4 5,4 94,9 4,9 104,4 4,4 114,0 4,0 123,7 3,7 133,4 3,4 143,2 3,2 153,0 3,0
40,0 41,2 1,2 44,7 4,7 50,0 0,0 56,6 6,6 64,0 4,0 72,1 2,1 80,6 0,6 89,4 9,4 98,5 8,5 107,7 7,7 117,0 7,0 126,5 6,5 136,0 6,0 145,6 5,6 155,2 5,2
50,0 51,0 1,0 53,9 3,9 58,3 8,3 64,0 4,0 70,7 0,7 78,1 8,1 86,0 6,0 94,3 4,3 103,0 3,0 111,8 1,8 120,8 0,8 130,0 0,0 139,3 9,3 148,7 8,7 158,1 8,1
60,0 60,8 0,8 63,2 3,2 67,1 7,1 72,1 2,1 78,1 8,1 84,9 4,9 92,2 2,2 100,0 0,0 108,2 8,2 116,6 6,6 125,3 5,3 134,2 4,2 143,2 3,2 152,3 2,3 161,6 1,6
70,0 70,7 0,7 72,8 2,8 76,2 6,2 80,6 0,6 86,0 6,0 92,2 2,2 99,0 9,0 106,3 6,3 114,0 4,0 122,1 2,1 130,4 0,4 138,9 8,9 147,6 7,6 156,5 6,5 165,5 5,5
80,0 80,6 0,6 82,5 2,5 85,4 5,4 89,4 9,4 94,3 4,3 100,0 0,0 106,3 6,3 113,1 3,1 120,4 0,4 128,1 8,1 136,0 6,0 144,2 4,2 152,6 2,6 161,2 1,2 170,0 0,0
90,0 90,6 0,6 92,2 2,2 94,9 4,9 98,5 8,5 103,0 3,0 108,2 8,2 114,0 4,0 120,4 0,4 127,3 7,3 134,5 4,5 142,1 2,1 150,0 0,0 158,1 8,1 166,4 6,4 174,9 4,9
100,0 100,5 0,5 102,0 2,0 104,4 4,4 107,7 7,7 111,8 1,8 116,6 6,6 122,1 2,1 128,1 8,1 134,5 4,5 141,4 1,4 148,7 8,7 156,2 6,2 164,0 4,0 172,0 2,0 180,3 0,3
110,0 110,5 0,5 111,8 1,8 114,0 4,0 117,0 7,0 120,8 0,8 125,3 5,3 130,4 0,4 136,0 6,0 142,1 2,1 148,7 8,7 155,6 5,6 162,8 2,8 170,3 0,3 178,0 8,0 186,0 6,0
120,0 120,4 0,4 121,7 1,7 123,7 3,7 126,5 6,5 130,0 0,0 134,2 4,2 138,9 8,9 144,2 4,2 150,0 0,0 156,2 6,2 162,8 2,8 169,7 9,7 176,9 6,9 184,4 4,4 192,1 2,1
130,0 130,4 0,4 131,5 1,5 133,4 3,4 136,0 6,0 139,3 9,3 143,2 3,2 147,6 7,6 152,6 2,6 158,1 8,1 164,0 4,0 170,3 0,3 176,9 6,9 183,8 3,8 191,0 1,0 198,5 8,5
140,0 140,4 0,4 141,4 1,4 143,2 3,2 145,6 5,6 148,7 8,7 152,3 2,3 156,5 6,5 161,2 1,2 166,4 6,4 172,0 2,0 178,0 8,0 184,4 4,4 191,0 1,0 198,0 8,0 205,2 5,2
150,0 150,3 0,3 151,3 1,3 153,0 3,0 155,2 5,2 158,1 8,1 161,6 1,6 165,5 5,5 170,0 0,0 174,9 4,9 180,3 0,3 186,0 6,0 192,1 2,1 198,5 8,5 205,2 5,2 212,1 2,1