Microcontroller speeltjes 4

Door enermax op zondag 16 februari 2020 21:21 - Reacties (4)
Categorie: -, Views: 2.551

Wil je uitbreiden door een mp3tje af te spelen via wifi, of je Robot RD2geluiden laten maken? Ik ben heel erg te spreken over de esp32 bordjes daarom heb ik even vandaag uitgezocht, hoe je er geluid uit krijgt met de TTGO-display. Dit heb ik snel in elkaar geprutst (video). Voor de arduino raad ik aan deze te gebruiken.
ttgoArduino dfplayer 3volt
Als basis dient de dfplayer mini. €1.32
https://tweakers.net/ext/f/SOh0vKaeZh2lvFh1L2jgZVvg/full.jpg
Daarbij heb je nog een geheugenkaart nodig. Ik zelf heb de Kingston Canvas 64GB gebruikt.. Maar je kan natuurlijk ook een andere gebruiken.

Daarnaast heb je nog een speaker nodig. Mocht je er geen hebben, kijk eens in een oude pc. Daar vind je een betere dan in de link. Uiteindelijk komt het er zo uit te zien als je een passieve speaker gebruikt.
ttgo display passieve speaker.
Optioneel kun je nog de jackplug nog gebruiken.. Ik heb nog een mobiel speakertje liggen met batterij en jackplug stekkertje, vandaar deze bestelling.
Actieve speaker.
Aansluitschema
Je kunt kiezen voor de speaker, of de mini-jack of zelfs allebei.
TTgo-display DF player
Geheugenkaart voorbereiden
Maak een mapje mp3 aan op de (lege)geheugenkaart.
Zet daarin de liedjes met de naam: 0001.mp3, 0002.mp3 etc

Code
Onderstaande code zal 2 geluiden afspelen. Het beeld wordt niet aangestuurd. De mp3 speler heb ik in de software op pin 26 en 27 gezet. Mag je aanpassen.Eerst moet je de 2 librarys aanvinken in Arduino.
  • espsoftwareserial library
  • DFPlayer_Mini_Mp3_by_Makuna library
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// this example will play a track and then 
// every five seconds play another track
//
// it expects the sd card to contain these two files
// but doesn't care whats in them
//
// sd:/mp3/0001.mp3
// sd:/mp3/0002.mp3


#include <SoftwareSerial.h> //espsoftwareserial library
#include <DFMiniMp3.h>      //DFPlayer_Mini_Mp3_by_Makuna library

// implement a notification class,
// its member methods will get called 
//
class Mp3Notify
{
public:
  static void OnError(uint16_t errorCode)
  {
    // see DfMp3_Error for code meaning
    Serial.println();
    Serial.print("Com Error ");
    Serial.println(errorCode);
  }

  static void OnPlayFinished(uint16_t globalTrack)
  {
    Serial.println();
    Serial.print("Play finished for #");
    Serial.println(globalTrack);   
  }

  static void OnCardOnline(uint16_t code)
  {
    Serial.println();
    Serial.print("Card online ");
    Serial.println(code);     
  }

  static void OnUsbOnline(uint16_t code)
  {
    Serial.println();
    Serial.print("USB Disk online ");
    Serial.println(code);     
  }

  static void OnCardInserted(uint16_t code)
  {
    Serial.println();
    Serial.print("Card inserted ");
    Serial.println(code); 
  }

  static void OnUsbInserted(uint16_t code)
  {
    Serial.println();
    Serial.print("USB Disk inserted ");
    Serial.println(code); 
  }

  static void OnCardRemoved(uint16_t code)
  {
    Serial.println();
    Serial.print("Card removed ");
    Serial.println(code);  
  }

  static void OnUsbRemoved(uint16_t code)
  {
    Serial.println();
    Serial.print("USB Disk removed ");
    Serial.println(code);  
  }
};

// instance a DFMiniMp3 object, 
// defined with the above notification class and the hardware serial class
//
//DFMiniMp3<HardwareSerial, Mp3Notify> mp3(Serial1);

// Some arduino boards only have one hardware serial port, so a software serial port is needed instead.
// comment out the above definition and uncomment these lines
SoftwareSerial secondarySerial(26, 27); // RX, TX
DFMiniMp3<SoftwareSerial, Mp3Notify> mp3(secondarySerial);

void setup() 
{
  Serial.begin(115200);

  Serial.println("initializing...");
  
  mp3.begin();

  uint16_t volume = mp3.getVolume();
  Serial.print("volume ");
  Serial.println(volume);
  mp3.setVolume(24);
  
  uint16_t count = mp3.getTotalTrackCount();
  Serial.print("files ");
  Serial.println(count);
  
  Serial.println("starting...");
}

void waitMilliseconds(uint16_t msWait)
{
  uint32_t start = millis();
  
  while ((millis() - start) < msWait)
  {
    // calling mp3.loop() periodically allows for notifications 
    // to be handled without interrupts
    mp3.loop(); 
    delay(1);
  }
}

void loop() 
{
  Serial.println("track 1"); 
  mp3.playMp3FolderTrack(1);  // sd:/mp3/0001.mp3
  
  waitMilliseconds(5000);
  
  Serial.println("track 2"); 
  mp3.playMp3FolderTrack(2); // sd:/mp3/0002.mp3
    
  waitMilliseconds(5000); 
}

Microcontroller speeltjes 3

Door enermax op zondag 16 februari 2020 12:07 - Reacties (0)
Categorie: -, Views: 1.839

ESP32 Camera module €6.50 kun je gebruiken om een robot te maken. Via wifi, bezoek je de webpagina met de smartphone, via knoppen op je scherm kun je de robot bedienen en de video bekijken. Er zit al een felle led op en er is plek voor 4 motoruitgangen. Een stand alone stand is mogelijk, er is nog plek vrij voor ultrasone sensor aan te sluiten. Dit bordje heeft helaas geen usb connector. Om te programmeren sluit je hem aan op de arduino of FTDI.

ESP32 camera
Demo versie gekoppeld via arduino

https://tweakers.net/ext/f/4qdS4OxGRnEhKcaRZOTHzOw5/medium.png
Video+Code hulp
Versie met buttons op je smartphone + camera beeld

TT go display
Ik heb de TTGO in een nieuwe post geplaatst.
ttgo

Microcontroller speeltjes 2

Door enermax op zondag 16 februari 2020 12:01 - Reacties (0)
Categorie: -, Views: 1.136

TT-Go display is een leuk ESP32 bordje klik. Wifi is geintegreerd maar ook een oledscherm, 2 knoppen, usb en een batterij (laad)aansluiting. In het begin had ik compiler problemen. Via deze video is het wel gelukt. Als je deze error krijgt: digitalWrite(TFT_BL, TFT_BACKLIGHT_ON); dan maak er van digitalWrite(TFT_BL, 1);
ttgo
Hulp video
TTGo


Als het je lukt bovenstaande code te flashen dan kun je zelf een plaatje maken met: Image converver 565.
Save het plaatje over het originele bmp.h plaatje. Open de file en schrijf het woord ttgo op de goede plek.
Origineel: const unsigned short 16998b6[40000] PROGMEM={
Aangepast: const unsigned short ttgo[400000] PROGMEM={

Een simpel voorbeeld waarbij het logo van Tweakers als bmp.h is opgeslagen. Met knop a of b lees je het voltage uit, of wordt er 5x tweakers geschreven.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <TFT_eSPI.h>
//#include <SPI.h>
#include <Wire.h>
#include "bmp.h"

#ifndef TFT_DISPOFF
#define TFT_DISPOFF 0x28
#endif

#ifndef TFT_SLPIN
#define TFT_SLPIN   0x10
#endif

#define TFT_MOSI            19
#define TFT_SCLK            18
#define TFT_CS              5
#define TFT_DC              16
#define TFT_RST             23

#define TFT_BL          4  // Display backlight control pin
#define ADC_EN          14
#define ADC_PIN         34
#define BUTTON_1        35
#define BUTTON_2        0

TFT_eSPI tft = TFT_eSPI(135, 240); // Invoke custom library

int vref = 1100; //voltage measurement variable

//! Long time delay, it is recommended to use shallow sleep, which can effectively reduce the current consumption
void espDelay(int ms){   
    esp_sleep_enable_timer_wakeup(ms * 1000);
    esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH,ESP_PD_OPTION_ON);
    esp_light_sleep_start();
}

void showVoltage() {
    static uint64_t timeStamp = 0;
    if (millis() - timeStamp > 1000) {
        timeStamp = millis();
        uint16_t v = analogRead(ADC_PIN);
        float battery_voltage = ((float)v / 4095.0) * 2.0 * 3.3 * (vref / 1000.0);
        String voltage = "Voltage :" + String(battery_voltage) + "V";
        Serial.println(voltage);
        tft.fillScreen(TFT_BLACK);
        tft.setTextSize(2);
        tft.setTextDatum(MC_DATUM);
        tft.drawString(voltage,  tft.width() / 2, tft.height() / 2 );
    }
}

void tweakers() {
    tft.setCursor(0, 0);
    tft.fillScreen(TFT_BLACK);  //other examples TFT_red 
    tft.setTextColor(TFT_WHITE); //set text color
    for (int i = 1; i < 6; i++) { //print tweakers different size
         tft.setTextSize(i);
         tft.println("tweakers");
    }
   tft.setTextSize(1);
}

void setup() {
    pinMode(TFT_BL, OUTPUT); // Set backlight pin to output mode
    pinMode(BUTTON_1, INPUT);
    pinMode(BUTTON_2, INPUT);
    Serial.begin(115200);
    Serial.println("Start");
    tft.init();
    tft.setRotation(1); // print horizontal or vertical
    tft.setCursor(0, 0);
    digitalWrite(TFT_BL, 1); // Turn backlight on.

    tft.setSwapBytes(true);
    tft.pushImage(0, 0,  240, 135, ttgo); //sent image to display; change dimension if needed
    tft.setCursor(0, 0);
    tft.setTextSize(2);
    tft.println("Press button A or B");
}

void loop() 
{
  if((digitalRead(BUTTON_1))==0){
    showVoltage();
  }
  if((digitalRead(BUTTON_2)==0)){
    tweakers();
  }
  espDelay(100);
}


Bonus:
Als dit alles gelukt is, tijd voor een spelletje Snake of Space invaders
https://tweakers.net/ext/f/69LxojxYHQ4h1qWGcqSvF1b8/medium.gif https://tweakers.net/ext/f/VAnsUSLBSeSxPLPQdJTk6gAd/medium.gif

Bonus 2
Een video met honderden voorbeelden voor dit bordje.

Microcontroller speeltjes 1

Door enermax op zondag 16 februari 2020 08:50 - Reacties (2)
Categorie: -, Views: 2.033

Beginnen met micro-controllers is nog nooit zo gemakkelijk en goedkoop geweest. Onderdelen gebaseerd op arduino platform, makkelijk om te leren en geen breadboard nodig :)

Begin met het knipperen van een led, die al is ingebouwd in de Arduino Code. Daarna kun je starten met uitlezen ultrasoon sensor Code.Optioneel kun je de robot afmaken door voeding + motoren aansluiten. Code+schema.Als dit gelukt is, kun je eventueel andere modules testen (lijnsensor+valsensor), of naar de iets moeilijkere ESP32 bordjes, deel 2 of deel 3.