Hallo ik ben Noé. Ik ben 12 jaar. En ik zit op school LAB Sint-Amands
Ik moet voor school een CHALLENGE doen.
Ik heb gekozen voor deze CHALLENGE: Wat is een goede vriend voor een kind van 12 jaar?
Ik wil nu een soort van robot maken die voldoet aan enkele criteria's. Ik zou graag willen dat als ik op een knop duw dat hij dan een wilkeurige mop vertelt. Ik heb deze moppen al opgenomen. Ik zou graag willen dat dat dan uit de speakers van mijn computer komt. Ik zou ook graag willen dat hij geheimen voor zich houdt. Ik dacht dat ik een systeem kon doen dat je iets intypt en dat je het dan alleen kan zien met het wachtwoord. Als het kan zou ik ook als extra willen dat er enkele lichtjes kniperen. Dit laatste is echt extra. Ik heb thuis al enkele spullen met arduino. Ik kan er wel nog niet zo goed mee werken. Voor school mogen we er iemand bij halen om ons te helpen. Het zou moeten af zijn voor vrijdag. Ik weet dat het een beetje laat is om het te vragen maar het is altijd mogelijk. Kunnen jullie me helpen?
Alvast bedankt,
Noé
Welkom.
De deadline is zeer krap. Als je een geschikte Arduino hebt die als HID kan functioneren (bv Leonardo, Micro) zal het wel haalbaar zijn. Met de genoemde Arduinos kun je commandos naar de PC sturen; bv de naam van het programma dat de opgenomen mop zal afspelen plus de naam van de opgenomen mop.
Als je een Uno/Mega/Nano/Pro Mini hebt zal dat niet werken en zul je naar mijn mening je specificaties moeten aanpassen. Ik kan denken aan bv het tonen van een mop op een LCD scherm.
Welke Arduino heb je? Welke extra zaken heb je (LCD, knoppen, ...).
Ik heb wel ook ergens gelezen dat ik mischien met de serial poort kan werken. En dat ik dan ook een programma op de computer moet schrijven. Zou dat ook lukken. Ik weet wel niet hoe ik dat zou moeten doen.
Ja, dat zal wel lukken.
Dat is het probleem, dat kost je zeer waarschijnlik veel te veel tijd.
Ik denk dat dat de betere optie is; als ik het onderstaande programma voor en Uno R4 WiFi krijg ik geen foutmelding hetgeen betekent dat je die Arduino als keyboard kunt gebruiken.
#include <Keyboard.h>
void setup()
{
Keyboard.begin();
}
void loop()
{
}
Je zult moeten uitvogelen hoe je Windows (ik ga er even vanuit dat je Windows gebruikt) kunt besturen met een toetsenbord.
<ctrl><esc> roept het start menu aan.
- Type
run en druk op <enter>.
- Type de naam van een programma (eventueel met parameters) en druk op
<enter>.
Als je dat een beetje onder de knie hebt kun je diezelfde volgorde door je Unu R4 WiFi laten uitvoeren als een reactie op het drukken op een knop.
Wees voorzichtig
- Je zult Keyboard.press() moeten gebruiken om
<ctrl><esc> te kunnen sturen. Vergeet niet om daarna Keyboard.release() te gebruiken om de toesten weer los te laten. Als je dat niet doet zal je PC denken dat de toetsen ingedrukt zijn.
Je kunt Keyboard.print() gebruiken om een standaard tekst te sturen; daar zijn geen risicos bij tenzij je dat continu stuurt.
- Het is verstandig om een draadje te gebruiken tussen een vrije pin (gebruik INPUT_PULLUP in je programma) en GND. Als die pin hoog is laat je je programma hangen in setup(), als die pin laag is gaat je programma door naar loop(). Op die manier is het redelijk makkelijk om je programma te stoppen na een reset van je Arduino; als toesten vast zitten moet je misschien je PC een reset geven maar je hoeft je niet in onmogelijke bochten te wringen om een de boel weer in een werkende toestand te krijgen. Je kunt het forum doorzoeken naar safetyPin of safety_pin in combinatie met mijn gebruikersnaam; de voorbeelden die je tegenkomt werken ietsje anders maar geven je hopelijk het idee.
Opmerkingen:
- Ik heb geen Uno R4 WiFi en gebruik momenteel Linux (nooit geprobeerd hoe dat werkt).
- Bestudeer het voorbeel van de state-change detection in de IDE; stuur alleen een commando naar de PC als de kop wordt ingedrukt, niet als de knop is ingedrukt. Dit voorkomt dat je een serie commandos naar de PC stuurt inplaats van slechts een commando.
Hallo danku voor je antwoord.
Ik zal dat zeker proberen. Maar ik snap het niet zo goed. Zou je het een beetje duidelijker kunnen uitlegen? Hoe zou ik mijn onderdelen moeten verbinden?
Maar alvast bedankt voor je antwoord.
Dan was mijn tweede vraag ook om met een wachtwoord systeem te werken om geheimen te houden zou je me daar ook mee kunnen helpen?
Zonee, niet erg je hebt me al heel erg geholpen met dit stuk.
Noé
Ik snap de uitleg en de code niet zo goed.
Dat programma was om te testen of de Uno R4 WiFi als een toetsenbord kan fungeren.
Je zou eens kunnen kijken naar Keyboard - Arduino Reference en de functies die daar in worden genoemd.
De onderstaande functies hebben voorbeelden. Je knop moet worden aangesloten tussen pin en GND. Open, voordat je de knop indrukt, notepad of word en zorg ervoor dat dat de voorgrond applicatie is, zodat de acties door die applicatie worden afgehandeld.
Keyboard.begin() - Arduino Reference
Keyboard.press() - Arduino Reference; lees het commentaar aan het begin van het programma omdat het aangepast moet worden voor Windows.
Als je vragen hebt over die twee voorbeelden, vraag en ik zal proberen je vraag te beantwoorden.
Zodra het werkt en je doorhebt hoe het werkt kun je het tweede voorbeeld aanpassen en <ctrl><esc> in plaats van <ctrl>n sturen. Zoals de keycode in Windows voor de linker control key KEY_LEFT_CTRL is, zo is de keycode voor de escape key KEY_ESC. Dat opent het start menu in windows.
Je kunt de key codes vinden in het bestand 'Keyboard.h'; ik kan je niet met zekerheid vertellen waar dat is in jouw installatie.
Hallo
Ik heb een beetje gezocht en ik heb dit programma al gemaakt:
int switchPin = 12;
int switchState = LOW;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(switchPin, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
switchState = digitalRead(switchPin);
if (switchState == HIGH) {
Serial.println("hello"); }
}
Ik weet nu wel niet hoe ik de computer dan een wilkeurige mop kan laten afspelen als hij het bericht krijgt.
Kan je me helpen?
alvast bedankt
Noé
Zover ben je nog niet (tenzij je van plan bent een programma voor je PC te schrijven).
Begin met het Keyboard.press() voorbeeld dat ik gelinkt heb en ga daarna een stap verder en probeer het start menu te openen. Let op dat de knop op pin 2 zit in het voorbeeld en aangesloten is tussen pin en GND.
Jouw knop zit op pin 12 (eenvoudig aan te passen in het programma); je moet dan wel een weerstand van 10k tussen Vcc en pin hebben om een zwevende ingang te voorkomen. En je moet de logica aanpassen omdat deze met jouw opzet omgekeerd is van wat het programma verwacht.
Wat betreft de willekeurige mop
- Je moet de namen van de moppen opslaan in je Arduino programma. De Arduino zal daar later gebruik van maken.
- Je moet weten welk programma wordt aangeroepen als je dubbelklikt op een mop in Windows explorer.
- Vervolgens kun je in het Windows startmenu het run command aanroepen en de naam van dat programma met als argument het volledige pad naar de mop; dit moet je werkend krijgen voordat je verder kunt.
Morgen is er weer een dag, prettige avond en puzzel ze.
hallo hoe zou ik die dingen die je hebt gezegd moeten doen?
Ik snap niet zo goed hoe de keyboard werkt. Ik begrijp engels ook niet zo goed.
Welke codes moet ik intypen om er voor te zorgen dat windows een wilkeurig mp3 bestand afspeelt? En waar moet ik dat intypen?
Noé
Hallo zou dit programma ook werken op een arduino uno?
Nee, dat werkt alleen met een Arduino die als HID (toetsenbord, muis) kan werken; dus je Uno R4 WiFi.
Begin met de Windows kant zodat je begrijpt hoe je een MP3 of WAV kunt spelen.
Op je toetsenbord (niet de Arduino)
- Druk de control en de escape tegelijk in. Dit opent het start menu
- Type run. Je zou een klein schermpje moeten krijgen waar je commandos in kunt typen.
- Type een commando; bv notepad. Dit zou notepad moeten openen.
Wat gebeurt er?
Sluit notepad.
Volgende stap
- Open windows explorer en ga naar de directory waar je moppen staan opgeslagen.
- Open ook taskmanager in Windows.
- Dubbel klik op een mop om die af te spelen en kijk wat er gebeurt in de task manager.
- Je zult een nieuw programma zien. Je weet dan hoe het programma heet in windows dat je mop afspeelt.
Laatste stap
- Herhaal nu de eerste actie met het indrukken van kbd>control en de escape en type run.
- In het kleine schermpje type je nu de naam van het programma dat je in de vorige stap gevonden hebt.
- Dit zou dat programma moeten openen.
- Sluit het programma.
Als dit werkt
- Begin weer met kbd>control en escape en type run.
- Type nu de naam van het programma gevolgd door een spatie gevolgd door het volledige pad van je mop.
- Dit zou je mop moeten afspelen.
Laat me aub horen waar je vast komt te zitten; zoals gezegd (denk ik) gebruik ik op dit moment Linux en kan dit gebeuren niet precies testen.
Als je begrijpt hoe dit werkt kun je dit gebeuren simuleren met je Arduino R4 WiFi.
Met de gegeven benadering zal Windows geen willekeurige mop afspelen. Het idee is dat je de namen van de moppen opslaat in de Arduino en er daar eentje willekeurig van kiest. Die combineer je met het commando en dat stuur je naar de PC
Als het eerdere deel met puur Windows werkt, kun je een programma schrijven voor je Uno R4 WiFi. Het onderstaande programma zal de eerste stap zijn.
#include <Keyboard.h>
const uint8_t buttonPin = 2;
void setup()
{
// start toetsenbord emulatie
Keyboard.begin();
// knop tussen GND en pin; gebruik INPUT_PULLUP
// zodat knop hoog is als deze niet ingedrukt is
pinMode(buttonPin, INPUT_PULLUP);
}
void loop()
{
// als de knop is ingedrukt
if (digitalRead(buttonPin) == LOW)
{
// acvtiveer het windows start menu
Keyboard.press(KEY_LEFT_CTRL);
delay(10);
Keyboard.press(KEY_ESC);
delay(10);
Keyboard.releaseAll();
// type 'run'
Keyboard.print("run");
delay(10);
// en druk op de return key
Keyboard.press(KEY_RETURN);
delay(10);
Keyboard.releaseAll();
// stuur het commando dat uitgevoerd moet worden
delay(100);
Keyboard.print("notepad");
delay(10);
// en druk op de return key
Keyboard.press(KEY_RETURN);
delay(10);
Keyboard.releaseAll();
// om te voorkomen dat je constant data naar de PC stuurt
// wachten we hier totdat de knop wordt losgelaten.
while(digitalRead(buttonPin) == LOW)
{
// wachten
}
// even wachten om de contact dender voorbij te laten gaan.
delay(50);
}
}
Hallo
Ik weet niet wat er gebeurt maar ik kan mijn programma niet meer uloaden via mijn COM poort. Mijn computer denkt de ganse tijd dat mijn arduino op een andere poort verbonden is. Maar op mijn chromebook werkt het wel. Zou je ook de toetsencombinaties voor chromebook weten?
Alvast bedankt
Noé
Geen idee. Maar je kunt altijd uploaden met de chromebook en daarna je Arduino op de PC aansluiten.
Ik heb een vermoeden wat je bedoelt. Het is normaal dat bij een Arduino die je als HID kunt gebruiken de poort verandert tijdens het uploaden. Bv normaliter COM9 en tijdens het uploaden COM6. Ik heb zelf geen Uno R4 WiFI maar gebruik Leonardos, Micros en Pro Micros; de oplossing om upload problemen op te lossen is om, zodra de IDE het geheugen gebruik aangeeft, de reset knop twee keer snel achter elkaar in te drukken en los te laten.
Het is mogelijk dat dat niet direct werkt; de IDE zal dan aangeven dat de originele poort niet gevonden kan worden. In dat geval
- Zowel je Uno als de Uno R4 WiFi op de PC aansluiten.
- Voor de poort de poort van de Uno kiezen, niet die van de Uno R4 WiFi.
- Voor het bord waar je voor compileert de Uno R4 WiFi kiezen.
- Een upload starten.
- Zodra de IDE het geheugen gebruik geeft, de reset knop tween keer snel achter elkaar indrukken en weer los laten.
Hallo
Ik denk dat het werkt maar als ik op de knop duw gebeurt er niks.
Noé
Hallo
Ik denk dat er een probleem is met het programma.
Ik heb dit geprobeerd en het lijkt te werken.
Maar als ik op de knop druk gebeurt er niks.
Weet jij wat er mis is?
Noé
Ik snap het niet zo goed het lukt me ook niet om het op te lossen.
Noé
Als je upload via de chromebook en daarna op windows aansluit en je drukt op de knop gebeurt er niets?
In dat geval weet ik niet zeker wat er fout gaat en zou ik adviseren om je bedrading te controleren en opnieuw te controleren. De knop moet tussen pin en GND; heb je dat inderdaad gedaan? Zit de knop inderdaad op pin 2 en niet op een andere pin? Je kunt de pin aanpassen op deze regel
const uint8_t buttonPin = 2;
Hier is een programma dat alleen het start menu zou moeten openen. Toegevoegd is het oplichten van de ingebouwde LED zodat je kunt zien of het indrukken en loslaten van de knop inderdaad gedetecteerd wordt.
Ik heb de knop op pin 12 moeten zetten en dit roept inderdaad het start menu op.
#include <Keyboard.h>
// aanpassen naar de pin die je gebruikt
const uint8_t buttonPin = 12;
void setup()
{
// start toetsenbord emulatie
Keyboard.begin();
// knop tussen GND en pin; gebruik INPUT_PULLUP
// zodat knop hoog is als deze niet ingedrukt is
pinMode(buttonPin, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop()
{
// als de knop is ingedrukt
if (digitalRead(buttonPin) == LOW)
{
digitalWrite(LED_BUILTIN, HIGH);
// acvtiveer het windows start menu
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_ESC);
delay(100);
Keyboard.release(KEY_ESC);
Keyboard.release(KEY_LEFT_CTRL);
// om te voorkomen dat je constant data naar de PC stuurt
// wachten we hier totdat de knop wordt losgelaten.
while (digitalRead(buttonPin) == LOW)
{
// wachten
}
// even wachten om de contact dender voorbij te laten gaan.
delay(150);
}
else
{
digitalWrite(LED_BUILTIN, LOW);
}
}
Als de LED niet aangaat als je de knop indrukt zit je bedrading verkeerd.