ú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:
- Plug in USBasp
- Download Zadig from http://zadig.akeo.ie
- Start zadig
- Options > List all devices
- Select USBasp from the drop down menu
- Select libusbK(v3.0.7.0) driver
- Click Install
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.
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č
eBayhttp://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 scopeJe způsobena definicí WIRE, která má hodnotu Wire1 (možná překlep)
#define WIRE Wire1
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
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
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
Zdroj:
http://forum.arduino.cc/index.php?topic=283086.0
#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.
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
- Current sensor chip: ACS712ELC-05B
- pin inserted 5V power supply,on board power indicator;
- Can measure plus and minus 5A current,corresponding simulation output 185mV/A ;
- When testing no current though,the output voltage is VCC/2; (2,5V ~ 2500mV)
- PCB board dimension: 31(mm)x13(mm)
- NOTE: ACS712 is based on the principle of Hall detectionon,please try to avoid the magnetic field affect when using it.
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
Spínání spotřebiče přes Wifi z Android aplikace
Za cca 160,-Kč se dá na eBay koupit modul který připojíte do lokální WiFi sítě a pomocí Android Aplikace můžete zapínat a vypínat připojený spotřebič. Poměr cena výkon super. Teď ještě přijít na to k čemu to využít ;)
http://www.ebay.com/itm/WiFi-Wireless-Smart-Switch-Relay-Module-for-Smart-Home-Apple-Android-Smartphones/222280372339?_trksid=p3693.c100102.m2452&_trkparms=ao%3D1%26asc%3D20140212121249%26meid%3D65bc6aac2488467a8deae5a13ec2ebe5%26pid%3D100102%26
http://www.ebay.com/itm/WiFi-Wireless-Smart-Switch-Relay-Module-for-Smart-Home-Apple-Android-Smartphones/222280372339?_trksid=p3693.c100102.m2452&_trkparms=ao%3D1%26asc%3D20140212121249%26meid%3D65bc6aac2488467a8deae5a13ec2ebe5%26pid%3D100102%26
čtvrtek 2. února 2017
9. Dálkoměr - HC-SR04
Měříme vzdálenost s HC-SR04
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);
}
Zdroje:
http://arduino8.webnode.cz/news/lekce-9-merime-vzdalenost-s-hc-sr04/
http://marciopmm.blogspot.cz/2013/04/ola-amigos-como-estou-sempre-buscando.html
http://arduino8.webnode.cz/news/lekce-9-merime-vzdalenost-s-hc-sr04/
http://marciopmm.blogspot.cz/2013/04/ola-amigos-como-estou-sempre-buscando.html
http://forums.netduino.com/index.php?/topic/139-netduino-and-ping-ultrasonic-sensor/
https://blogelect.wordpress.com/2016/01/04/interfacing-hc-sr04-ultrasound-sensor-with-pic-microcontroller/
Tutorial s použitím přerušení
http://homediyelectronics.com/projects/arduino/arduinoprogramminghcsr04withinterrupts/?p=4
https://blogelect.wordpress.com/2016/01/04/interfacing-hc-sr04-ultrasound-sensor-with-pic-microcontroller/
Tutorial s použitím přerušení
http://homediyelectronics.com/projects/arduino/arduinoprogramminghcsr04withinterrupts/?p=4
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/
Podívejte se na video
Zdroj:
http://rookieelectronics.com/servo-tester/
Přihlásit se k odběru:
Příspěvky (Atom)