Arduino propellerklok

Zaag de bladen van je ventilator af en wikkel een spoel op de as dit is de bewegende spoel , maak een 2de vaste spoel die daar net overheen past , dan ben je bijna klaar.

Nu als ik dat met deze 2 spoelen doe, kan dit dan met gelijkspanning? En ik weet dat het aantal wikkelingen wel gelijk moeten zijn maar maakt het aantal wikkelingen ook uit?

Lucky Luke

Golden Member

Op 15 november 2015 14:21:36 schreef MGP:
Heeft hij ook gezegd waarom?

Het lijkt mij heel raar om een analoog signaal te kiezen tov een digitaal signaal.
Met dat laatste kun je makkelijk een interrupt genereren.

Hoeft niet eens met een interrupt, maar sowiso lijkt mij een digitaal signaal voor de hand liggender, 1 puls per omwenteling. (Dat kun je met een analoge sensor uiteraard ook voor elkaar krijgen, maar iets ingewikkelder, omdat je er alsnog een digitaal signaal van moet maken: magneet dichtbij of niet)

Op 28 december 2015 17:55:47 schreef insert_x:
[...]

Nu als ik dat met deze 2 spoelen doe, kan dit dan met gelijkspanning? En ik weet dat het aantal wikkelingen wel gelijk moeten zijn maar maakt het aantal wikkelingen ook uit?

Aantal wikkelingen hoeft juist niet gelijk te zijn. De resonantiefrequentie moet wél gelijk zijn, maar die kun je met condensatoren nog wat bijtunen. Op gelijkspanning gaat het niet werken.

Probeer een functiegenarator, scope, wikeldraad en handje condensatoren te pakken te krijgen, dan kun je 't uitproberen.

Eluke.nl | De mens onderscheid zich van (andere) dieren door o.a. complexe gereedschappen en bouwwerken te maken. Mens zijn is nerd zijn. Blijf Maken. (Of wordt, bijvoorbeeld, cultuurhistoricus)

maar als ik deze 12V AC dan gebruik kan ik deze dan rechtstreeks op mijn arduino nano board de Vin aansluiten of moet ik deze eerst dan nog gelijk richten?

sla een ring ijzer om je ventilator met een groef,
koperdraadje eromheen, met een veer om hem op spanning te houden.

even opletten, de 2 ringen moeten wel geisoleerd van elkaar zijn (logisch als je op de ene 5V zet en de andere 0V.)

sleepcontacten zijn veel makkelijker, opstappen naar geheel contactloos met spoelen kan daarna nog altijd.

inspiratie:
http://www.carlpisaturo.com/image/Octo%20Slip%20Ring%20Sys%20300.jpg

Voor een 12V wisselspanning om te zetten naar een gelijkspanning wil ik gebruik maken van een bruggelijkrichter, nu weet ik dat als ik deze wil omzetten ik aan de uitgang een spanning van ca. 17V zal hebben dus de vragen die ik nu heb is welke waarden ik kan gebruiken of hoe ik ze kan berekenen voor de weerstand (om dan uiteindelijk 12V te bekomen) en voor de elektrolytische condensator voor een zo goed mogelijke afvlakking te bekomen.

Mvg,
insert_x

Willie W

Golden Member

Na jou 12 Volt ac plaats je een gelijkrichter, dan de afvlak-elko, en dan een stabilisator.
Voor 12 V dc kun je een ua 7812 oid gebruiken.

Ok nu heb ik nog eens een vraag en dat is de volgende, Ik maak dus mijn schema's in het programma eagle en nu wil ik een bruggelijkrichter in mijn schema plaatsen zoals deze:
http://g02.a.alicdn.com/kf/HTB1fCbMIpXXXXXdXFXXq6xXFXXXb/2W10-Round-font-b-Bridge-b-font-2A-1000V-font-b-bridge-b-font-font-b.jpg

Nu vroeg ik mij af of deze al ergens standaard te vinden is in eagle of is er hier een speciale library voor nodig en waar zou ik deze eventueel kunnen vinden?

Alvast bedankt

[Bericht gewijzigd door insert_x op zondag 3 januari 2016 17:44:19 (79%)

buckfast_beekeeper

Golden Member

Normaal in de rectifier lib.

Van Lambiek wordt goede geuze gemaakt.

Hey ik ben hier nog eens met een vraag over mijn spoelen voor de energieoverdracht. Nu ga ik testen of ik wel genoeg windingen heb maar ik zal dit dus ook moeten verklaren, nu zoek ik dus de formule waar ik dit meer kan berekenen. Weet iemand van jullie toevallig die formule voor onder andere het aantal wikkelingen te berekenen?

De hoofdzaak is hier dus om te kijken of ik wel genoeg windingen heb of ik er zou moeten bij winden.

(NOTE: de enige gegevens die ik echt heb is de dikte van de draad en hoe lang valt nog te bepalen, maar meer heb ik hier niet echt omdat het een zelf gewikkelde spoel is met spoeldraad besteld op Conrad (dikte is 0.5mm))

alvast bedankt.

zoek eens naar spoelformules.
(ik verwacht zo dat deze meer in de buurt komen dan echte transformator berekeningen aangezien die primaire en secundaire nauwelijks gekoppeld zijn in zo'n opstelling, maar dat hangt natuurlijk weer aan je fabricage skills af)

zelfinductie en frequentie bepaald impedantie/weerstand
weerstand bepaald stroom
stroom bepaald vermogen / temperatuur
en windingen, draaddiameter etc bepaald de zelfinductie weer.

reken ze

Lucky Luke

Golden Member

Het hele flauwe antwoord is natuurlijk n=(l-L)/2πr , met n het aantal wikkelingen, l de lengte van je draad, L de lengte van de aansluitdraden van de spoel, en r de omtrek van je spoel... Is n minder dan uit de formule komt, dan zit je met een spaghettibende...

Maar daar heb je niks aan. Het gaat om de resonantiefrequentie van je primaire en secundaire spoel. En hoe goed je ze gekoppeld krijgt (Magnetisch).

(elektro)magnetisme is ook niet mijn sterkste vak, maar met 1 spoel (+ condensators parallel, dus eigenlijk een LC kring) op een functiegenerator en 1 LC kring op een LEDje draadloos energie overdragen lukt me toch prima.

En dat lijkt me een prima proefje om eens te proberen, voor je aan de energieoverdracht voor een propellerklok begint. (Aan hoe fel het ledje brand kun je zien hoe goed de koppeling is.)

Eluke.nl | De mens onderscheid zich van (andere) dieren door o.a. complexe gereedschappen en bouwwerken te maken. Mens zijn is nerd zijn. Blijf Maken. (Of wordt, bijvoorbeeld, cultuurhistoricus)

Ik heb nu een programma gevonden voor het maken van letters/cijfers met mijn clock maar nu staat in het begin:

c code:

#include <font.h>

Ik heb nu al gezocht op het internet voor deze lib maar het enige wat ik kan vinden is stukjes code die font.h zouden moeten voorstellen maar ik heb nu geen idee hoe ik hier een library van zou kunnen maken, zou iemand mij kunnen zeggen waar ik deze kan vinden of helpen hier een library van de maken.

Lucky Luke

Golden Member

Mogelijk een eigen library van de maker van dat stuk code. Meer info waarschijnlijk te vinden daar waar ook de code vandaan komt.

Eluke.nl | De mens onderscheid zich van (andere) dieren door o.a. complexe gereedschappen en bouwwerken te maken. Mens zijn is nerd zijn. Blijf Maken. (Of wordt, bijvoorbeeld, cultuurhistoricus)

Hallo,

Die brugcel is toch wel standaard in eagle te vinden. Althans bij mij wel onder de naam RB1A. Een tip als je wilt zoeken in de library dan is het handig om * er voor en achter te zetten. Zo dus: *RB1A*

Heb je alle library wel aan staan? Anders moetje in de control panel even me je rechtermuis klik op de naam library klikken en dan op use all drukken. Dan moet hij er wel weer bij staan.

Brandon.

Hallo, ik ben nu bezig met gewoon wat programmeren in arduino en ik kwam op arrays nu heb ik dit stukje code

c code:

int timer = 1000;        
int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9}; 
int pinCount = 8;          


void setup() {
  
  for (int i = 0; i < pinCount; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
  pinMode(hePin,INPUT);
}

void loop() {
  // loop from the lowest pin to the highest:
  for (int i = 0; i < pinCount; i++) {
    digitalWrite(ledPins[7], HIGH);
    digitalWrite(ledPins[6], HIGH);
    delay(timer);
    digitalWrite(ledPins[7], LOW);
    digitalWrite(ledPins[6], LOW);
    delay(timer);
    }  
  }

Nu wil in plaats van telkens dit te doen:

c code:

    digitalWrite(ledPins[7], HIGH);
    digitalWrite(ledPins[6], HIGH);

er voor zorgen dat ik de 2 in 1 commandoregel te doen, heeft iemand enig idee hoe ik dit kan doen, heb al gezocht maar vind enkel terug hoe men 1 LED laat branden of zoals hierboven weergegeven.

Hallo ik ben hier met een nieuwe vraag ik heb nu mij programma bijna volledig uitgewerkt en kan letters laten verschijnen op mijn propellerclock, nu heb ik een programma waar ik elke letter afzonderlijk bij kan laten verschijnen maar nu zoek ik een oplossing voor een volledig woord zonder dat ik elke letter opnieuw moet aanhalen. Hiervoor wil ik gebruik maken van strings zodat ik eender welk woord kan laten verschijnen door middel van slechts 3 for loops, voor 1 letter had ik 2 for loops nodig, nu heb ik geen flauw idee hoe ik er kan voor zorgen dat ik met slechts 1 for loop meer een volledig woord kan laten verschijnen. Dit is de code die ik momenteel heb met al de string aangehaald

c code:

char Str1[5] = "TEST";

(Header files zijn nog eens apart maar daar heb ik het volledige alfabet uitgeschreven.)

c code:

int timer = 410;
int pinCount = 8;
int rowCount = 7;
int hallPin = 12;
int hallState = 0;

char Str1[5] = "TEST"; // 5 = 4 vooor TEST  + 1 voor de nullbyte \0

#include "DrieD_Weergave.h"

void setup() 
{
  for (int thisPin = 2; thisPin < pinCount+2; thisPin++) 
  {
    pinMode(thisPin, OUTPUT);
  }
  pinMode(hallPin, INPUT);
}

void loop() 
{
  char ascii = 'T';
  hallState = digitalRead(hallPin);
  if(hallState == LOW)
  {
    for (int  rij = 0; rij < rowCount; rij ++)
    {
      for (int thisPin = 2; thisPin < pinCount+2; thisPin++) 
      {
        digitalWrite(thisPin, LETTERS[ascii-65][rij][thisPin-2]);
      }
      delayMicroseconds(timer);
    }
    
    delayMicroseconds(500);
  }
  else
    {
    for (int thisPin = 2; thisPin < pinCount+2; thisPin++) 
      {
        digitalWrite(thisPin, HIGH);
      }     
    }
}

Iemand een idee hoe ik en ook waar ik mijn forloop moet/kan opbouwen? (het is niet de bedoeling dat ik mijn programma op een volledig andere manier ga schrijven.)

Mvg

Je kan toch de variabele "ascii" iedere keer een nieuwe waarde geven met Str1[i ] of zoiets?

Overigens kan het allemaal wat makkelijker als je de hele port in 1x schrijft.

GMT+1

Op 10 februari 2016 18:51:46 schreef Progger:
Je kan toch de variabele "ascii" iedere keer een nieuwe waarde geven met Str1[i ] of zoiets?

Overigens kan het allemaal wat makkelijker als je de hele port in 1x schrijft.

En hoe zou ik dit dan kunnen aanpassen in mijn code?

Hey hier ben ik nog eens,
ik ben nu de laatste dingen aan het afwerken aan mijn propellerklok, nu is het enige probleem dat ik heb is: Ik heb een app gemaakt voor op men GSM in "app inventor 2" en ik heb 10 knoppen daarbij. Als ik op een knop druk met een bepaald woord bv "POV" (is een van de knoppen) dan moet er op de propellerklok ook POV verschijnen. Nu is dit niet het geval het enige wat ik zie is een vaag aantal LEDs die even kortstondig oplichten ik vermoed (ben het bijna 100%) dat het licht aan mijn programma maar ik kan maar niet vinden wat het probleem zou kunnen zijn.

Dit is het programma momenteel (werkt via Bluetooth):

c code:

int timer = 410;
int spatie = 1000;
int pinCount = 8;
int rowCount = 7;
int hallPin = 12;
int hallState = 0;
int i = 0;
char ascii;
String readString;

#include "DrieD_Weergave.h"

void setup() 
{
  Serial.begin(9600);
  for (int thisPin = 2; thisPin < pinCount+2; thisPin++) 
  {
    pinMode(thisPin, OUTPUT);
  }
  pinMode(hallPin, INPUT);
}

void loop() 
{
  char woord[] = "";
  while(1)
  {
    int lengte = strlen(woord)-1;
    while(Serial.available()) 
    {
       delay(3);
       char c = Serial.read();
       readString += c;
    }
    if (readString.length() >0) 
    {
       Serial.println(readString);;
       if(readString == "WELKOM")
       {
       char woord[] = "WELKOM";
       }
       if(readString == "SL")
       {
       char woord[] = "SL";
       }
       if(readString == "JASPER")
       {
       char woord[] = "JASPER";
       }
       if(readString == "GIP")
       {
       char woord[] = "GIP";
       }
       if(readString == "EE")
       {
       char woord[] = "EE";
       }
       if(readString == "POV")
       {
       char woord[] = "POV";
       }
       if(readString == "APPEL")
       {
       char woord[] = "APPEL";
       }
       if(readString == "LEDS")
       {
       char woord[] = "LEDS";
       }
       if(readString == "TEST")
       {
       char woord[] = "TEST";
       }
       if(readString == "DRAAI")
       {
       char woord[] = "DRAAI";
       }
        readString = "";
     }
  
      hallState = digitalRead(hallPin);
      if(hallState == LOW)
      {
      for (i = lengte; i > -1 ; i--)
      {
         ascii = woord[i];
         for (int  rij = 0; rij < rowCount; rij ++)
         {
            for (int thisPin = 2; thisPin < pinCount+2; thisPin++) 
            {
               digitalWrite(thisPin, LETTERS[ascii-65][rij][thisPin-2]);
            }
            delayMicroseconds(timer);
         }
      }

    }
    else
    {
      for (int thisPin = 2; thisPin < pinCount+2; thisPin++) 
      {
        digitalWrite(thisPin, HIGH);
      }     
    }
  }
}
Lucky Luke

Golden Member

Werkt het wel als je test met een bedrade seriële verbinding?

Trouwens, waarom in vredesnaam:

if(readString == "JASPER")
{
char woord[] = "JASPER";
}

en niet strcpy(woord,readstring) oid? Dan wel woord[] groot genoeg maken voor alles wat je maar inlees, en afdwingen dat er niks groters in gestopt word, ander schrijf je voorbij het eind van die char array en dan gebeuren er rare dingen.

Trouwens, if(readString == "WELKOM") gaat toch ook niet goed? Je vergelijkt de pointer naar readstring met de pointer naar "WELKOM", en als die gelijk zijn ga je iets doen... (Of doet arduino onder de motorkap strcomp? kun je operator== overloaden?)

Eluke.nl | De mens onderscheid zich van (andere) dieren door o.a. complexe gereedschappen en bouwwerken te maken. Mens zijn is nerd zijn. Blijf Maken. (Of wordt, bijvoorbeeld, cultuurhistoricus)

Op 9 april 2016 12:46:51 schreef Lucky Luke:
Trouwens, waarom in vredesnaam:

if(readString == "JASPER")
{
char woord[] = "JASPER";
}

Hij ontvangt hetzelfde woord van de app als het woord dat moet worden weergeven worden (heb ik gedaan om gemakkelijk te zien welke knop welk woord was)

Hallo ik heb een vraag in verband met strings in arduino. Ik heb ondertussen door hoe mijn seriële connectie werkt en kan alle letters apart weergeven maar nu wil ik ook woorden weergeven. Aangezien bij de connectie als ik het woord WELKOM doorstuur dan ontvangt de arduino niet het woord WELKOM maar elke letter apart dus eerst W dan E dan L enzovoort nu wil ik dit kunnen opslaan in een string (char myChar[]) heeft iemand een idee hoe ik dus de letters er allemaal samen kan in opslaan.

voor de letters gebruikte ik een gewone char omdat dit toch slechts 1 letter is maar voor een woord moet ik dus meerdere hebben plaatsen vrij hebben.
Bij de letters deed ik gewoon:

c code:

Char letter;

en dan verder in het programma:

c code:

Char letter = Serial.read;
buckfast_beekeeper

Golden Member

Teller bijhouden en daarna tekst[teller] = char? Afsluiten met 0x00 of null of '\n'.

Na het ontvangen van een CR (0x0D) of LF (0x0A), afhankelijk van je laatste verzonden teken, reset je de teller.

Verder volg ik LL. Waarom een == en daarna dezelfde tekst in een char array steken. strcpy doet net wat jij op een andere manier aanpakt. char kan je vergelijken met ==. Voor een string dien je strcomp te gebruiken en dan nog zit er gevaar bij "String" != "string" != "STRING". Casten naar upper of lower is dan aangeraden.

Als je vaste teksten wil laten zien, zou ik ze oproepen met een volgnummer. Dit is minder data te verzenden. Voor de flexibiliteit zou ik geen vaste teksten programmeren maar gewoon een maximale stringlengte. De ontvangen tekst, verzonden door je app, komt dan integraal op je propeller terecht. Voorzie een vorm van error checking. Dat kan op verschillende manieren. Die mag je zelf uitzoeken.

Van Lambiek wordt goede geuze gemaakt.

Ik had misschien wel moeten bijvermelden dat het laatst geposte programma met seriele connectie niet meer van toepassing is het programma met een vast woord daarvoor echter wel.

[Bericht gewijzigd door Henry S. op vrijdag 22 april 2016 00:49:52 (75%)